| 89 | |
| 90 | |
| 91 | class Session(dict[str, typing.Any]): |
| 92 | accessed: bool = False |
| 93 | modified: bool = False |
| 94 | |
| 95 | def mark_accessed(self) -> None: |
| 96 | self.accessed = True |
| 97 | |
| 98 | def mark_modified(self) -> None: |
| 99 | self.accessed = True |
| 100 | self.modified = True |
| 101 | |
| 102 | def __setitem__(self, key: str, value: typing.Any) -> None: |
| 103 | self.mark_modified() |
| 104 | super().__setitem__(key, value) |
| 105 | |
| 106 | def __delitem__(self, key: str) -> None: |
| 107 | self.mark_modified() |
| 108 | super().__delitem__(key) |
| 109 | |
| 110 | def clear(self) -> None: |
| 111 | self.mark_modified() |
| 112 | super().clear() |
| 113 | |
| 114 | def pop(self, key: str, *args: typing.Any) -> typing.Any: |
| 115 | self.modified = self.modified or key in self |
| 116 | return super().pop(key, *args) |
| 117 | |
| 118 | def setdefault(self, key: str, default: typing.Any = None) -> typing.Any: |
| 119 | if key not in self: |
| 120 | self.mark_modified() |
| 121 | return super().setdefault(key, default) |
| 122 | |
| 123 | def update(self, *args: typing.Any, **kwargs: typing.Any) -> None: |
| 124 | self.mark_modified() |
| 125 | super().update(*args, **kwargs) |
no outgoing calls