IODA Bundle
orddicts.py
Go to the documentation of this file.
1 from collections import OrderedDict, Callable
2 
3 
4 class DefaultOrderedDict(OrderedDict):
5  # Source: http://stackoverflow.com/a/6190500/562769
6  def __init__(self, default_factory=None, *a, **kw):
7  if (default_factory is not None and not isinstance(default_factory, Callable)):
8  raise TypeError('first argument must be callable')
9  OrderedDict.__init__(self, *a, **kw)
10  self.default_factorydefault_factory = default_factory
11 
12  def __getitem__(self, key):
13  try:
14  return OrderedDict.__getitem__(self, key)
15  except KeyError:
16  return self.__missing____missing__(key)
17 
18  def __missing__(self, key):
19  if self.default_factorydefault_factory is None:
20  raise KeyError(key)
21  self[key] = value = self.default_factorydefault_factory()
22  return value
23 
24  def __reduce__(self):
25  if self.default_factorydefault_factory is None:
26  args = tuple()
27  else:
28  args = self.default_factorydefault_factory,
29  return type(self), args, None, None, self.items()
30 
31  def copy(self):
32  return self.__copy____copy__()
33 
34  def __copy__(self):
35  return type(self)(self.default_factorydefault_factory, self)
36 
37  def __deepcopy__(self, memo):
38  import copy
39  return type(self)(self.default_factorydefault_factory,
40  copy.deepcopy(self.items()))
41 
42  def __repr__(self):
43  return 'OrderedDefaultDict(%s, %s)' % (self.default_factorydefault_factory,
44  OrderedDict.__repr__(self))
def __missing__(self, key)
Definition: orddicts.py:18
def __getitem__(self, key)
Definition: orddicts.py:12
def __init__(self, default_factory=None, *a, **kw)
Definition: orddicts.py:6
def __deepcopy__(self, memo)
Definition: orddicts.py:37