Source code for autotest.client.shared.backports.collections.defaultdict

'''
Backport of the defaultdict module, obtained from:
http://code.activestate.com/recipes/523034-emulate-collectionsdefaultdict/
'''

# pylint: disable=I0011,C0103


[docs]class defaultdict(dict): """ collections.defaultdict is a handy shortcut added in Python 2.5 which can be emulated in older versions of Python. This recipe tries to backport defaultdict exactly and aims to be safe to subclass and extend without worrying if the base class is in C or is being emulated. http://code.activestate.com/recipes/523034-emulate-collectionsdefaultdict/ :codeauthor: Jason Kirtland :license: PSF Changes: * replaced self.items() with self.iteritems() to fix Pickle bug as recommended by Aaron Lav * reformated with autopep8 """ def __init__(self, default_factory=None, *a, **kw): if (default_factory is not None and not hasattr(default_factory, '__call__')): raise TypeError('first argument must be callable') dict.__init__(self, *a, **kw) self.default_factory = default_factory def __getitem__(self, key): try: return dict.__getitem__(self, key) except KeyError: return self.__missing__(key) def __missing__(self, key): if self.default_factory is None: raise KeyError(key) self[key] = value = self.default_factory() return value def __reduce__(self): if self.default_factory is None: args = tuple() else: args = self.default_factory, return type(self), args, None, None, self.iteritems()
[docs] def copy(self): return self.__copy__()
def __copy__(self): return type(self)(self.default_factory, self) # pylint: disable=I0011,W0613 def __deepcopy__(self, memo): import copy return type(self)(self.default_factory, copy.deepcopy(self.iteritems())) def __repr__(self): return 'defaultdict(%s, %s)' % (self.default_factory, dict.__repr__(self))