Exemplo n.º 1
0
	def run(self,ctx,**k):
		event = self.params(ctx)
		if len(event):
			self.displayname = SName(event)

		if self.timespec is None:
			raise SyntaxError(u'Usage: wait [name…]: for|until|next ‹timespec›')
		if self.is_update:
			return Waiters[self.displayname].retime(self.timespec())
		w = Waiter(self, self.displayname, self.force)
		w.init(self.timespec())
		process_event(Event(self.ctx(loglevel=TRACE),"wait","start",ixtime(w.end,self.force),*w.name))
		try:
			if w.job:
				r = w.job.get()
			else:
				r = True
		except Exception as ex:
			fix_exception(ex)
			log_exc(msg=u"Wait %s died:"%(self.name,), err=ex, level=TRACE)
			raise
		else:
			tm = ixtime(now(self.force),self.force)
			if r: # don't log 'done' if canceled
				process_event(Event(self.ctx(loglevel=TRACE),"wait","done",tm, *w.name))
			ctx.wait = tm
			if not r:
				raise DelayCancelled(w)
Exemplo n.º 2
0
	def run(self,ctx,**k):
		event = self.params(ctx)
		if len(event):
			self.displayname = SName(event)

		if self.timespec is None:
			raise SyntaxError(u'Usage: wait [name…]: for|until|next ‹timespec›')
		if self.is_update:
			return Waiters[self.displayname].retime(self.timespec())
		w = Waiter(self, self.displayname, self.force)
		w.init(self.timespec())
		simple_event("wait","start",*w.name, end_time=ixtime(w.end,self.force), loglevel=TRACE)
		try:
			if w.job:
				r = w.job.get()
			else:
				r = True
		except Exception as ex:
			simple_event("wait","error", *w.name, time=tm,loglevel=TRACE)

			fix_exception(ex)
			log_exc(msg=u"Wait %s died:"%(self.name,), err=ex, level=TRACE)
			raise
		else:
			tm = ixtime(now(self.force),self.force)
			if r:
				simple_event("wait","done", *w.name, loglevel=TRACE)
			else:
				simple_event("wait","cancel", *w.name, loglevel=TRACE)
			ctx.wait = tm
			if not r:
				raise DelayCancelled(w)
		finally:
			w.delete()
Exemplo n.º 3
0
    def run(self, ctx, **k):
        event = self.params(ctx)
        if len(event):
            self.displayname = SName(event)

        if self.timespec is None:
            raise SyntaxError(
                u'Usage: wait [name…]: for|until|next ‹timespec›')
        if self.is_update:
            return Waiters[self.displayname].retime(self.timespec())
        w = Waiter(self, self.displayname, self.force, self.soft)
        w.init(self.timespec())
        simple_event("wait",
                     "start",
                     *w.name,
                     end_time=ixtime(w.end, self.force),
                     loglevel=TRACE,
                     deprecated=True)
        simple_event("wait",
                     "state",
                     *w.name,
                     end_time=ixtime(w.end, self.force),
                     loglevel=TRACE,
                     state="start")
        try:
            if w.job:
                r = w.job.get()
            else:
                r = True
        except Exception as ex:
            simple_event("wait",
                         "error",
                         *w.name,
                         end_time=ixtime(w.end, self.force),
                         loglevel=TRACE,
                         deprecated=True)
            simple_event("wait",
                         "state",
                         *w.name,
                         end_time=ixtime(w.end, self.force),
                         loglevel=TRACE,
                         state="error",
                         error=ex)

            fix_exception(ex)
            log_exc(msg=u"Wait %s died:" % (self.name, ), err=ex, level=TRACE)
            raise
        else:
            tm = ixtime(now(self.force), self.force)
            if r:
                simple_event("wait",
                             "done",
                             *w.name,
                             loglevel=TRACE,
                             deprecated=True)
                simple_event("wait",
                             "state",
                             *w.name,
                             loglevel=TRACE,
                             end_time=ixtime(w.end, self.force),
                             state="done")
            else:
                simple_event("wait",
                             "cancel",
                             *w.name,
                             loglevel=TRACE,
                             deprecated=True)
                simple_event("wait",
                             "state",
                             *w.name,
                             loglevel=TRACE,
                             end_time=ixtime(w.end, self.force),
                             state="cancel")
            ctx.wait = tm
            if self.soft is None:
                if not r:
                    raise DelayCancelled(w)
            elif not self.soft:
                if r:
                    raise DelayReached(w)
        finally:
            w.delete()
Exemplo n.º 4
0
	def cancel(self, err=DelayCancelled):
		"""Cancel a waiter."""
		process_event(Event(self.ctx(loglevel=TRACE),"wait","cancel",ixtime(self.end,self.force),*self.name))
		self._cmd("cancel")