Observable.py 764 B

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