Skip to content

Commit

Permalink
Add unwatch() (#255)
Browse files Browse the repository at this point in the history
Also simplified signature of watch (and unwatch).
  • Loading branch information
ceball committed Aug 28, 2018
1 parent 7a44282 commit d79d3f8
Showing 1 changed file with 11 additions and 5 deletions.
16 changes: 11 additions & 5 deletions param/parameterized.py
Original file line number Diff line number Diff line change
Expand Up @@ -1102,7 +1102,7 @@ def _spec_to_obj(self_,spec):
return MInfo(inst=inst,cls=cls,name=attr,mthd=getattr(src,attr))


def watch(self_,parameter_name,parameter_attribute=None,fn=None):
def _watch(self_,action,fn,parameter_name,parameter_attribute=None):
#cls,obj = (slf_or_cls,None) if isinstance(slf_or_cls,ParameterizedMetaclass) else (slf_or_cls.__class__,slf_or_cls)

assert parameter_name in self_.cls.params()
Expand All @@ -1116,19 +1116,25 @@ def watch(self_,parameter_name,parameter_attribute=None,fn=None):
subscribers[parameter_name] = {}
if parameter_attribute not in subscribers[parameter_name]:
subscribers[parameter_name][parameter_attribute] = []
subscribers[parameter_name][parameter_attribute].append(fn)
getattr(subscribers[parameter_name][parameter_attribute],action)(fn)
else:
subscribers = self_.cls.params(parameter_name).subscribers
if parameter_attribute not in subscribers:
subscribers[parameter_attribute] = []
subscribers[parameter_attribute].append(fn)
getattr(subscribers[parameter_attribute],action)(fn)

def watch(self_,fn,parameter_name,parameter_attribute=None):
self_._watch('append',fn,parameter_name,parameter_attribute)

def unwatch(self_,fn,parameter_name,parameter_attribute=None):
self_._watch('remove',fn,parameter_name,parameter_attribute)

# TODO: now unused?
# TODO: event_type (e.g. set, change)
def subscribe(self_,mthd_name,*callbacks):
for p in self_.self_or_cls.param.params_depended_on(mthd_name):
for c in callbacks:
(p.inst or p.cls).param.watch(p.name,p.what,c)
(p.inst or p.cls).param.watch(c,p.name,p.what)


# Instance methods
Expand Down Expand Up @@ -1736,7 +1742,7 @@ def __init__(self,**params):
# 'dependers'.
for p in self.param.params_depended_on(n):
# TODO: can't remember why not just pass m (rather than _m_caller) here
(p.inst or p.cls).param.watch(p.name,p.what,_m_caller(self,n))
(p.inst or p.cls).param.watch(_m_caller(self,n),p.name,p.what)

self.initialized=True

Expand Down

0 comments on commit d79d3f8

Please sign in to comment.