Module textual.drivers.headless_driver

Expand source code
from __future__ import annotations

import asyncio
from ..driver import Driver
from ..geometry import Size
from .. import events


class HeadlessDriver(Driver):
    """A do-nothing driver for testing."""

    def _get_terminal_size(self) -> tuple[int, int]:
        width: int | None = 80
        height: int | None = 25
        import shutil

        try:
            width, height = shutil.get_terminal_size()
        except (AttributeError, ValueError, OSError):
            try:
                width, height = shutil.get_terminal_size()
            except (AttributeError, ValueError, OSError):
                pass
        width = width or 80
        height = height or 25
        return width, height

    def start_application_mode(self) -> None:
        loop = asyncio.get_running_loop()

        def send_size_event():
            terminal_size = self._get_terminal_size()
            width, height = terminal_size
            textual_size = Size(width, height)
            event = events.Resize(self._target, textual_size, textual_size)
            asyncio.run_coroutine_threadsafe(
                self._target.post_message(event),
                loop=loop,
            )

        send_size_event()

    def disable_input(self) -> None:
        pass

    def stop_application_mode(self) -> None:
        pass

Classes

class HeadlessDriver (console: "'Console'", target: "'MessageTarget'", debug: bool = False)

A do-nothing driver for testing.

Expand source code
class HeadlessDriver(Driver):
    """A do-nothing driver for testing."""

    def _get_terminal_size(self) -> tuple[int, int]:
        width: int | None = 80
        height: int | None = 25
        import shutil

        try:
            width, height = shutil.get_terminal_size()
        except (AttributeError, ValueError, OSError):
            try:
                width, height = shutil.get_terminal_size()
            except (AttributeError, ValueError, OSError):
                pass
        width = width or 80
        height = height or 25
        return width, height

    def start_application_mode(self) -> None:
        loop = asyncio.get_running_loop()

        def send_size_event():
            terminal_size = self._get_terminal_size()
            width, height = terminal_size
            textual_size = Size(width, height)
            event = events.Resize(self._target, textual_size, textual_size)
            asyncio.run_coroutine_threadsafe(
                self._target.post_message(event),
                loop=loop,
            )

        send_size_event()

    def disable_input(self) -> None:
        pass

    def stop_application_mode(self) -> None:
        pass

Ancestors

Methods

def disable_input(self) ‑> None
Expand source code
def disable_input(self) -> None:
    pass
def start_application_mode(self) ‑> None
Expand source code
def start_application_mode(self) -> None:
    loop = asyncio.get_running_loop()

    def send_size_event():
        terminal_size = self._get_terminal_size()
        width, height = terminal_size
        textual_size = Size(width, height)
        event = events.Resize(self._target, textual_size, textual_size)
        asyncio.run_coroutine_threadsafe(
            self._target.post_message(event),
            loop=loop,
        )

    send_size_event()
def stop_application_mode(self) ‑> None
Expand source code
def stop_application_mode(self) -> None:
    pass

Inherited members