__all__ = ["StaticDividingLine", "DynamicDividingLine"] from abc import ABC class BaseDividingLine(ABC): def __init__(self, unit_part: str = "-") -> None: """ Private. The basic dividing line :param unit_part: the single part of the dividing line :return: None """ self._unit_part: str = unit_part def get_unit_part(self) -> str: """ Private. Returns the unit part of the dividing line :return: unit_part of dividing line as str """ if len(self._unit_part) == 0: return " " else: return self._unit_part[0] class StaticDividingLine(BaseDividingLine): def __init__(self, unit_part: str = "-", *, length: int = 25) -> None: """ Public. The static dividing line :param unit_part: the single part of the dividing line :param length: the length of the dividing line :return: None """ super().__init__(unit_part) self.length: int = length def get_full_static_line(self, *, is_override: bool) -> str: """ Private. Returns the full line of the dividing line :param is_override: has the default text layout been redefined :return: full line of dividing line as str """ if is_override: return self.length * self.get_unit_part() else: return f"[dim]{self.length * self.get_unit_part()}[/dim]" class DynamicDividingLine(BaseDividingLine): def __init__(self, unit_part: str = "-") -> None: """ Public. The dynamic dividing line :param unit_part: the single part of the dividing line :return: None """ super().__init__(unit_part) def get_full_dynamic_line(self, *, length: int, is_override: bool) -> str: """ Private. Returns the full line of the dividing line :param length: the length of the dividing line :param is_override: has the default text layout been redefined :return: full line of dividing line as str """ if is_override: return length * self.get_unit_part() else: return f"[dim]{self.get_unit_part() * length}[/dim]"