• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import collections
2
3
4# from jaraco.collections 3.3
5class FreezableDefaultDict(collections.defaultdict):
6    """
7    Often it is desirable to prevent the mutation of
8    a default dict after its initial construction, such
9    as to prevent mutation during iteration.
10
11    >>> dd = FreezableDefaultDict(list)
12    >>> dd[0].append('1')
13    >>> dd.freeze()
14    >>> dd[1]
15    []
16    >>> len(dd)
17    1
18    """
19
20    def __missing__(self, key):
21        return getattr(self, '_frozen', super().__missing__)(key)
22
23    def freeze(self):
24        self._frozen = lambda key: self.default_factory()
25
26
27class Pair(collections.namedtuple('Pair', 'name value')):
28    @classmethod
29    def parse(cls, text):
30        return cls(*map(str.strip, text.split("=", 1)))
31