async def confirm_workflow(self) -> None: try: workflow.onstart(self.workflow) await self.confirm_layout() finally: workflow.onclose(self.workflow) self.workflow = None
async def session_handler(iface, sid): reader = None ctx = Context(iface, sid) while True: try: # wait for new message, if needed, and find handler if not reader: reader = ctx.getreader() await reader.aopen() try: handler, args = workflow_handlers[reader.type] except KeyError: handler, args = unexpected_msg, () w = handler(ctx, reader, *args) try: workflow.onstart(w) await w finally: workflow.onclose(w) except UnexpectedMessageError as exc: # retry with opened reader from the exception reader = exc.reader continue except FailureError as exc: # we log FailureError as warning, not as exception log.warning(__name__, 'failure: %s', exc.message) except Exception as exc: # sessions are never closed by raised exceptions log.exception(__name__, exc) # read new message in next iteration reader = None
async def confirm(self) -> None: confirmed = False try: confirmed = await self.confirm_layout() finally: self.confirmed = confirmed workflow.onclose(self.task)
async def session_handler(iface: WireInterface, sid: int) -> None: reader = None ctx = Context(iface, sid) while True: try: # wait for new message, if needed, and find handler if not reader: reader = ctx.make_reader() await reader.aopen() try: handler, args = workflow_handlers[reader.type] except KeyError: handler, args = unexpected_msg, () m = utils.unimport_begin() w = handler(ctx, reader, *args) try: workflow.onstart(w) await w finally: workflow.onclose(w) utils.unimport_end(m) except UnexpectedMessageError as exc: # retry with opened reader from the exception reader = exc.reader continue except Error as exc: # we log wire.Error as warning, not as exception if __debug__: log.warning(__name__, "failure: %s", exc.message) except Exception as exc: # sessions are never closed by raised exceptions if __debug__: log.exception(__name__, exc) # read new message in next iteration reader = None
def kill(self) -> None: if self.task is not None: workflow.onclose(self.task) loop.close(self.task) self.task = None