diff options
author | Dieter Verfaillie <dieterv@optionexplicit.be> | 2015-03-15 20:35:29 +0100 |
---|---|---|
committer | Dieter Verfaillie <dieterv@optionexplicit.be> | 2015-04-18 21:44:03 +0200 |
commit | db7ab0e797f755fb7ff273a2071d27fd62a2b7c7 (patch) | |
tree | 5cf4b920a1cb0b5b10fa0a57df5a634592f39ebc /giscanner/collections | |
parent | f22b6e534774813c5285d4e482dc2d98b522af37 (diff) | |
download | gobject-introspection-db7ab0e797f755fb7ff273a2071d27fd62a2b7c7.tar.gz |
scanner: sync with upstream OrderedDict
Synced with https://github.com/zzzeek/sqlalchemy/commit/a4a826021fb6d77fadbdac0071616d7e5486e4d1
Diffstat (limited to 'giscanner/collections')
-rw-r--r-- | giscanner/collections/ordereddict.py | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/giscanner/collections/ordereddict.py b/giscanner/collections/ordereddict.py index 0cb4b956..e1f1afc9 100644 --- a/giscanner/collections/ordereddict.py +++ b/giscanner/collections/ordereddict.py @@ -30,9 +30,20 @@ # the MIT License: http://www.opensource.org/licenses/mit-license.php +import sys + + +py2k = sys.version_info < (3, 0) + + class OrderedDict(dict): """A dict that returns keys/values/items in the order they were added.""" + __slots__ = '_list', + + def __reduce__(self): + return OrderedDict, (self.items(),) + def __init__(self, ____sequence=None, **kwargs): self._list = [] if ____sequence is None: @@ -61,6 +72,7 @@ class OrderedDict(dict): self.__setitem__(key, ____sequence[key]) else: for key, value in ____sequence: + print key, value self[key] = value if kwargs: self.update(kwargs) @@ -75,25 +87,26 @@ class OrderedDict(dict): def __iter__(self): return iter(self._list) + def keys(self): + return list(self) + def values(self): return [self[key] for key in self._list] - def itervalues(self): - return iter([self[key] for key in self._list]) - - def keys(self): - return list(self._list) + def items(self): + return [(key, self[key]) for key in self._list] - def iterkeys(self): - return iter(self.keys()) + if py2k: + def itervalues(self): + return iter(self.values()) - def items(self): - return [(key, self[key]) for key in self.keys()] + def iterkeys(self): + return iter(self) - def iteritems(self): - return iter(self.items()) + def iteritems(self): + return iter(self.items()) - def __setitem__(self, key, obj): + def __setitem__(self, key, object): if key not in self: try: self._list.append(key) @@ -101,7 +114,7 @@ class OrderedDict(dict): # work around Python pickle loads() with # dict subclass (seems to ignore __setstate__?) self._list = [key] - dict.__setitem__(self, key, obj) + dict.__setitem__(self, key, object) def __delitem__(self, key): dict.__delitem__(self, key) |