diff --git a/src/hooked_containers/common.py b/src/hooked_containers/common.py index c576311..cb5b8af 100644 --- a/src/hooked_containers/common.py +++ b/src/hooked_containers/common.py @@ -20,19 +20,17 @@ class HookedContainer(Generic[T], ABC): def __repr__(self): return f"{self.__class__.__name__}({self._data!r})" - def __iter__(self): - return iter(self._data) + # Sequence Methods + # __contains__, __iter__, __reversed__, index, and count - def __contains__(self, value): - return value in self._data - - # MutableSequence Methods + @abstractmethod + def __getitem__(self, key): ... def __len__(self): return len(self._data) - @abstractmethod - def __getitem__(self, key): ... + # MutableSequence Methods + # append, reverse, extend, pop, remove, and __iadd__ def __setitem__(self, s, value): self._data[s] = value diff --git a/src/hooked_containers/sequence.py b/src/hooked_containers/sequence.py index 8af5160..624bf5c 100644 --- a/src/hooked_containers/sequence.py +++ b/src/hooked_containers/sequence.py @@ -26,7 +26,7 @@ class HookedList(HookedContainer[T], MutableSequence[T]): def __getitem__(self, s): # print("Getting item:", s) match self._data[s]: - case MutableSequence() as seq: + case HookedContainer(_data=seq): new_path = copy(self._path) new_path.append(s) # print(new_path) diff --git a/src/hooked_containers/state.py b/src/hooked_containers/state.py new file mode 100644 index 0000000..c44cc17 --- /dev/null +++ b/src/hooked_containers/state.py @@ -0,0 +1,22 @@ +from datetime import datetime + +from .mapping import HookedMapping + + +class DomainState(HookedMapping[str]): + def __setitem__(self, key, value): + super().__setitem__(key, value) + super().__setitem__("last_changed", datetime.now()) + + +class NameSpaceState(HookedMapping[str]): + _data: DomainState + + def __setitem__(self, key, value): + super().__setitem__(key, value) + # print("ns SetItem") + + def __getitem__(self, key): + val = super().__getitem__(key) + # print("ns GetItem") + return DomainState(self.hook, existing=val, path=self._path + [key])