comparison env/lib/python3.7/site-packages/galaxy/util/odict.py @ 5:9b1c78e6ba9c draft default tip

"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author shellac
date Mon, 01 Jun 2020 08:59:25 -0400
parents 79f47841a781
children
comparison
equal deleted inserted replaced
4:79f47841a781 5:9b1c78e6ba9c
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 six.moves import UserDict
12 dict_alias = dict
13
14
15 class odict(UserDict):
16 """
17 http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/107747
18
19 This dictionary class extends UserDict to record the order in which items are
20 added. Calling keys(), values(), items(), etc. will return results in this
21 order.
22 """
23
24 def __init__(self, dict=None):
25 item = dict
26 self._keys = []
27 if isinstance(item, dict_alias):
28 UserDict.__init__(self, item)
29 else:
30 UserDict.__init__(self, None)
31 if isinstance(item, list):
32 for (key, value) in item:
33 self[key] = value
34
35 def __delitem__(self, key):
36 UserDict.__delitem__(self, key)
37 self._keys.remove(key)
38
39 def __setitem__(self, key, item):
40 UserDict.__setitem__(self, key, item)
41 if key not in self._keys:
42 self._keys.append(key)
43
44 def clear(self):
45 UserDict.clear(self)
46 self._keys = []
47
48 def copy(self):
49 new = odict()
50 new.update(self)
51 return new
52
53 def items(self):
54 return zip(self._keys, self.values())
55
56 def keys(self):
57 return self._keys[:]
58
59 def popitem(self):
60 try:
61 key = self._keys[-1]
62 except IndexError:
63 raise KeyError('dictionary is empty')
64 val = self[key]
65 del self[key]
66 return (key, val)
67
68 def setdefault(self, key, failobj=None):
69 if key not in self._keys:
70 self._keys.append(key)
71 return UserDict.setdefault(self, key, failobj)
72
73 def update(self, dict):
74 for (key, val) in dict.items():
75 self.__setitem__(key, val)
76
77 def values(self):
78 return map(self.get, self._keys)
79
80 def iterkeys(self):
81 return iter(self._keys)
82
83 def itervalues(self):
84 for key in self._keys:
85 yield self.get(key)
86
87 def iteritems(self):
88 for key in self._keys:
89 yield key, self.get(key)
90
91 def __iter__(self):
92 for key in self._keys:
93 yield key
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)