from shiny import App, reactive, render, ui, module from shiny.session import Session class Console: def __init__(self, selector: str, session: Session): self._selector = selector self._session = session def write(self, s: str): ui.insert_ui( s, f"{self._selector} > .out", "beforeEnd", immediate=True, session=self._session, ) def clear(self): ui.remove_ui( f"{self._selector} > .out", immediate=True, session=self._session, ) ui.insert_ui( ui.pre(class_="out"), self._selector, "beforeEnd", immediate=True, session=self._session, ) def flush(self): pass @module.ui def console_ui(): return ui.div( ui.pre(class_="out"), id=module.resolve_id("console"), ) @module.server def console_server(input, output, session): return Console(f"#{session.ns('console')}", session)