From 9fea5462c1c6fb92ee9f00c27ecb9f6817127370 Mon Sep 17 00:00:00 2001 From: Mansard <nmansard@laas.fr> Date: Wed, 31 Aug 2011 15:31:31 +0200 Subject: [PATCH] Changes to accept several arguments per iteration. --- python/attime.py | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/python/attime.py b/python/attime.py index 90f8ee4..2f900ff 100644 --- a/python/attime.py +++ b/python/attime.py @@ -1,8 +1,36 @@ class Calendar: events=dict() - def registerEvent( self,iter,fun,doc ): + def __repr__(self): + res='' +# for iter in sort(self.events.keys()): + for iter,funpairs in sorted( self.events.iteritems() ): + res += str(iter)+": \n" +# funpairs=self.events[iter] + for funpair in funpairs: + if funpair[1]=='': res+=funpair[0]+'\n' + else: res += str(funpair[1])+'\n' + return res + + def registerEvent( self,iter,pairfundoc ): if not iter in self.events.keys(): self.events[iter] = list() - self.events[iter] += [ (fun,doc) ] + self.events[iter].append(pairfundoc) + + def registerEvents( self,iter,*funs ): + ''' + 3 entry types are possible: 1. only the functor. 2. a pair + (functor,doc). 3. a list of pairs (functor,doc). + ''' + if len(funs)==2 and callable(funs[0]) and isinstance( funs[1],str ): self.registerEvent(iter, ( funs[0],funs[1] ) ) + else: + for fun in funs: + if isinstance( fun,tuple ): + self.registerEvent(iter,fun) + else: # assert iscallable(fun) + if 'functor' in fun.__dict__: + self.registerEvent(iter, (fun.functor,fun.functor.__doc__) ) + else: + self.registerEvent(iter, (fun,fun.__doc__) ) + def run(self,iter,*args): if iter in self.events.keys(): for fun,doc in self.events[iter]: @@ -13,10 +41,9 @@ class Calendar: else: print intro,"Runing ", fun fun(*args) - def __call__(self,iterarg,functer=None,doc=None): - if functer==None: return self.generatorDecorator(iterarg) - else: - self.registerEvent(iterarg,functer,doc) + def __call__(self,iterarg,*funs): + if len(funs)==0: return self.generatorDecorator(iterarg) + else: self.registerEvents(iterarg,*funs) def generatorDecorator(self,iterarg): """ @@ -33,7 +60,7 @@ class Calendar: selfdeco.__doc__ = functer.__doc__ selfdeco.__doc__ += " (will be run at time "+str(selfdeco.iterRef)+")" selfdeco.fun=functer - selfdeco.calendarRef.registerEvent(selfdeco.iterRef,functer,functer.__doc__) + selfdeco.calendarRef.registerEvents(selfdeco.iterRef,functer,functer.__doc__) def __call__(selfdeco,*args): selfdeco.fun(*args) return calendarDeco -- GitLab