runner.py


Runner class

Display Footer

Runner source
class Runner:
    """Display Footer"""

    _status = "waiting"
    status = "starting"
    last_error = ""
    title = "runner"
    border = "green"

    _dirhash = ""
    time = time.time()

    def __init__(self, markata: "Markata") -> None:
        self.m = markata
        self.run()

    def run(self) -> None:
        """ """
        self.status = "running"
        self.proc = subprocess.Popen(
            ["markata", "build"],
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
        )
        self.time = time.time()

    @property
    def status_message(self) -> str:
        """"""
        num_lines = self.m.console.height - 4
        last_error = "\n".join(self.last_error.split("\n")[-num_lines:])
        if self.status == "running":
            self.title = "runner running"
            self.border = "gold1"
        elif last_error == "":
            self.title = "runner succeded"
            self.border = "green"
        else:
            self.title = "runner failed"
            self.border = "red"
        self.title = f"{self.title} [blue]({round(time.time() - self.time)}s)[/]"

        return f"runner is {self.status} {round(time.time() - self.time)}\nhash: {self.m.content_dir_hash}\n{last_error}"

    def __rich__(self) -> Panel:

        if self.proc.poll() is None:
            return Panel(
                Text(self.status_message),
                border_style=self.border,
                title=self.title,
                expand=True,
            )

        if self.status == "running":
            self.status = "waiting"
            self.last_error = self.proc.stderr.read().decode()

        if self._dirhash != self.m.content_dir_hash:
            self.run()
            self._dirhash = self.m.content_dir_hash

        return Panel(
            Text(self.status_message),
            border_style=self.border,
            title=self.title,
            expand=True,
        )

init method

None

init source
def __init__(self, markata: "Markata") -> None:
        self.m = markata
        self.run()

run method

run source
def run(self) -> None:
        """ """
        self.status = "running"
        self.proc = subprocess.Popen(
            ["markata", "build"],
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
        )
        self.time = time.time()

status_message method

status_message source
def status_message(self) -> str:
        """"""
        num_lines = self.m.console.height - 4
        last_error = "\n".join(self.last_error.split("\n")[-num_lines:])
        if self.status == "running":
            self.title = "runner running"
            self.border = "gold1"
        elif last_error == "":
            self.title = "runner succeded"
            self.border = "green"
        else:
            self.title = "runner failed"
            self.border = "red"
        self.title = f"{self.title} [blue]({round(time.time() - self.time)}s)[/]"

        return f"runner is {self.status} {round(time.time() - self.time)}\nhash: {self.m.content_dir_hash}\n{last_error}"

rich method

None

rich source
def __rich__(self) -> Panel:

        if self.proc.poll() is None:
            return Panel(
                Text(self.status_message),
                border_style=self.border,
                title=self.title,
                expand=True,
            )

        if self.status == "running":
            self.status = "waiting"
            self.last_error = self.proc.stderr.read().decode()

        if self._dirhash != self.m.content_dir_hash:
            self.run()
            self._dirhash = self.m.content_dir_hash

        return Panel(
            Text(self.status_message),
            border_style=self.border,
            title=self.title,
            expand=True,
        )