frozen_dict.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from copy import deepcopy
  2. from typing import Dict, TypeVar
  3. from .frozen_error import FrozenError
  4. __all__ = ["FrozenDict"]
  5. KT = TypeVar("KT")
  6. VT = TypeVar("VT", covariant=True)
  7. class FrozenDict(Dict[KT, VT]):
  8. """Dictionary that can only be read, but not changed.
  9. .. deprecated:: 3.2
  10. Use dicts and the Mapping type instead. Will be removed in v3.3.
  11. """
  12. def __delitem__(self, key):
  13. raise FrozenError
  14. def __setitem__(self, key, value):
  15. raise FrozenError
  16. def __iadd__(self, value):
  17. raise FrozenError
  18. def __hash__(self):
  19. return hash(tuple(self.items()))
  20. def __copy__(self) -> "FrozenDict":
  21. return FrozenDict(self)
  22. copy = __copy__
  23. def __deepcopy__(self, memo: Dict) -> "FrozenDict":
  24. return FrozenDict({k: deepcopy(v, memo) for k, v in self.items()})
  25. def clear(self):
  26. raise FrozenError
  27. def pop(self, key, default=None):
  28. raise FrozenError
  29. def popitem(self):
  30. raise FrozenError
  31. def setdefault(self, key, default=None):
  32. raise FrozenError
  33. def update(self, other=None):
  34. raise FrozenError