Skip to content

runner

dev_tool.services.development.runner

log = logging.getLogger(__name__) module-attribute

DevelopmentRunner

A class for running the development environment.

This class orchestrates multiple development processes such as Django server and Bun watcher.

The constructor for the DevelopmentRunner class.

Source code in dev_tool/services/development/runner.py
def __init__(self) -> None:
    """The constructor for the DevelopmentRunner class."""

    self.runners: list[BunWatcherRunner | DjangoServerRunner] = []
    self.stop_event = threading.Event()

runners = [] instance-attribute

stop_event = threading.Event() instance-attribute

add_runner

A method that adds a runner to the development environment.

Parameters:

Source code in dev_tool/services/development/runner.py
def add_runner(self, runner: BunWatcherRunner | DjangoServerRunner) -> None:
    """
    A method that adds a runner to the development environment.

    :param runner: The runner to add.
    """

    self.runners.append(runner)

run

A method that starts all runners and waits for interruption.

Source code in dev_tool/services/development/runner.py
def run(self) -> None:
    """A method that starts all runners and waits for interruption."""

    for runner in self.runners:
        runner.run()

    handler = signal.getsignal(signal.SIGINT)

    try:
        signal.signal(signal.SIGINT, self._signal_handler)
        signal_registered = True
    except ValueError:
        signal_registered = False

    try:
        while not self.stop_event.is_set():
            self.stop_event.wait(timeout=0.1)
    except KeyboardInterrupt:
        self.stop_event.set()
    finally:
        self.stop()

        if signal_registered:
            signal.signal(signal.SIGINT, handler)

stop

A method that stops all runners.

Source code in dev_tool/services/development/runner.py
def stop(self) -> None:
    """A method that stops all runners."""

    for runner in reversed(self.runners):
        runner.stop()