Restructure element classes yet again

This commit is contained in:
Joscha 2019-06-06 14:13:35 +00:00
parent c035817ba8
commit 75a5ae5758
3 changed files with 78 additions and 60 deletions

View file

@ -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