all repos — pleroma_announce @ main

small tool for posting announcements to pleroma

status.py (view raw)

  1"""classes for status objects"""
  2
  3import datetime as dt
  4
  5from poll import PleromaPoll
  6
  7class PleromaScheduledStatus:
  8    """
  9    scheduled status type
 10    """
 11    def __init__(self,
 12            s_id: str,
 13            scheduled_at: dt.datetime,
 14            params: dict,
 15            media_attachments: list):
 16        self._s_id = s_id
 17        self._scheduled_at = scheduled_at
 18        self._params = params
 19        self._media_attachments = media_attachments
 20
 21    @classmethod
 22    def from_response(cls, data: dict):
 23        """
 24        alternative constructor to create object from response of a server
 25        """
 26        try:
 27            media_attachments = data["media_attachments"]
 28        except KeyError:
 29            media_attachments = None
 30        return cls(s_id=data["id"],
 31                scheduled_at=dt.datetime.fromisoformat(data["scheduled_at"].replace("Z","")),
 32                params=PleromaScheduledStatusParams.from_response(data["params"]),
 33                media_attachments=media_attachments)
 34
 35    @property
 36    def s_id(self):
 37        """status id"""
 38        return self._s_id
 39
 40    @property
 41    def scheduled_at(self):
 42        """time to which post is scheduled"""
 43        return self._scheduled_at
 44
 45    @property
 46    def params(self):
 47        """params object"""
 48        return self.params
 49
 50    @property
 51    def media_attachments(self):
 52        """attachments"""
 53        return self.media_attachments
 54
 55    def __repr__(self):
 56        return f"PleromaScheduledStatus(s_id={self._s_id},\
 57scheduled_at={repr(self._scheduled_at)},\
 58params={repr(self._params)},\
 59media_attachments={self._media_attachments})"
 60
 61    def __str__(self):
 62        # TODO: add poll
 63        return f"[#{self._s_id}] - {self._params.text}"
 64
 65
 66
 67class PleromaScheduledStatusParams:
 68    """
 69    wrapper class for params of scheduled status
 70
 71    note: only requided attributes implemented here, because i won't ever need
 72    other things just for announcing. i don't want to implement full pleroma
 73    api and spend here another eternity.
 74    """
 75    def __init__(self,
 76            text: str,
 77            visibility: str,
 78            poll: PleromaPoll = None):
 79        self._poll = poll
 80        self._text = text
 81        self._visibility = visibility
 82
 83    @classmethod
 84    def from_response(cls, data: dict):
 85        """
 86        alternative constructor to make object from response of a server
 87        """
 88        if data["poll"] is not None:
 89            poll = PleromaPoll.from_response(data["poll"])
 90        else:
 91            poll = None
 92        return cls(text=data["text"],
 93                visibility=data["visibility"],
 94                poll=poll)
 95
 96    @property
 97    def poll(self):
 98        """poll object if any"""
 99        return self._poll
100
101    @property
102    def text(self):
103        """text of a status"""
104        return self._text
105
106    @property
107    def visibility(self):
108        """
109        visibility of a status
110        """
111        return self._visibility
112
113    def __repr__(self):
114        return f"PleromaScheduledStatusParams(text={self._text},\
115visibility={self._visibility},\
116poll={repr(self._poll)})"