From 50c0b5ed7a3c23eb17fcbda3fc6151691311502a Mon Sep 17 00:00:00 2001 From: pacien Date: Tue, 20 Aug 2019 08:45:27 +0200 Subject: commands/envelope: keep editable headers order Use the ordered set of header keys from the settings or from the current envelope when generating an editable envelope. Fixes https://github.com/pazz/alot/issues/898: Message header ordering isn't preserved from the editor Note: collections.OrderedDict has been used for backward compatibility with Python <3.7. --- alot/utils/collections.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 alot/utils/collections.py (limited to 'alot/utils') diff --git a/alot/utils/collections.py b/alot/utils/collections.py new file mode 100644 index 00000000..acde56ce --- /dev/null +++ b/alot/utils/collections.py @@ -0,0 +1,29 @@ +# This file is released under the GNU GPL, version 3 or a later revision. +# For further details see the COPYING file + +from collections.abc import Set + +# for backward compatibility with Python <3.7 +from collections import OrderedDict + + +class OrderedSet(Set): + """ + Ordered collection of distinct hashable objects. + Taken from https://stackoverflow.com/a/10006674 + """ + + def __init__(self, iterable=()): + self.d = OrderedDict.fromkeys(iterable) + + def __len__(self): + return len(self.d) + + def __contains__(self, element): + return element in self.d + + def __iter__(self): + return iter(self.d) + + def __repr__(self): + return str(list(self)) -- cgit v1.2.3