comparison env/lib/python3.9/site-packages/galaxy/util/odict.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4f3585e2f14b
1 """
2 Ordered dictionary implementation with `insert` functionality.
3
4 This is only used in one specific place in the codebase:
5 galaxy.tools.toolbox.panel
6
7 Whenever possible the stdlib `collections.OrderedDict` should be used instead of
8 this custom implementation.
9 """
10
11 from collections import UserDict
12
13 dict_alias = dict
14
15
16 class odict(UserDict):
17 """
18 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/107747
19
20 This dictionary class extends UserDict to record the order in which items are
21 added. Calling keys(), values(), items(), etc. will return results in this
22 order.
23 """
24
25 def __init__(self, dict=None):
26 item = dict
27 self._keys = []
28 if isinstance(item, dict_alias):
29 UserDict.__init__(self, item)
30 else:
31 UserDict.__init__(self, None)
32 if isinstance(item, list):
33 for (key, value) in item:
34 self[key] = value
35
36 def __delitem__(self, key):
37 UserDict.__delitem__(self, key)
38 self._keys.remove(key)
39
40 def __setitem__(self, key, item):
41 UserDict.__setitem__(self, key, item)
42 if key not in self._keys:
43 self._keys.append(key)
44
45 def clear(self):
46 UserDict.clear(self)
47 self._keys = []
48
49 def copy(self):
50 new = odict()
51 new.update(self)
52 return new
53
54 def items(self):
55 return zip(self._keys, self.values())
56
57 def keys(self):
58 return self._keys[:]
59
60 def popitem(self):
61 try:
62 key = self._keys[-1]
63 except IndexError:
64 raise KeyError('dictionary is empty')
65 val = self[key]
66 del self[key]
67 return (key, val)
68
69 def setdefault(self, key, failobj=None):
70 if key not in self._keys:
71 self._keys.append(key)
72 return UserDict.setdefault(self, key, failobj)
73
74 def update(self, dict):
75 for (key, val) in dict.items():
76 self.__setitem__(key, val)
77
78 def values(self):
79 return map(self.get, self._keys)
80
81 def iterkeys(self):
82 return iter(self._keys)
83
84 def itervalues(self):
85 for key in self._keys:
86 yield self.get(key)
87
88 def iteritems(self):
89 for key in self._keys:
90 yield key, self.get(key)
91
92 def __iter__(self):
93 yield from self._keys
94
95 def reverse(self):
96 self._keys.reverse()
97
98 def insert(self, index, key, item):
99 if key not in self._keys:
100 self._keys.insert(index, key)
101 UserDict.__setitem__(self, key, item)