Restructure element classes yet again
This commit is contained in:
parent
c035817ba8
commit
75a5ae5758
3 changed files with 78 additions and 60 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue