33
44import json
55from dataclasses import dataclass
6- from datetime import datetime
6+ from datetime import datetime , date
77from enum import Enum
88from typing import Optional , Union
99
1010from edupage_api .dbi import DbiHelper
1111from edupage_api .module import Module , ModuleHelper
1212from edupage_api .people import EduAccount
13+ from edupage_api .utils import RequestUtil
14+ from edupage_api .exceptions import RequestError , MissingDataException
1315
1416
1517# data.dbi.event_types
@@ -136,7 +138,9 @@ class EventType(str, Enum):
136138
137139 @staticmethod
138140 def parse (event_type_str : str ) -> Optional [EventType ]:
139- return ModuleHelper .parse_enum (event_type_str , EventType )
141+ return ModuleHelper .parse_enum (
142+ event_type_str , EventType # pyright: ignore[reportArgumentType]
143+ )
140144
141145
142146@dataclass
@@ -151,12 +155,9 @@ class TimelineEvent:
151155
152156
153157class TimelineEvents (Module ):
154- @ModuleHelper .logged_in
155- def get_notifications (self ):
158+ def __parse_items (self , timeline_items : dict ) -> list [TimelineEvent ]:
156159 output = []
157160
158- timeline_items = self .edupage .data .get ("items" )
159-
160161 for event in timeline_items :
161162 event_id_str = event .get ("timelineid" )
162163 if not event_id_str :
@@ -231,4 +232,45 @@ def get_notifications(self):
231232 additional_data ,
232233 )
233234 output .append (event )
235+
234236 return output
237+
238+ @ModuleHelper .logged_in
239+ def get_notifications_history (self , date_from : date ):
240+ request_url = "https://gymbilba.edupage.org/timeline/"
241+ params = [
242+ ("module" , "todo" ),
243+ ("filterTab" , "" ),
244+ ("akcia" , "getData" ),
245+ ("filterTab" , "messages" ),
246+ ]
247+
248+ response = self .edupage .session .post (
249+ request_url ,
250+ params = params ,
251+ data = RequestUtil .encode_form_data (
252+ {
253+ "datefrom" : date_from .strftime ("%Y-%m-%d" ),
254+ }
255+ ),
256+ headers = {"Content-Type" : "application/x-www-form-urlencoded" },
257+ )
258+
259+ if response .status_code != 200 :
260+ raise RequestError (
261+ f"Edupage returned an error: status={ response .status_code } "
262+ )
263+
264+ data = response .json ()
265+ if "timelineItems" not in data :
266+ raise MissingDataException (
267+ "Unexpected response from edupage! (no events in this time period?)"
268+ )
269+
270+ return self .__parse_items (data ["timelineItems" ])
271+
272+ @ModuleHelper .logged_in
273+ def get_notifications (self ):
274+ return self .__parse_items (
275+ self .edupage .data .get ("items" ) # pyright: ignore[reportArgumentType]
276+ )
0 commit comments