diff --git a/edupage_api/__init__.py b/edupage_api/__init__.py index d449afa..a08778a 100644 --- a/edupage_api/__init__.py +++ b/edupage_api/__init__.py @@ -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 @@ -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 @@ -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. diff --git a/edupage_api/grades.py b/edupage_api/grades.py index f2b87d3..60a2e1c 100644 --- a/edupage_api/grades.py +++ b/edupage_api/grades.py @@ -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" @@ -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 = (