An object that can be used to store arbitrary state. Used for `request.state` and `app.state`.
| 662 | |
| 663 | |
| 664 | class State: |
| 665 | """ |
| 666 | An object that can be used to store arbitrary state. |
| 667 | |
| 668 | Used for `request.state` and `app.state`. |
| 669 | """ |
| 670 | |
| 671 | _state: dict[str, Any] |
| 672 | |
| 673 | def __init__(self, state: dict[str, Any] | None = None): |
| 674 | if state is None: |
| 675 | state = {} |
| 676 | super().__setattr__("_state", state) |
| 677 | |
| 678 | def __setattr__(self, key: Any, value: Any) -> None: |
| 679 | self._state[key] = value |
| 680 | |
| 681 | def __getattr__(self, key: Any) -> Any: |
| 682 | try: |
| 683 | return self._state[key] |
| 684 | except KeyError: |
| 685 | message = "'{}' object has no attribute '{}'" |
| 686 | raise AttributeError(message.format(self.__class__.__name__, key)) |
| 687 | |
| 688 | def __delattr__(self, key: Any) -> None: |
| 689 | del self._state[key] |
| 690 | |
| 691 | def __getitem__(self, key: str) -> Any: |
| 692 | return self._state[key] |
| 693 | |
| 694 | def __setitem__(self, key: str, value: Any) -> None: |
| 695 | self._state[key] = value |
| 696 | |
| 697 | def __delitem__(self, key: str) -> None: |
| 698 | del self._state[key] |
| 699 | |
| 700 | def __iter__(self) -> Iterator[str]: |
| 701 | return iter(self._state) |
| 702 | |
| 703 | def __len__(self) -> int: |
| 704 | return len(self._state) |
no outgoing calls