Observable.py 896 B

123456789101112131415161718192021222324252627282930313233
  1. class Observable:
  2. @staticmethod
  3. def create(source, parent=None):
  4. from . import ObservableDict
  5. from . import ObservableList
  6. if isinstance(source, ObservableDict):
  7. return source
  8. if isinstance(source, ObservableList):
  9. return source
  10. if isinstance(source, dict):
  11. return ObservableDict(source, parent)
  12. if isinstance(source, list):
  13. return ObservableList(source, parent)
  14. else:
  15. return source
  16. def __init__(self, parent):
  17. self.parent = parent
  18. self.subscriptions = []
  19. def subscribe(self, handler, immediate=False):
  20. self.subscriptions.append(handler)
  21. if immediate:
  22. handler(self)
  23. def notify(self):
  24. for s in self.subscriptions:
  25. s(self)
  26. if self.parent is not None:
  27. self.parent.notify()