_collections.py 760 B

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