adds dict.pop method to ObservableDict

This commit is contained in:
Mose Müller 2024-04-30 13:15:42 +02:00
parent e2f94c8a28
commit 3384d1bebf
2 changed files with 30 additions and 1 deletions

View File

@ -226,7 +226,7 @@ class _ObservableList(ObservableObject, list[Any]):
return instance_attr_name
class _ObservableDict(dict[str, Any], ObservableObject):
class _ObservableDict(ObservableObject, dict[str, Any]):
def __init__(
self,
original_dict: dict[str, Any],
@ -266,3 +266,11 @@ class _ObservableDict(dict[str, Any], ObservableObject):
if observer_attr_name != "":
return f"{observer_attr_name}{instance_attr_name}"
return instance_attr_name
def pop(self, key: str) -> Any:
self._remove_observer_if_observable(f'["{key}"]')
popped_item = super().pop(key)
self._notify_changed("", self)
return popped_item

View File

@ -193,3 +193,24 @@ def test_dotted_dict_key(caplog: pytest.LogCaptureFixture) -> None:
instance.dict_attr["dotted.key"] = "Ciao"
assert "'dict_attr[\"dotted.key\"]' changed to 'Ciao'" in caplog.text
def test_pop(caplog: pytest.LogCaptureFixture) -> None:
class NestedObservable(Observable):
def __init__(self) -> None:
super().__init__()
self.name = "Hello"
nested_instance = NestedObservable()
class MyObservable(Observable):
def __init__(self) -> None:
super().__init__()
self.dict_attr = {"nested": nested_instance}
instance = MyObservable()
MyObserver(instance)
assert instance.dict_attr.pop("nested") == nested_instance
assert nested_instance._observers == {'["nested"]': []}
assert f"'dict_attr' changed to '{instance.dict_attr}'" in caplog.text