| 24 | |
| 25 | @dataclasses.dataclass(frozen=True, init=False) |
| 26 | class _FrozenDictStrStr(Mapping[str, str]): |
| 27 | _data: MappingProxyType[str, str] |
| 28 | |
| 29 | def __init__(self, **kwargs): |
| 30 | object.__setattr__( |
| 31 | self, "_data", MappingProxyType(dict(sorted(kwargs.items()))) |
| 32 | ) |
| 33 | |
| 34 | def __getitem__(self, key: str) -> str: |
| 35 | return self._data[key] |
| 36 | |
| 37 | def __iter__(self): |
| 38 | return iter(self._data) |
| 39 | |
| 40 | def __len__(self): |
| 41 | return len(self._data) |
| 42 | |
| 43 | def __hash__(self) -> int: |
| 44 | return hash(frozenset(self._data.items())) |
| 45 | |
| 46 | def __getstate__(self) -> object: |
| 47 | return dict(self._data) |
| 48 | |
| 49 | def __setstate__(self, state: object) -> None: |
| 50 | if not isinstance(state, dict): |
| 51 | msg = "Invalid state for _FrozenDictStrStr" |
| 52 | raise TypeError(msg) |
| 53 | object.__setattr__(self, "_data", MappingProxyType(state)) |
| 54 | |
| 55 | |
| 56 | @dataclasses.dataclass(frozen=True) |
no outgoing calls