EdupageAPI / edupage-api

A python library for accessing your Edupage account
https://edupageapi.github.io/edupage-api/
GNU General Public License v3.0
66 stars 13 forks source link

[Feature request] Get substitution #42

Closed oguh43 closed 2 years ago

oguh43 commented 2 years ago

Is your feature request related to a problem? Please describe. Nope, I just implemented it into my own api and would like for it to be available in your too. However, I currently have no intention of looking into how your api works internally and will thus only provide my implementation as a base. https://github.com/oguh43/gymbilba/blob/cc830ece954fcb3dbfcf4ea55d3934809620dfa6/gymbilba.py#L102-L129 Calling get_substitution returns a json, namely in this format:

{
    "meta": {
        "missing_teachers": [
            "Miriam Alak\u0161ov\u00e1",
            "Petra Klimov\u00e1",
            "Janka Kore\u0148ov\u00e1 (0 - 2)",
            "Katar\u00edna Lazar\u010d\u00edkov\u00e1",
            "M\u00e1ria Ondru\u0161kov\u00e1",
            "Bronislava \u0160turcelov\u00e1",
            "Margar\u00e9ta Zajacov\u00e1"
        ],
        "missing_classes": [
            "III.AB (8)",
            "IV.NA (8)",
            "kvinta B (8)"
        ]
    },
    "pr\u00edma A": {
        "3": "Diev\u010dat\u00e1: Telesn\u00e1 v\u00fdchova - Suplovanie: (Petra Klimov\u00e1) \u2794 Peter Hofmeister"
    },
    "pr\u00edma B": {
        "4": "Diev\u010dat\u00e1: Telesn\u00e1 v\u00fdchova - Suplovanie: (Petra Klimov\u00e1) \u2794 Tom\u00e1\u0161 Ku\u0165ka"
    },
    "II.AB": {
        "7": "Diev\u010dat\u00e1: Telesn\u00e1 v\u00fdchova - Petra Klimov\u00e1, Odpadlo"
    },
    "II.C": {
        "6": "(Ob\u010dianska n\u00e1uka) \u2794 Slovensk\u00fd jazyk a literat\u00fara - Suplovanie: (Margar\u00e9ta Zajacov\u00e1) \u2794 Be\u00e1ta K\u00f3\u0148ov\u00e1"
    },
    "III.AA": {
        "1": "Matematika - M\u00e1ria Ondru\u0161kov\u00e1, Odpadlo"
    },
    "III.AB": {
        "6": "Matematika - M\u00e1ria Ondru\u0161kov\u00e1, Odpadlo",
        "8": ""
    },
    "III.C": {
        "3": "(Slovensk\u00fd jazyk a literat\u00fara) \u2794 Ob\u010dianska n\u00e1uka - Suplovanie: (Bronislava \u0160turcelov\u00e1) \u2794 Bronislava Sele\u0161iov\u00e1"
    },
    "IV.AA": {
        "5": "Dejepis - Margar\u00e9ta Zajacov\u00e1, Odpadlo"
    },
    "IV.C": {
        "2 - 3": "DEJ1: Semin\u00e1r z dejepisu - Margar\u00e9ta Zajacov\u00e1, Odpadlo",
        "6": "dej2: Semin\u00e1r z dejepisu - Suplovanie: (Miriam Alak\u0161ov\u00e1) \u2794 Miroslav Neumann",
        "7": "dej2: Semin\u00e1r z dejepisu - Miriam Alak\u0161ov\u00e1, Odpadlo"
    },
    "IV.NA": {
        "2": "(Slovensk\u00fd jazyk a literat\u00fara) \u2794 Fyzika - Suplovanie: (Bronislava \u0160turcelov\u00e1) \u2794 Jana Manczalov\u00e1",
        "8": ""
    },
    "IV.NB": {
        "1": "Matematika - Katar\u00edna Lazar\u010d\u00edkov\u00e1, Odpadlo"
    },
    "kvarta A": {
        "1": "Diev\u010dat\u00e1: Telesn\u00e1 v\u00fdchova - Suplovanie: (Petra Klimov\u00e1) \u2794 \u013dubica \u0158ezn\u00ed\u010dkov\u00e1",
        "2": "2. Skupina: Anglick\u00fd jazyk - Suplovanie: (M\u00e1ria Ondru\u0161kov\u00e1) \u2794 Milica Nov\u00e1kov\u00e1, Zameni\u0165 u\u010deb\u0148u: (A 104 U) \u2794 D 102 U",
        "4": "Matematika - Suplovanie: (M\u00e1ria Ondru\u0161kov\u00e1) \u2794 Du\u0161an Varju"
    },
    "kvarta B": {
        "7": "1. Skupina: Anglick\u00fd jazyk - M\u00e1ria Ondru\u0161kov\u00e1, Odpadlo"
    },
    "kvinta A": {
        "4": "Dejepis - Suplovanie: (Miriam Alak\u0161ov\u00e1) \u2794 Viktor F\u00fcrsten",
        "8": "etv: Etick\u00e1 v\u00fdchova - U\u010dite\u013e: Silvia Harrison, (Bez triedy kvinta B)"
    },
    "kvinta B": {
        "4": "(Slovensk\u00fd jazyk a literat\u00fara) \u2794 Nemeck\u00fd jazyk - Suplovanie: (Bronislava \u0160turcelov\u00e1) \u2794 Ida \u0160p\u00e1nyiov\u00e1",
        "5": "Dejepis - Suplovanie: (Miriam Alak\u0161ov\u00e1) \u2794 Pavl\u00edna Habov\u00e1",
        "8": ""
    },
    "V.AA": {
        "2 - 3": "DEJ1: Semin\u00e1r z dejepisu - Margar\u00e9ta Zajacov\u00e1, Odpadlo",
        "6": "dej2: Semin\u00e1r z dejepisu - Suplovanie: (Miriam Alak\u0161ov\u00e1) \u2794 Miroslav Neumann",
        "7": "dej2: Semin\u00e1r z dejepisu - Miriam Alak\u0161ov\u00e1, Odpadlo"
    },
    "V.AB": {
        "6": "dej2: Semin\u00e1r z dejepisu - Suplovanie: (Miriam Alak\u0161ov\u00e1) \u2794 Miroslav Neumann",
        "7": "dej2: Semin\u00e1r z dejepisu - Miriam Alak\u0161ov\u00e1, Odpadlo"
    },
    "V.NA": {
        "2 - 3": "M3: Semin\u00e1r z matematiky - Katar\u00edna Lazar\u010d\u00edkov\u00e1, Odpadlo",
        "6": "dej2: Semin\u00e1r z dejepisu - Suplovanie: (Miriam Alak\u0161ov\u00e1) \u2794 Miroslav Neumann",
        "7": "dej2: Semin\u00e1r z dejepisu - Miriam Alak\u0161ov\u00e1, Odpadlo"
    },
    "V.NB": {
        "2 - 3": "M3: Semin\u00e1r z matematiky - Katar\u00edna Lazar\u010d\u00edkov\u00e1, Odpadlo",
        "6": "dej2: Semin\u00e1r z dejepisu - Suplovanie: (Miriam Alak\u0161ov\u00e1) \u2794 Miroslav Neumann",
        "7": "dej2: Semin\u00e1r z dejepisu - Miriam Alak\u0161ov\u00e1, Odpadlo"
    },
    "sexta A": {
        "1": "Dejepis - Margar\u00e9ta Zajacov\u00e1, Odpadlo",
        "2": "1sk: Nemeck\u00fd jazyk - Janka Kore\u0148ov\u00e1, Odpadlo",
        "7": "Ob\u010dianska n\u00e1uka - Margar\u00e9ta Zajacov\u00e1, Odpadlo"
    },
    "septima B": {
        "1": "Slovensk\u00fd jazyk a literat\u00fara - Bronislava \u0160turcelov\u00e1, Odpadlo",
        "2": "Diev\u010dat\u00e1: Telesn\u00e1 v\u00fdchova - Suplovanie: (Petra Klimov\u00e1) \u2794 Martin S\u00e1ri"
    },
    "okt\u00e1va A": {
        "2 - 3": "DEJ1: Semin\u00e1r z dejepisu - Margar\u00e9ta Zajacov\u00e1, Odpadlo"
    },
    "okt\u00e1va B": {
        "2 - 3": "DEJ1: Semin\u00e1r z dejepisu - Margar\u00e9ta Zajacov\u00e1, Odpadlo"
    }
}

If you have any idea, how to get rid of those pesky unicode escape sequences, I'm all ears. Also there are no language dependant strings used in my code, only regex + soup. (Idk if you want another dependency)

ivanhrabcak commented 2 years ago

The substitution render is customizable, so there is no guarantee that it will work, as it could look different on each school (it may break). I can still add it though.

ivanhrabcak commented 2 years ago

For now, I've added a simple (b0d722b)

def get_missing_teachers(self, date: date) -> list[EduTeacher]

I'll add more tomorrow, or later this week.

ivanhrabcak commented 2 years ago

I've added

def get_timetable_changes(self, date: date) -> list[TimetableChange]

in a8487bb. Can you give me some feedback or close this issue?

Types for context:

class Action(enum.Enum):
    DELETION = enum.auto()
    CHANGE = enum.auto()
    ADDITION = enum.auto()

class TimetableChange:
    def __init__(self, change_class: str, lesson_n: int, action: Union[Action, tuple[int, int]]):
        self.change_class = change_class
        self.lesson_n = lesson_n
        self.action = action
oguh43 commented 2 years ago

Very cool

ivanhrabcak commented 2 years ago

Added in 0.9.95