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
20 changes: 19 additions & 1 deletion edupage_api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from edupage_api.classrooms import Classroom, Classrooms
from edupage_api.cloud import Cloud, EduCloudFile
from edupage_api.custom_request import CustomRequest
from edupage_api.grades import EduGrade, Grades, Term
from edupage_api.grades import EduGrade, EduTextGrade, Grades, Term
from edupage_api.login import Login, TwoFactorLogin
from edupage_api.lunches import Lunches, Meals
from edupage_api.messages import Messages
Expand Down Expand Up @@ -204,6 +204,15 @@ def get_grades(self) -> list[EduGrade]:
"""

return Grades(self).get_grades(year=None, term=None)

def get_text_grades(self) -> list[EduTextGrade]:
"""Get a list of all text grades (commendations).

Returns:
list[EduTextGrade]: List of `EduTextGrade`s
"""

return Grades(self).get_text_grades(year=None, term=None)

def get_grades_for_term(self, year: int, term: Term) -> list[EduGrade]:
"""Get a list of all available grades for a given year and term
Expand All @@ -213,6 +222,15 @@ def get_grades_for_term(self, year: int, term: Term) -> list[EduGrade]:
"""

return Grades(self).get_grades(year=year, term=term)

def get_text_grades_for_term(self, year: int, term: Term) -> list[EduTextGrade]:
"""Get a list of all available text grades (commendations) for a given year and term

Returns:
list[EduTextGrade]: List of `EduTextGrade`s
"""

return Grades(self).get_text_grades(year=year, term=term)

def get_user_id(self) -> str:
"""Get your EduPage user ID.
Expand Down
49 changes: 49 additions & 0 deletions edupage_api/grades.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@ class EduGrade:
verbal: bool
percent: float

@dataclass
class EduTextGrade:
grade_id: int
comment: Optional[str]
grade_type: int
date: datetime
subject_id: int
subject_name: Optional[str]


class Term(Enum):
FIRST = "P1"
Expand Down Expand Up @@ -57,6 +66,46 @@ def __get_grade_data_for_term(self, term: Term, year: int):
except (json.JSONDecodeError, IndexError):
raise FailedToParseGradeDataError("Failed to parse JSON")

@ModuleHelper.logged_in
def get_text_grades(self, term: Optional[Term], year: Optional[int]) -> list[EduTextGrade]:
grade_data = (
self.__get_grade_data_for_term(term, year)
if term and year
else self.__get_grade_data()
)

text_grades = grade_data.get("vsetkyVcelicky")

grades = []
for grade in text_grades:
grade_id = grade.get("VcelickaID")
comment = grade.get("p_text")
grade_type = grade.get("p_typ")

date_str = grade.get("datum")
date = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S") \
if date_str is not None else None

subject_id_str = grade.get("PredmetID")
if subject_id_str is None or subject_id_str == "vsetky":
continue

subject_id = int(subject_id_str)
subject_name = DbiHelper(self.edupage).fetch_subject_name(subject_id)

grades.append(
EduTextGrade(
grade_id,
comment,
grade_type,
date,
subject_id,
subject_name
)
)

return grades

@ModuleHelper.logged_in
def get_grades(self, term: Optional[Term], year: Optional[int]) -> list[EduGrade]:
grade_data = (
Expand Down