def _step(task: Task, value: Any) -> None: try: if isinstance(value, BaseException): result = task.throw(value) # type: ignore # error: Argument 1 to "throw" of "Coroutine" has incompatible type "Exception"; expected "Type[BaseException]" # rationale: In micropython, generator.throw() accepts the exception object directly. else: result = task.send(value) except StopIteration as e: # as e: if __debug__: log.debug(__name__, "finish: %s", task) finalize(task, e.value) except Exception as e: if __debug__: log.exception(__name__, e) finalize(task, e) else: if isinstance(result, Syscall): result.handle(task) elif result is None: schedule(task) else: if __debug__: log.error(__name__, "unknown syscall: %s", result) if after_step_hook: after_step_hook()
async def confirm_action( ctx: wire.GenericContext, br_type: str, title: str, action: str | None = None, description: str | None = None, description_param: str | None = None, description_param_font: int = ui.BOLD, verb: str | bytes | None = "CONFIRM", verb_cancel: str | bytes | None = None, hold: bool = False, hold_danger: bool = False, icon: str | None = None, icon_color: int | None = None, reverse: bool = False, larger_vspace: bool = False, exc: ExceptionType = wire.ActionCancelled, br_code: ButtonRequestType = ButtonRequestType.Other, ) -> None: if isinstance(verb, bytes) or isinstance(verb_cancel, bytes): raise NotImplementedError if isinstance(verb, str): verb = verb.upper() if isinstance(verb_cancel, str): verb_cancel = verb_cancel.upper() if description is not None and description_param is not None: if description_param_font != ui.BOLD: log.error(__name__, "confirm_action description_param_font not implemented") description = description.format(description_param) result = await interact( ctx, _RustLayout( trezorui2.confirm_action( title=title.upper(), action=action, description=description, verb=verb, verb_cancel=verb_cancel, hold=hold, reverse=reverse, )), br_type, br_code, ) if result is not trezorui2.CONFIRMED: raise exc
def _step(task: Task, value: Any) -> None: """ Step through the task by sending value to it. This can result in either: 1. The task raises an exception: a) StopIteration - The Task is completed and we call finalize() to finish it. b) Exception - An error occurred. We still need to call finalize(). 2. Task does not raise exception and returns either: a) Syscall - Syscall.handle() is called. b) None - The Task is simply scheduled to continue. c) Something else - This should not happen - error. """ global this_task this_task = task try: if isinstance(value, BaseException): result = task.throw(value) # type: ignore # error: Argument 1 to "throw" of "Coroutine" has incompatible type "Exception"; expected "Type[BaseException]" # rationale: In micropython, generator.throw() accepts the exception object directly. else: result = task.send(value) except StopIteration as e: if __debug__: log.debug(__name__, "finish: %s", task) finalize(task, e.value) except Exception as e: if __debug__: log.exception(__name__, e) finalize(task, e) else: if isinstance(result, Syscall): result.handle(task) elif result is None: schedule(task) else: if __debug__: log.error(__name__, "unknown syscall: %s", result) if after_step_hook: after_step_hook()
def _step_task(task, value): try: if isinstance(value, Exception): result = task.throw(value) else: result = task.send(value) except StopIteration as e: log.debug(__name__, '%s finished', task) except Exception as e: log.exception(__name__, e) else: if isinstance(result, Syscall): result.handle(task) elif result is None: schedule_task(task) else: log.error(__name__, '%s is unknown syscall', result) if after_step_hook: after_step_hook()
def _step(task: Task, value: Any) -> None: """ Step through the task by sending value to it. This can result in either: 1. The task raises an exception: a) StopIteration - The Task is completed and we call finalize() to finish it. b) Exception - An error occurred. We still need to call finalize(). 2. Task does not raise exception and returns either: a) Syscall - Syscall.handle() is called. b) None - The Task is simply scheduled to continue. c) Something else - This should not happen - error. """ global this_task this_task = task try: if isinstance(value, BaseException): result = task.throw(value) else: result = task.send(value) except StopIteration as e: if __debug__: log.debug(__name__, "finish: %s", task) finalize(task, e.value) except Exception as e: if __debug__: log.exception(__name__, e) finalize(task, e) else: if isinstance(result, Syscall): result.handle(task) elif result is None: schedule(task) else: if __debug__: log.error(__name__, "unknown syscall: %s", result) if after_step_hook: after_step_hook()
def _step(task, value): try: if isinstance(value, Exception): result = task.throw(value) else: result = task.send(value) except StopIteration: # as e: if __debug__: log.debug(__name__, "finish: %s", task) except Exception as e: if __debug__: log.exception(__name__, e) else: if isinstance(result, Syscall): result.handle(task) elif result is None: schedule(task) else: if __debug__: log.error(__name__, "unknown syscall: %s", result) if after_step_hook: after_step_hook()
def draw_simple_text(title: str, description: str = "") -> None: log.error(__name__, "draw_simple_text not implemented")