| | import collections |
| |
|
| |
|
| | |
| | class FreezableDefaultDict(collections.defaultdict): |
| | """ |
| | Often it is desirable to prevent the mutation of |
| | a default dict after its initial construction, such |
| | as to prevent mutation during iteration. |
| | |
| | >>> dd = FreezableDefaultDict(list) |
| | >>> dd[0].append('1') |
| | >>> dd.freeze() |
| | >>> dd[1] |
| | [] |
| | >>> len(dd) |
| | 1 |
| | """ |
| |
|
| | def __missing__(self, key): |
| | return getattr(self, '_frozen', super().__missing__)(key) |
| |
|
| | def freeze(self): |
| | self._frozen = lambda key: self.default_factory() |
| |
|
| |
|
| | class Pair(collections.namedtuple('Pair', 'name value')): |
| | @classmethod |
| | def parse(cls, text): |
| | return cls(*map(str.strip, text.split("=", 1))) |
| |
|