Skip to content

Error for grades without NoteMax or other informations #339

Description

@Courteron

Pronotepy often send me this error message :

Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\pronotepy\dataClasses.py", line 220, in __call__
    json_value = json_value[p]
KeyError: 'noteMax'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:/Users/User/Downloads/testPronote.py", line 24, in <module>
    for grade in period.grades:
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\pronotepy\dataClasses.py", line 528, in grades
    return [Grade(g) for g in grades]
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\pronotepy\dataClasses.py", line 528, in <listcomp>
    return [Grade(g) for g in grades]
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\pronotepy\dataClasses.py", line 717, in __init__
    self.max: str = self._resolver(Util.grade_parse, "noteMax", "V")
  File "C:\Users\User\AppData\Local\Programs\Python\Python310\lib\site-packages\pronotepy\dataClasses.py", line 234, in __call__
    raise ParsingError(
pronotepy.exceptions.ParsingError: Could not follow path

FIX
I fixed it when I modified the dataClasses.py file, modified function init line 699 with this :

    def __init__(self, json_dict: dict) -> None:
        super().__init__(json_dict)

        self.id: str = self._resolver(str, "N")
        self.grade: str = self._resolver(Util.grade_parse, "note", "V")
        self.out_of: str = self._resolver(Util.grade_parse, "bareme", "V")
        self.default_out_of: str = self._resolver(
            Util.grade_parse, "baremeParDefaut", "V", strict=False
        )
        self.date: datetime.date = self._resolver(Util.date_parse, "date", "V")
        self.subject: Subject = self._resolver(Subject, "service", "V")
        # TODO: remove, because it creates a loop when trying to `to_dict`
        self.period: Period = self._resolver(
            lambda p: Util.get(Period.instances, id=p)[0], "periode", "V", "N"
        )
        self.average: str = self._resolver(
            Util.grade_parse, "moyenne", "V", strict=False
        )
        try : 
            self.max: str = self._resolver(Util.grade_parse, "noteMax", "V")
        except Exception as e:
            pass
        try:
            self.min: str = self._resolver(Util.grade_parse, "noteMin", "V")
        except Exception as e:
            pass
        try:
            self.coefficient: str = self._resolver(str, "coefficient")
        except Exception as e:
            pass
        try:
            self.comment: str = self._resolver(str, "commentaire")
        except Exception as e:
            pass
        try :
            self.is_bonus: bool = self._resolver(bool, "estBonus")
        except Exception as e:
            pass
        try :
            self.is_optionnal: bool = (
                self._resolver(bool, "estFacultatif") and not self.is_bonus
            )
        except Exception as e:
            pass
        try :
            self.is_out_of_20: bool = self._resolver(bool, "estRamenerSur20")
        except Exception as e:
            pass

Now it works

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions