from typing import Callable, Any from database import DataBaseWorker # generic token class Token(): def __init__(self, type: str) -> None: self.type = type class TextToken(Token): def __init__(self, text: str) -> None: super().__init__('text') self.text = text # token that represents a link to a website. e.g. [link](https://google.com/) class LinkToken(Token): def __init__(self, href: str, label: str) -> None: super().__init__('link') self.href = href self.label = label # token that represents a hashtag. e.g. #SocialMedia class TagToken(Token): def __init__(self, tag: str) -> None: super().__init__('tag') self.tag = tag # token that represents a mention of a user. class MentionToken(Token): def __init__(self, username: str, uri: str) -> None: super().__init__('mention') self.username = username self.uri = uri class MediaMeta(): def __init__(self, width: int, height: int, duration: float) -> None: self.width = width self.height = height self.duration = duration def get_width(self) -> int: return self.width def get_height(self) -> int: return self.height def get_duration(self) -> float: return self.duration class MediaAttachment(): def __init__(self) -> None: self.bytes: bytes | None = None # filled-in later pass def create_meta(self, bytes: bytes) -> MediaMeta: return MediaMeta(-1, -1, -1) def get_url(self) -> str: return '' def get_type(self) -> str | None: return None def get_alt(self) -> str: return '' class Post(): def __init__(self) -> None: pass def get_tokens(self) -> list[Token]: return [] def get_parent_id(self) -> str | None: return None def get_attachments(self) -> list[MediaAttachment]: return [] def get_id(self) -> str: return '' def get_cw(self) -> str: return '' def get_languages(self) -> list[str]: return [] def is_sensitive(self) -> bool: return False # generic input service. # user and service for db queries class Input(): def __init__(self, service: str, user_id: str, settings: dict, db: DataBaseWorker) -> None: self.service = service self.user_id = user_id self.settings = settings self.db = db async def listen(self, handler: Callable[[Post], Any]): pass class Output(): def __init__(self, input: Input, settings: dict, db: DataBaseWorker) -> None: self.input = input self.settings = settings self.db = db def accept_post(self, post: Post): pass def delete_post(self, identifier: str): pass