def __init__(self,conn,parent): self.parent = conn self.exchange=parent.exchange self.strip=parent.strip self.prefix = tuple(parent.prefix) self._direct = parent.shunt self.filter = parent.filter if self._direct: try: i = self.filter.index('*') except ValueError: i = 999 try: i = min(self.filter.index('*'),i) except ValueError: pass if i < self.strip or self.strip and not self.filter: raise RuntimeError("You can't use 'shunt' if you strip elements you can't restore!") name = parent.dest if name is None: global _seq _seq += 1 name = SName(conn.name+("f"+str(_seq),)) self.channel = self.parent.conn.channel() self.channel.exchange_declare(exchange=self.exchange, type='topic', auto_delete=False, passive=False) super(EventCallback,self).__init__(name) register_worker(self, self._direct)
def __setitem__(self, key, val): assert val.name == key, repr(val.name) + " != " + repr(key) onHandlers[val.id] = val try: onHandlers2[val.parent.arglist].append(val) except KeyError: onHandlers2[val.parent.arglist] = [val] super(_OnHandlers, self).__setitem__(key, val) register_worker(val)
def exposed_monitor(self,callback,*args): try: w = EventCallback(self,callback,*args) self.workers.add(w) register_worker(w) return w except Exception as ex: fix_exception(ex) process_failure(ex)
def start_up(): """\ Code to be called first. The main loop is NOT running. """ register_worker(Shutdown_Worker("shutdown handler")) global running if not running: running = True try: process_event(startup_event) except Exception as e: fix_exception(e) process_failure(e)
return cmp(a.prio,b.prio) for w in sorted(collections.itervalues(),cmp=byprio): if not w.can_do("del"): continue for d in w.values(): try: d.delete(event.ctx) except Exception as ex: fix_exception(ex) print_exception(ex) # Logging may not work any more def report(self,*a,**k): return () register_worker(Shutdown_Collections("free all collections")) class ShutdownHandler(Statement): """A command handler to stop the whole thing.""" name="shutdown" doc="stops executing the program." long_doc="""\ shutdown stops executing the program. shutdown now ... but does not wait for active events to terminate. """ def run(self,ctx,**k): event = self.params(ctx) if len(event): if tuple(event) == ("now",): stop_mainloop()
return e[0] == "say more" def process(self, event=None, **k): super(SayMoreWorker, self).process(event=event, **k) w = WorkSequence(event, self) w.append(SayWorker("TellOne")) w.append(SayWorker("TellTwo")) return w from test import run_logger run_logger("basic") hello_ev = Event(Context(), "say", "hello") hello2_ev = Event(Context(), "say more", "greeting") register_worker(SayWorker("TellMe")) register_worker(SayMoreWorker("say something")) def main(): try: process_event(hello_ev) process_event(hello2_ev) finally: shut_down() mainloop(main)
def load(self): main_words.register_statement(FS20receive) main_words.register_statement(FS20delreceive) main_words.register_statement(FS20transmit) main_words.register_statement(FS20deltransmit) register_worker(FS20tr_shutdown)