From 75a5ae5758fede698fb2c340e5f7f0935c9afcb9 Mon Sep 17 00:00:00 2001 From: Joscha Date: Thu, 6 Jun 2019 14:13:35 +0000 Subject: [PATCH] Restructure element classes yet again --- cheuph/element.py | 88 +++++++++++++++++++++++++++++---- cheuph/element_renderer.py | 18 ------- cheuph/element_tree_renderer.py | 32 ------------ 3 files changed, 78 insertions(+), 60 deletions(-) delete mode 100644 cheuph/element_renderer.py delete mode 100644 cheuph/element_tree_renderer.py diff --git a/cheuph/element.py b/cheuph/element.py index f192a9a..973133c 100644 --- a/cheuph/element.py +++ b/cheuph/element.py @@ -1,17 +1,85 @@ -from dataclasses import dataclass -from typing import Hashable, Optional +import datetime +from typing import Hashable, List, Optional -__all__ = ["Id", "Element", "RenderedElement"] +from .markup import AttributedText + +__all__ = ["Id", "Element", "RenderedElement", "Message", "RenderedMessage"] Id = Hashable -@dataclass class Element: - id: Id - parent_id: Optional[Id] -@dataclass + def __init__(self, + id: Id, + parent_id: Optional[Id], + ) -> None: + + self._id = id + self._parent_id = parent_id + + @property + def id(self) -> Id: + return self._id + + @property + def parent_id(self) -> Optional[Id]: + return self._parent_id + class RenderedElement: - id: Id - meta: AttributedText - lines: List[AttributedText] + def __init__(self, + id: Id, + lines: List[AttributedText], + ) -> None: + + self._id = id + self._lines = lines + + @property + def id(self) -> Id: + return self._id + + @property + def lines(self) -> List[AttributedText]: + return self._lines + +class Message(Element): + + def __init__(self, + id: Id, + parent_id: Optional[Id], + timestamp: datetime.datetime, + nick: str, + content: str, + ) -> None: + + super().__init__(id, parent_id) + self._timestamp = timestamp + self._nick = nick + self._content = content + + @property + def timestamp(self) -> datetime.datetime: + return self._timestamp + + @property + def nick(self) -> str: + return self._nick + + @property + def content(self) -> str: + return self._content + +class RenderedMessage(RenderedElement): + + def __init__(self, + id: Id, + lines: List[AttributedText], + meta: AttributedText, + ) -> None: + + super().__init__(id, lines) + self._meta = meta + + @property + def meta(self) -> AttributedText: + return self._meta diff --git a/cheuph/element_renderer.py b/cheuph/element_renderer.py deleted file mode 100644 index 0af5616..0000000 --- a/cheuph/element_renderer.py +++ /dev/null @@ -1,18 +0,0 @@ -from abc import ABC, abstractmethod -from typing import Generic, List, TypeVar - -from .element import Element, RenderedElement, MetaRenderedElement -from .markup import AttributedText - -__all__ = ["ElementRenderer"] - -E = TypeVar("E", bound=Element) - -class ElementRenderer(ABC, Generic[E]): - """ - Knows how to render elements. - """ - - @abstractmethod - def render(self, element: E, width: int) -> RenderedElement: - pass diff --git a/cheuph/element_tree_renderer.py b/cheuph/element_tree_renderer.py deleted file mode 100644 index 6209a0a..0000000 --- a/cheuph/element_tree_renderer.py +++ /dev/null @@ -1,32 +0,0 @@ -from abc import ABC, abstractmethod -from dataclasses import dataclass -from typing import Generic, TypeVar - -from .attributed_lines import AttributedLines -from .element import Element, Id -from .element_renderer import ElementRenderer -from .element_supply import ElementSupply - -__all__ = ["ElementTreeRenderer", "CursorTreeRenderer"] - -E = TypeVar("E", bound=Element) - -class ElementTreeRenderer(ABC, Generic[E]): - def __init__(self, - supply: ElementSupply[E], - renderer: ElementRenderer[E], - ) -> None: - self.supply = supply - self.renderer = renderer - - self.lines = AttributedLines() - - @abstractmethod - def rerender(self) -> None: - pass - -class CursorTreeRenderer(ElementTreeRenderer[E]): - pass # TODO - -#class HighlightTreeRenderer(ElementTreeRenderer[E]): -# pass