]>
git.proxmox.com Git - mirror_edk2.git/blob - AppPkg/Applications/Python/Python-2.7.10/Lib/UserDict.py
1 """A more or less complete user-defined wrapper around dictionary objects."""
4 def __init__(self
, dict=None, **kwargs
):
10 def __repr__(self
): return repr(self
.data
)
11 def __cmp__(self
, dict):
12 if isinstance(dict, UserDict
):
13 return cmp(self
.data
, dict.data
)
15 return cmp(self
.data
, dict)
16 __hash__
= None # Avoid Py3k warning
17 def __len__(self
): return len(self
.data
)
18 def __getitem__(self
, key
):
21 if hasattr(self
.__class
__, "__missing__"):
22 return self
.__class
__.__missing
__(self
, key
)
24 def __setitem__(self
, key
, item
): self
.data
[key
] = item
25 def __delitem__(self
, key
): del self
.data
[key
]
26 def clear(self
): self
.data
.clear()
28 if self
.__class
__ is UserDict
:
29 return UserDict(self
.data
.copy())
39 def keys(self
): return self
.data
.keys()
40 def items(self
): return self
.data
.items()
41 def iteritems(self
): return self
.data
.iteritems()
42 def iterkeys(self
): return self
.data
.iterkeys()
43 def itervalues(self
): return self
.data
.itervalues()
44 def values(self
): return self
.data
.values()
45 def has_key(self
, key
): return key
in self
.data
46 def update(self
, dict=None, **kwargs
):
49 elif isinstance(dict, UserDict
):
50 self
.data
.update(dict.data
)
51 elif isinstance(dict, type({})) or not hasattr(dict, 'items'):
52 self
.data
.update(dict)
54 for k
, v
in dict.items():
57 self
.data
.update(kwargs
)
58 def get(self
, key
, failobj
=None):
62 def setdefault(self
, key
, failobj
=None):
66 def pop(self
, key
, *args
):
67 return self
.data
.pop(key
, *args
)
69 return self
.data
.popitem()
70 def __contains__(self
, key
):
71 return key
in self
.data
73 def fromkeys(cls
, iterable
, value
=None):
79 class IterableUserDict(UserDict
):
81 return iter(self
.data
)
84 _abcoll
.MutableMapping
.register(IterableUserDict
)
88 # Mixin defining all dictionary methods for classes that already have
89 # a minimum dictionary interface including getitem, setitem, delitem,
90 # and keys. Without knowledge of the subclass constructor, the mixin
91 # does not define __init__() or copy(). In addition to the four base
92 # methods, progressively more efficiency comes with defining
93 # __contains__(), __iter__(), and iteritems().
95 # second level definitions support higher levels
99 def has_key(self
, key
):
105 def __contains__(self
, key
):
106 return self
.has_key(key
)
108 # third level takes advantage of second level definitions
113 return self
.__iter
__()
115 # fourth level uses definitions from lower levels
116 def itervalues(self
):
117 for _
, v
in self
.iteritems():
120 return [v
for _
, v
in self
.iteritems()]
122 return list(self
.iteritems())
124 for key
in self
.keys():
126 def setdefault(self
, key
, default
=None):
132 def pop(self
, key
, *args
):
134 raise TypeError, "pop expected at most 2 arguments, got "\
135 + repr(1 + len(args
))
146 k
, v
= self
.iteritems().next()
147 except StopIteration:
148 raise KeyError, 'container is empty'
151 def update(self
, other
=None, **kwargs
):
152 # Make progressively weaker assumptions about "other"
155 elif hasattr(other
, 'iteritems'): # iteritems saves memory and lookups
156 for k
, v
in other
.iteritems():
158 elif hasattr(other
, 'keys'):
159 for k
in other
.keys():
166 def get(self
, key
, default
=None):
172 return repr(dict(self
.iteritems()))
173 def __cmp__(self
, other
):
176 if isinstance(other
, DictMixin
):
177 other
= dict(other
.iteritems())
178 return cmp(dict(self
.iteritems()), other
)
180 return len(self
.keys())