Example #1
0
	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)
Example #2
0
 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)
Example #3
0
File: rpc.py Project: pombreda/MoaT
	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)
Example #4
0
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)
Example #5
0
			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()
Example #6
0
        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)
Example #7
0
 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)