1234567891011121314151617181920212223242526272829303132333435363738394041 |
- class Observable:
- @staticmethod
- def create(source, parent=None, key=None):
- from . import ObservableDict
- from . import ObservableList
- if isinstance(source, ObservableDict) or isinstance(source, ObservableList):
- source.parent = parent
- source.key = key
- return source
- if isinstance(source, dict):
- return ObservableDict(source, parent, key)
- if isinstance(source, list):
- return ObservableList(source, parent, key)
- else:
- return source
- def __init__(self, parent, key):
- self.parent = parent
- self.key = key
- self.subscriptions = []
- def subscribe(self, handler, immediate=False):
- self.subscriptions.append(handler)
- if immediate:
- handler(self, [])
- def notify(self, keys=None):
- if keys is None:
- keys = []
- for s in self.subscriptions:
- s(self, keys)
- if self.parent is not None:
- if self.key is None:
- raise ValueError
- keys.insert(0, self.key)
- self.parent.notify(keys)
|