Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion edupage_api/substitution.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,13 @@ def get_missing_teachers(self, date: date) -> Optional[list[EduTeacher]]:
if not missing_teachers_string:
return None

_title, missing_teachers = missing_teachers_string.split(": ")
missing_teachers_data = missing_teachers_string.split(": ", 1)
if len(missing_teachers_data) != 2:
return None

_title, missing_teachers = missing_teachers_data
if not missing_teachers:
return None

all_teachers = People(self.edupage).get_teachers()

Expand Down
131 changes: 104 additions & 27 deletions examples/get_homework.py
Original file line number Diff line number Diff line change
@@ -1,53 +1,130 @@
from datetime import datetime

from edupage_api import Edupage
from edupage_api.dbi import DbiHelper
from edupage_api.subjects import Subjects
from edupage_api.timeline import EventType

import json

edupage = Edupage()
edupage.login(
"Username (or e-mail)",
"Password",
"Subdomain of your school (SUBDOMAIN.edupage.org)",
"#EMAIL_ADDRESS#",
"#PASSWORD#",
"#SCHOOL_EDUPAGE_SUBDOMAIN#", # SUBDOMAIN.edupage.org
)

notifications = edupage.get_notifications()

homework_not_due = 0
json_data = []

#homework_not_due = 0

homework_types = {
EventType.HOMEWORK,
EventType.TESTING,
EventType.HOMEWORK_TEST,
EventType.EXAM_ASSIGNMENT,
}

exam_event_types = {
"exam",
"bexam",
"sexam",
"oexam",
"rexam",
"pexam",
}

def is_homework_notification(event):
if event.event_type in homework_types:
return True
if event.event_type == EventType.EVENT:
if isinstance(event.additional_data, dict) and event.additional_data.get("typ") in exam_event_types:
return True
return False


homework = list(filter(lambda x: x.event_type == EventType.HOMEWORK, notifications))
def get_subject_name(event):
recipient = event.recipient
if isinstance(recipient, str) and " · " in recipient:
return recipient.split(" · ", 1)[1].strip()

if isinstance(event.additional_data, dict):
subject_id = event.additional_data.get("subjectid") or event.additional_data.get("predmetid")
if subject_id:
try:
subject = Subjects(edupage).get_subject(subject_id)
except (TypeError, ValueError):
subject = None
if subject is not None:
return subject.name or subject.short
try:
return DbiHelper(edupage).fetch_subject_name(int(subject_id))
except (TypeError, ValueError):
return None

return recipient if recipient is not None else ""

homework = [x for x in notifications if is_homework_notification(x)]
#print(homework)
for hw in homework:
additional_data = hw.additional_data
additional_data = hw.additional_data if isinstance(hw.additional_data, dict) else {}

old_vals = additional_data.get("oldVals")
if additional_data.get("textReply"):
continue

due_date = None
due_date = additional_data.get("date")
hw_title = None
hw_from = f"{hw.timestamp}"

if old_vals:
try:
due_date = old_vals.get("date")
due_date = datetime.strptime(due_date, "%Y-%m-%d")
except TypeError:
pass
def format_homework_text(event):
if (
event.event_type == EventType.EVENT
and isinstance(event.additional_data, dict)
and event.additional_data.get("typ") in exam_event_types
):
event_name = event.additional_data.get("name") or event.text
if isinstance(event_name, str):
event_name = event_name.strip()
for prefix in ("Udalosť:", "Udalosť:", "Udalosť:"):
if event_name.startswith(prefix):
event_name = event_name[len(prefix) :].strip()
break
return f"Písomka: {event_name}"
if event.event_type == EventType.EXAM_ASSIGNMENT:
assignment_name = (
event.additional_data.get("name")
or event.additional_data.get("nazov")
or event.additional_data.get("title")
or event.text
)
return (assignment_name or "").replace("\n", " ")
return (event.text or "").replace("\n", " ")

hw_title = old_vals.get("title")
hw_text = hw_title or format_homework_text(hw)
text = f"{hw_text}"

text = f"Homework from {hw.timestamp}\n"

hw_text = hw_title or hw.text.replace("\n", " ")
text += f"{hw_text}"
hw_subject = get_subject_name(hw)

if due_date:
now = datetime.now()
text += f"\nDue to: {due_date} -> "
#text += f"\nDue to: {due_date}"

dt_due_date = datetime.strptime(due_date, "%Y-%m-%d")

if due_date > now:
text += "DUE"
if dt_due_date >= now:
text += ""
else:
homework_not_due += 1
text += "UNFINISHED"
#homework_not_due += 1
continue

print(text)
print("—")
# Append homework details to list
json_data.append({
"Homework from": hw_from,
"Text of HW": text,
"Subject": hw_subject,
"Due to": due_date
})

print(f"You have {homework_not_due} unfinished homework assignments.")
print(json.dumps(json_data))
12 changes: 8 additions & 4 deletions examples/lunch_simple.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,19 @@
from datetime import datetime

edupage = Edupage()
edupage.login_auto("Username (or e-mail)", "Password")
edupage.login(
"#EMAIL_ADDRESS#",
"#PASSWORD#",
"#SCHOOL_EDUPAGE_SUBDOMAIN#", # SUBDOMAIN.edupage.org
)

meals = edupage.get_meals(datetime.today().date())

lunch = meals.lunch
print(lunch.menus)

snack = meals.snack
print(snack.menus)
#snack = meals.snack
#print(snack.menus)

# i don't want a snack for today!
snack.sign_off(edupage)
# snack.sign_off(edupage)
57 changes: 46 additions & 11 deletions examples/substitution.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,55 @@
from datetime import datetime
import json
from datetime import date, timedelta

from edupage_api import Edupage

edupage = Edupage()
edupage.login_auto("Username (or e-mail)", "Password")
edupage.login(
"#EMAIL_ADDRESS#",
"#PASSWORD#",
"#SCHOOL_EDUPAGE_SUBDOMAIN#", # SUBDOMAIN.edupage.org
)

tomorrow = datetime.now()
missing_teachers = edupage.get_missing_teachers(tomorrow)

print(f"There are {len(missing_teachers)} missing tomorrow!")
substitution_date = date.today() + timedelta(days=1)

print()

print("Teachers missing:", end=" ")
for i, teacher in enumerate(missing_teachers):
if i != 0:
print(", ", end="")
def format_date(value):
return value.strftime("%Y-%m-%d") if value else None

print(f"{teacher.name}", end="")

def format_enum(value):
return value.value if value else None


def teacher_to_dict(teacher):
return {
"person_id": teacher.person_id,
"name": teacher.name,
"gender": format_enum(teacher.gender),
"in_school_since": format_date(teacher.in_school_since),
"account_type": format_enum(teacher.account_type),
"classroom_name": teacher.classroom_name,
"teacher_to": format_date(teacher.teacher_to),
}


def change_to_dict(change):
return {
"class": change.change_class,
"lesson": change.lesson_n,
"title": change.title,
"action": format_enum(change.action),
}


missing_teachers = edupage.get_missing_teachers(substitution_date) or []
timetable_changes = edupage.get_timetable_changes(substitution_date) or []

json_data = {
"date": substitution_date.strftime("%Y-%m-%d"),
"missing_teachers": [teacher_to_dict(teacher) for teacher in missing_teachers],
"timetable_changes": [change_to_dict(change) for change in timetable_changes],
}

print(json.dumps(json_data, ensure_ascii=False, indent=2))
52 changes: 23 additions & 29 deletions examples/teachers.py
Original file line number Diff line number Diff line change
@@ -1,42 +1,36 @@
import json

from edupage_api import Edupage
from edupage_api.people import EduTeacher

edupage = Edupage()
edupage.login_auto("Username (or e-mail)", "Password")
edupage.login(
"#EMAIL_ADDRESS#",
"#PASSWORD#",
"#SCHOOL_EDUPAGE_SUBDOMAIN#", # SUBDOMAIN.edupage.org
)

teachers = edupage.get_teachers()


def print_teacher_info(teacher: EduTeacher):
print(f"{teacher.name} is in your school since {teacher.in_school_since}")


oldest_teacher = None
for teacher in teachers:
if not teacher.in_school_since:
continue

if oldest_teacher is None:
oldest_teacher = teacher
continue
def format_date(value):
return value.strftime("%Y-%m-%d") if value else None

if teacher.in_school_since < oldest_teacher.in_school_since:
oldest_teacher = teacher

print("The oldest teacher (the longest time in your school):")
print_teacher_info(oldest_teacher)
def format_enum(value):
return value.value if value else None

youngest_teacher = None
for teacher in teachers:
if not teacher.in_school_since:
continue

if youngest_teacher is None:
youngest_teacher = teacher
continue
def teacher_to_dict(teacher):
return {
"person_id": teacher.person_id,
"name": teacher.name,
"gender": format_enum(teacher.gender),
"in_school_since": format_date(teacher.in_school_since),
"account_type": format_enum(teacher.account_type),
"classroom_name": teacher.classroom_name,
"teacher_to": format_date(teacher.teacher_to),
}

if teacher.in_school_since > youngest_teacher.in_school_since:
youngest_teacher = teacher

print("\n\nThe youngest teacher in your school (the shortest time in your school):")
print_teacher_info(youngest_teacher)
json_data = [teacher_to_dict(teacher) for teacher in teachers or []]
print(json.dumps(json_data, ensure_ascii=False, indent=2))
Loading