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)
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()
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()
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")