Mercurial > repos > shellac > sam_consensus_v3
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) |