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 ALBUM
var ARRIVAL_TO_SCHOOL
var BEE
var BIG_EXAM
var BOOKED_ROOM
var CHANGE_ROOM
var CLASSIFICATION_MEETING
var CLASS_BOOK
var CLASS_TEACHER_EVENT
var CLASS_TEACHER_LESSON
var CONFIRMATION
var CONTEST
var CULTURE
var DISTANT_LEARNING
var EVENT
var EXAM_ASSIGNMENT
var EXAM_EVALUATION
var EXCURSION
var EXCUSED_LESSON
var FOOD_CREDIT
var FOOD_SERVED
var FREE_DAY
var GRADE
var GRADES_DOC
var HOLIDAY
var HOMEWORK
var HOMEWORK_STUDENT_STATE
var HOMEWORK_TEST
var H_ATTENDANCE
var H_BEE
var H_CLEARCACHE
var H_CLEARDBI
var H_CLEARISICDATA
var H_CLEARPLANS
var H_CONTENST
var H_DAILYPLAN
var H_EDUSETTINGS
var H_FINANCES
var H_GRADES
var H_HOMEWORK
var H_IGROUPS
var H_PROCESS
var H_PROCESSTYPES
var H_SETTINGS
var H_SUBSTITUTION
var H_TIMETABLE
var H_USERPHOTO
var LESSON
var MESSAGE
var NEWS
var NEW_MENU
var ORAL_EXAM
var OTHER
var PAPER
var PARENTS_EVENING
var POLL
var PROCESS
var PROJECT
var PROJECT_EXAM
var PROJECT_LESSON
var REPRESENTATION
var SAFETY_INSTRUCTIONING
var SCHOOL_EVENT
var SCHOOL_TRIP
var SHORT_EXAM
var SHORT_HOLIDAY
var STUDENT_ABSENT
var SUBSTITUTION
var TEACHER_MEETING
var TESTING
var TEST_RESULT
var TIMETABLE
var TT_CANCEL
var 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: dict

TimelineEvent(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 : dict
var authorEduAccount | str
var event_id : int
var event_typeEventType
var recipientEduAccount | str
var text : str
var 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"])