Source code for runtimepy.commands.tui
"""
An entry-point for the 'tui' command.
"""
# built-in
from argparse import ArgumentParser as _ArgumentParser
from argparse import Namespace as _Namespace
import asyncio as _asyncio
# third-party
from vcorelib.args import CommandFunction as _CommandFunction
from vcorelib.asyncio import run_handle_stop as _run_handle_stop
from runtimepy.channel.environment import (
ChannelEnvironment as _ChannelEnvironment,
)
# internal
from runtimepy.commands.common import curses_wrap_if
from runtimepy.tui.task import TuiTask as _TuiTask
__all__ = ("curses_wrap_if", "start", "tui_cmd", "add_tui_cmd")
[docs]
def start(args: _Namespace) -> int:
"""Start the user interface."""
assert args.window is not None
task = _TuiTask(
"ui",
1 / args.rate,
_ChannelEnvironment(),
max_iterations=args.iterations,
)
stop_sig = _asyncio.Event()
_run_handle_stop(
stop_sig,
task.run(
args.window,
stop_sig=stop_sig,
),
eloop=_asyncio.new_event_loop(),
enable_uvloop=not getattr(args, "no_uvloop", False),
)
return 0
[docs]
def tui_cmd(args: _Namespace) -> int:
"""Execute the tui command."""
args.curses = True
return curses_wrap_if(start, args)
[docs]
def add_tui_cmd(parser: _ArgumentParser) -> _CommandFunction:
"""Add tui-command arguments to its parser."""
parser.add_argument(
"-i",
"--iterations",
type=int,
default=0,
help=(
"maximum number of program iterations (if greater "
"than zero, default: %(default)s)"
),
)
parser.add_argument(
"-r",
"--rate",
type=float,
default=60.0,
help=(
"frequency (in Hz) to run the interface "
"(default: %(default)s Hz)"
),
)
return tui_cmd