Module edupage_api.timeline
Classes
class EventType (value, names=None, *, module=None, qualname=None, type=None, start=1)-
Expand source code
class EventType(str, Enum): # Messages MESSAGE = "sprava" POLL = "anketa" NEWS = "news" # **************************************** # Exam types BIG_EXAM = "bexam" HOMEWORK = "homework" ORAL_EXAM = "oexam" PAPER = "rexam" PROJECT_EXAM = "pexam" SHORT_EXAM = "sexam" TESTING = "testing" # Exam manipulation EXAM_ASSIGNMENT = "testpridelenie" EXAM_EVALUATION = "testvysledok" HOMEWORK_STUDENT_STATE = "homeworkstudentstav" HOMEWORK_TEST = "etesthw" TEST_RESULT = "testvysledok" # **************************************** # Grades GRADE = "znamka" GRADES_DOC = "znamkydoc" # **************************************** # Events CLASS_BOOK = "other_cb" CLASS_TEACHER_EVENT = "ctevent" CLASSIFICATION_MEETING = "bmeeting" CULTURE = "culture" EVENT = "event" EXCURSION = "excursion" PARENTS_EVENING = "parentsevening" PROCESS = "process" SCHOOL_EVENT = "schoolevent" SCHOOL_TRIP = "trip" TEACHER_MEETING = "meeting" # Free days FREE_DAY = "freeday" HOLIDAY = "holiday" SHORT_HOLIDAY = "sholiday" TT_CANCEL = "ttcancel" # Lessons CLASS_TEACHER_LESSON = "ctlesson" DISTANT_LEARNING = "distant" LESSON = "lesson" PROJECT = "project" PROJECT_LESSON = "plesson" SAFETY_INSTRUCTIONING = "other_safety" TUTORING = "rlesson" # **************************************** # Timetable TIMETABLE = "timetable" # Substitution BOOKED_ROOM = "bookroom" CHANGE_ROOM = "changeroom" SUBSTITUTION = "substitution" # **************************************** # Presence ARRIVAL_TO_SCHOOL = "pipnutie" # Absence EXCUSED_LESSON = "ospravedlnenka" REPRESENTATION = "representation" STUDENT_ABSENT = "student_absent" # **************************************** # Food FOOD_CREDIT = "strava_kredit" FOOD_SERVED = "strava_vydaj" NEW_MENU = "h_stravamenu" # **************************************** # Contest CONFIRMATION = "confirmation" CONTEST = "contest" # Photo album ALBUM = "album" # Other BEE = "vcelicka" OTHER = "other" # Helper H_ATTENDANCE = "h_attendance" H_BEE = "h_vcelicka" H_CLEARCACHE = "h_clearcache" H_CLEARDBI = "h_cleardbi" H_CLEARISICDATA = "h_clearisicdata" H_CLEARPLANS = "h_clearplany" H_CONTENST = "h_contest" H_DAILYPLAN = "h_dailyplan" H_EDUSETTINGS = "h_edusettings" H_FINANCES = "h_financie" H_GRADES = "h_znamky" H_HOMEWORK = "h_homework" H_IGROUPS = "h_igroups" H_PROCESS = "h_process" H_PROCESSTYPES = "h_processtypes" H_SETTINGS = "h_settings" H_SUBSTITUTION = "h_substitution" H_TIMETABLE = "h_timetable" H_USERPHOTO = "h_userphoto" @staticmethod def parse(event_type_str: str) -> Optional[EventType]: return ModuleHelper.parse_enum( event_type_str, EventType # pyright: ignore[reportArgumentType] )An enumeration.
Ancestors
- builtins.str
- enum.Enum
Class variables
var ALBUMvar ARRIVAL_TO_SCHOOLvar BEEvar BIG_EXAMvar BOOKED_ROOMvar CHANGE_ROOMvar CLASSIFICATION_MEETINGvar CLASS_BOOKvar CLASS_TEACHER_EVENTvar CLASS_TEACHER_LESSONvar CONFIRMATIONvar CONTESTvar CULTUREvar DISTANT_LEARNINGvar EVENTvar EXAM_ASSIGNMENTvar EXAM_EVALUATIONvar EXCURSIONvar EXCUSED_LESSONvar FOOD_CREDITvar FOOD_SERVEDvar FREE_DAYvar GRADEvar GRADES_DOCvar HOLIDAYvar HOMEWORKvar HOMEWORK_STUDENT_STATEvar HOMEWORK_TESTvar H_ATTENDANCEvar H_BEEvar H_CLEARCACHEvar H_CLEARDBIvar H_CLEARISICDATAvar H_CLEARPLANSvar H_CONTENSTvar H_DAILYPLANvar H_EDUSETTINGSvar H_FINANCESvar H_GRADESvar H_HOMEWORKvar H_IGROUPSvar H_PROCESSvar H_PROCESSTYPESvar H_SETTINGSvar H_SUBSTITUTIONvar H_TIMETABLEvar H_USERPHOTOvar LESSONvar MESSAGEvar NEWSvar NEW_MENUvar ORAL_EXAMvar OTHERvar PAPERvar PARENTS_EVENINGvar POLLvar PROCESSvar PROJECTvar PROJECT_EXAMvar PROJECT_LESSONvar REPRESENTATIONvar SAFETY_INSTRUCTIONINGvar SCHOOL_EVENTvar SCHOOL_TRIPvar SHORT_EXAMvar SHORT_HOLIDAYvar STUDENT_ABSENTvar SUBSTITUTIONvar TEACHER_MEETINGvar TESTINGvar TEST_RESULTvar TIMETABLEvar TT_CANCELvar TUTORING
Static methods
def parse(event_type_str: str) ‑> EventType | None-
Expand source code
@staticmethod def parse(event_type_str: str) -> Optional[EventType]: return ModuleHelper.parse_enum( event_type_str, EventType # pyright: ignore[reportArgumentType] )
class TimelineEvent (event_id: int,
timestamp: datetime,
text: str,
author: Union[EduAccount, str],
recipient: Union[EduAccount, str],
event_type: EventType,
additional_data: dict)-
Expand source code
@dataclass class TimelineEvent: event_id: int timestamp: datetime text: str author: Union[EduAccount, str] recipient: Union[EduAccount, str] event_type: EventType additional_data: dictTimelineEvent(event_id: 'int', timestamp: 'datetime', text: 'str', author: 'Union[EduAccount, str]', recipient: 'Union[EduAccount, str]', event_type: 'EventType', additional_data: 'dict')
Instance variables
var additional_data : dictvar event_id : intvar event_type : EventTypevar recipient : EduAccount | strvar text : strvar timestamp : datetime.datetime
class TimelineEvents (edupage: EdupageModule)-
Expand source code
class TimelineEvents(Module): def __parse_items(self, timeline_items: dict) -> list[TimelineEvent]: output = [] for event in timeline_items: event_id_str = event.get("timelineid") if not event_id_str: continue event_id = int(event_id_str) event_data = json.loads(event.get("data")) event_type_str = event.get("typ") if not event_id_str: continue event_type = EventType.parse(event_type_str) event_timestamp = datetime.strptime( event.get("timestamp"), "%Y-%m-%d %H:%M:%S" ) text = event.get("text") # what about different languages? # for message event type if text.startswith("Dôležitá správa"): text = event_data.get("messageContent") if text == "": try: text = event_data.get("nazov") except: text = "" # todo: add support for "*" recipient_name = event.get("user_meno") recipient_data = DbiHelper(self.edupage).fetch_person_data_by_name( recipient_name ) if recipient_name in ["*", "Celá škola"]: recipient = "*" elif type(recipient_name) == str: recipient = recipient_name else: ModuleHelper.assert_none(recipient_data) recipient = EduAccount.parse( recipient_data, recipient_data.get("id"), self.edupage ) # todo: add support for "*" author_name = event.get("vlastnik_meno") author_data = DbiHelper(self.edupage).fetch_person_data_by_name(author_name) if author_name == "*": author = "*" elif type(author_name) == str: author = author_name else: ModuleHelper.assert_none(author_data) author = EduAccount.parse( author_data, author_data.get("id"), self.edupage ) additional_data = event.get("data") if additional_data and type(additional_data) == str: additional_data = json.loads(additional_data) event = TimelineEvent( event_id, event_timestamp, text, author, recipient, event_type, additional_data, ) output.append(event) return output @ModuleHelper.logged_in def get_notifications_history(self, date_from: date): request_url = f"https://{self.edupage.subdomain}.edupage.org/timeline/" params = [ ("module", "todo"), ("filterTab", ""), ("akcia", "getData"), ("filterTab", "messages"), ] response = self.edupage.session.post( request_url, params=params, data=RequestUtil.encode_form_data( { "datefrom": date_from.strftime("%Y-%m-%d"), } ), headers={"Content-Type": "application/x-www-form-urlencoded"}, ) if response.status_code != 200: raise RequestError( f"Edupage returned an error: status={response.status_code}" ) data = response.json() if "timelineItems" not in data: raise MissingDataException( "Unexpected response from edupage! (no events in this time period?)" ) return self.__parse_items(data["timelineItems"]) @ModuleHelper.logged_in def get_notifications(self): return self.__parse_items( self.edupage.data.get("items") # pyright: ignore[reportArgumentType] )Ancestors
Methods
def get_notifications(self)-
Expand source code
@ModuleHelper.logged_in def get_notifications(self): return self.__parse_items( self.edupage.data.get("items") # pyright: ignore[reportArgumentType] ) def get_notifications_history(self, date_from: date)-
Expand source code
@ModuleHelper.logged_in def get_notifications_history(self, date_from: date): request_url = f"https://{self.edupage.subdomain}.edupage.org/timeline/" params = [ ("module", "todo"), ("filterTab", ""), ("akcia", "getData"), ("filterTab", "messages"), ] response = self.edupage.session.post( request_url, params=params, data=RequestUtil.encode_form_data( { "datefrom": date_from.strftime("%Y-%m-%d"), } ), headers={"Content-Type": "application/x-www-form-urlencoded"}, ) if response.status_code != 200: raise RequestError( f"Edupage returned an error: status={response.status_code}" ) data = response.json() if "timelineItems" not in data: raise MissingDataException( "Unexpected response from edupage! (no events in this time period?)" ) return self.__parse_items(data["timelineItems"])