Skip to content

Commit c50afdb

Browse files
committed
fix: remove observers before pickle
1 parent 3fb3a06 commit c50afdb

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

LoopStructural/utils/observer.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,18 @@ def detach(self, listener: Observer | Callback, event: str | None = None) -> Non
9393
s.discard(callback)
9494
else:
9595
self._observers.get(event, weakref.WeakSet()).discard(callback)
96-
96+
def __getstate__(self):
97+
state = self.__dict__.copy()
98+
state.pop('_lock', None) # RLock cannot be pickled
99+
state.pop('_observers', None) # WeakSet cannot be pickled
100+
state.pop('_any_observers', None)
101+
return state
102+
def __setstate__(self, state):
103+
self.__dict__.update(state)
104+
self._lock = threading.RLock()
105+
self._observers = {}
106+
self._any_observers = weakref.WeakSet()
107+
self._frozen = 0
97108
# ‑‑‑ notification api --------------------------------------------------
98109
def notify(self: T, event: str, *args: Any, **kwargs: Any) -> None:
99110
"""Notify observers that *event* happened."""

0 commit comments

Comments
 (0)