Mercurial > code > home > repos > light9
view light9/observable.py @ 1536:7a85229d07a0
currentgraphstate now returns readonly (not actually snapshotted) view of the graph, not a copy
Ignore-this: 7db0291740fe8dee0ad25b24571b171b
author | Drew Perttula <drewp@bigasterisk.com> |
---|---|
date | Thu, 11 May 2017 05:20:15 +0000 |
parents | 7445bcd3349d |
children | 7772cc48e016 |
line wrap: on
line source
import logging log = logging.getLogger('observable') class _NoNewVal(object): pass class Observable(object): """ like knockout's observable. Hopefully this can be replaced by a better python one compare with: http://knockoutjs.com/documentation/observables.html https://github.com/drpancake/python-observable/blob/master/observable/observable.py """ def __init__(self, val): self.val = val self.subscribers = set() def __call__(self, newVal=_NoNewVal): if newVal is _NoNewVal: return self.val if newVal == self.val: log.debug("%r unchanged from %r", newVal, self.val) return self.val = newVal for s in self.subscribers: s(newVal) def subscribe(self, cb, callNow=True): """cb is called with new values, and also right now with the current value unless you opt out""" self.subscribers.add(cb) if callNow: cb(self.val)