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)})"