diff --git a/python/attime.py b/python/attime.py index d4492f5ea17dd4de0c758bc02a2f8508944a6d23..dc33720f5e943a2c7b23c5945e421fd07600b16f 100644 --- a/python/attime.py +++ b/python/attime.py @@ -1,19 +1,33 @@ +class attimeAlways: + None +ALWAYS = attimeAlways() +class attimeStop: + None +STOP = attimeStop() + class Calendar: def __init__(self): self.events=dict() self.ping = list() + #self.periodic=list() 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 stop(self,*args): self.registerEvents(STOP,*args) + def registerEvent( self,iter,pairfundoc ): + #if iter==ALWAYS: + # self.periodic.append(pairfundoc) + # return + if iter==STOP: + self.events[ALWAYS].remove(pairfundoc) + if not iter in self.events.keys(): self.events[iter] = list() self.events[iter].append(pairfundoc) @@ -22,7 +36,8 @@ class Calendar: 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] ) ) + 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 ): @@ -36,7 +51,10 @@ class Calendar: def callPing(self): for f in self.ping: f() def run(self,iter,*args): - if iter in self.events.keys(): + if ALWAYS in self.events: + for fun,doc in self.events[ALWAYS]: + fun(*args) + if iter in self.events: self.callPing() for fun,doc in self.events[iter]: intro = "At time "+str(iter)+": " @@ -60,10 +78,10 @@ class Calendar: calendarRef=self fun=None def __init__(selfdeco,functer): - if functer.__doc__!=None: - if len(functer.__doc__)>0: - selfdeco.__doc__ = functer.__doc__ - selfdeco.__doc__ += " (will be run at time "+str(selfdeco.iterRef)+")" + if functer.__doc__==None: functer.__doc__ = "No doc fun" + if len(functer.__doc__)>0: + selfdeco.__doc__ = functer.__doc__ + selfdeco.__doc__ += " (will be run at time "+str(selfdeco.iterRef)+")" selfdeco.fun=functer selfdeco.calendarRef.registerEvents(selfdeco.iterRef,functer,functer.__doc__) def __call__(selfdeco,*args): @@ -74,3 +92,7 @@ class Calendar: for i in range(t+1): self.run(i) attime=Calendar() + + +sigset = ( lambda s,v : s.__class__.value.__set__(s,v) ) +refset = ( lambda mt,v : mt.__class__.ref.__set__(mt,v) )