class Lesson(Serializable): """A lesson. :var int ~.id: lesson's ID :var `~vulcan.hebe.model.DateTime` ~.date: lesson's date :var `~vulcan.hebe.model.TimeSlot` ~.time: lesson's time :var `~vulcan.hebe.data.LessonRoom` ~.room: classroom, in which is the lesson :var `~vulcan.hebe.model.Teacher` ~.teacher: teacher of the lesson :var `~vulcan.hebe.model.Teacher` ~.second_teacher: second teacher of the lesson :var `~vulcan.hebe.model.Subject` ~.subject: subject on the lesson :var str ~.event: an event happening during this lesson :var str ~.changes: lesson changes :var `~vulcan.hebe.model.TeamClass` ~.team_class: the class that has the lesson :var str ~.pupil_alias: pupil alias :var `~vulcan.hebe.model.TeamVirtual` ~.group: group, that has the lesson :var bool ~.visible: lesson visibility (whether the timetable applies to the given student) """ id: int = IntegerField(key="Id", required=False) date: DateTime = ChildField(DateTime, key="Date", required=False) time: TimeSlot = ChildField(TimeSlot, key="TimeSlot", required=False) room: LessonRoom = ChildField(LessonRoom, key="Room", required=False) teacher: Teacher = ChildField(Teacher, key="TeacherPrimary", required=False) second_teacher: Teacher = ChildField( Teacher, key="TeacherSecondary", required=False ) subject: Subject = ChildField(Subject, key="Subject", required=False) event: str = StringField(key="Event", required=False) changes: str = StringField(key="Change", required=False) team_class: TeamClass = ChildField(TeamClass, key="Clazz", required=False) pupil_alias: str = StringField(key="PupilAlias", required=False) group: TeamVirtual = ChildField(TeamVirtual, key="Distribution", required=False) visible = BooleanField(key="Visible", required=False) @classmethod async def get( cls, api, last_sync, deleted, date_from, date_to, **kwargs ) -> Union[AsyncIterator["Lesson"], List[int]]: """ :rtype: Union[AsyncIterator[:class:`~vulcan.hebe.data.Lesson`], List[int]] """ if date_from == None: date_from = datetime.date.today() if date_to == None: date_to = date_from date_to = date_to + datetime.timedelta( days=1 ) # Vulcan requires the date_to to be one greater the date it is supposed to be data = await api.helper.get_list( DATA_TIMETABLE, FilterType.BY_PUPIL, deleted=deleted, date_from=date_from, date_to=date_to, last_sync=last_sync, **kwargs ) for lesson in data: yield Lesson.load(lesson)
class Period(Serializable): """A school year period. :var int ~.id: the period ID :var int ~.level: a grade/level number :var int ~.number: number of the period in the school year :var bool ~.current: whether the period is currently ongoing :var bool ~.last: whether the period is last in the school year :var `~vulcan.model.DateTime` ~.start: the period start datetime :var `~vulcan.model.DateTime` ~.end: the period end datetime """ id: int = IntegerField(key="Id") level: int = IntegerField(key="Level") number: int = IntegerField(key="Number") current: bool = BooleanField(key="Current") last: bool = BooleanField(key="Last") start: DateTime = ChildField(DateTime, key="Start") end: DateTime = ChildField(DateTime, key="End")
class LessonChanges(Serializable): """Lesson changes :var int ~.id: lesson change ID :var int ~.type: lesson change type :var bool ~.code: team separation """ id: int = IntegerField(key="Id") type: int = IntegerField(key="Type") separation: bool = BooleanField(key="Separation")
class PresenceType(Serializable): """Presence type :var int ~.id: attendance ID :var str ~.name: attendance name :var str ~.symbol: attendance symbol :var int ~.category_id: attendance category ID :var str ~.category_name: attendance category name :var int ~.position: attendance position :var bool ~.presence: presence on lesson :var bool ~.absence: absence on lesson :var bool ~.exemption: exemption from lesson :var bool ~.late: is late for lesson :var bool ~.justified: justified absence :var bool ~.deleted: whether the entry is deleted """ id = IntegerField(key="Id") name: str = StringField(key="Name") symbol: str = StringField(key="Symbol") category_id: int = IntegerField(key="CategoryId") category_name: str = StringField(key="CategoryName") position: int = IntegerField(key="Position") presence: bool = BooleanField(key="Presence") absence: bool = BooleanField(key="Absence") exemption: bool = BooleanField(key="LegalAbsence") late: bool = BooleanField(key="Late") justified: bool = BooleanField(key="AbsenceJustified") deleted: bool = BooleanField(key="Removed")
class Homework(Serializable): """A homework. :var int ~.id: homework's external ID :var str ~.key: homework's key (UUID) :var int ~.homework_id: homework's internal ID :var str ~.content: homework's content :var `~vulcan.hebe.model.DateTime` ~.date_created: homework's creation date :var `~vulcan.hebe.model.Teacher` ~.creator: the teacher who added the homework :var `~vulcan.hebe.model.Subject` ~.subject: the homework's subject :var List[Attachment] ~.attachments: attachments added to homework :var bool ~.is_answer_required: Is an answer required :var `~vulcan.hebe.model.DateTime` ~.deadline: homework's date and time :var `~vulcan.hebe.model.DateTime` ~.answer_deadline: homework's answer deadline :var `~vulcan.hebe.model.DateTime` ~.answer_date: homework's answer date and time """ id: int = IntegerField(key="Id") key: str = StringField(key="Key") homework_id: int = StringField(key="IdHomework") content: str = StringField(key="Content") date_created: DateTime = ChildField(DateTime, key="DateCreated") creator: Teacher = ChildField(Teacher, key="Creator") subject: Subject = ChildField(Subject, key="Subject") attachments: List[Attachment] = SequenceField(Attachment, key="Attachments", repr=True) is_answer_required: Subject = BooleanField(key="IsAnswerRequired") deadline: DateTime = ChildField(DateTime, key="Deadline") answer_deadline: DateTime = ChildField(DateTime, key="AnswerDeadline", required=False) answer_date: DateTime = ChildField(DateTime, key="AnswerDate", required=False) @classmethod async def get(cls, api, last_sync, deleted, **kwargs) -> Union[AsyncIterator["Homework"], List[int]]: """ :rtype: Union[AsyncIterator[:class:`~vulcan.hebe.data.Homework`], List[int]] """ data = await api.helper.get_list(DATA_HOMEWORK, FilterType.BY_PUPIL, deleted=deleted, last_sync=last_sync, **kwargs) for homework in data: yield Homework.load(homework)
class AttendanceCategory: """Attendance category :var int ~.id: Attendance ID :var str ~.name: Attendance name :var bool ~.presence: Presence on lesson :var bool ~.absence: Absence on lesson :var bool ~.exemption: Exemption from lesson :var bool ~.late: Is late for lesson :var bool ~.justified: Justified absence :var bool ~.deleted: Whether the entry is deleted """ id = IntegerField(key="Id") name = StringField(key="Nazwa") presence = BooleanField(key="Obecnosc") absence = BooleanField(key="Nieobecnosc") exemption = BooleanField(key="Zwolnienie") late = BooleanField(key="Spoznienie") justified = BooleanField(key="Usprawiedliwione") deleted = BooleanField(key="Usuniete")
class Attendance(Serializable): """Attendance. :var int ~.lesson_id: lesson ID :var int ~.id: attendance ID :var int ~.lesson_number: lesson number :var str ~.global_key: attendance global key :var int ~.lesson_class_id: lesson class ID :var str ~.global_key: lesson class global key :var bool ~.calculate_presence: does it count for absences :var bool ~.replacement: os it replaced :var `~vulcan.hebe.model.Subject` ~.subject: subject of the lesson :var str ~.topic: topic of the lesson :var `~vulcan.hebe.model.Teacher` ~.teacher: teacher of the lesson :var `~vulcan.hebe.model.Teacher` ~.second_teacher: second teacher of the lesson :var `~vulcan.hebe.model.Teacher` ~.main_teacher: pupil main teacher :var `~vulcan.hebe.model.TeamClass` ~.team_class: the class that had lesson :var str ~.class_alias: class short name :var `~vulcan.hebe.model.DateTime` ~.date: lesson's date :var `~vulcan.hebe.model.TimeSlot` ~.time: lesson's time :var `~vulcan.hebe.model.DateTime` ~.date_modified: attendance modification date, if not modified it is created date :var int ~.id: aux presence ID :var str ~.justification_status: attendance justification status :var `~vulcan.hebe.data.PresenceType` ~.presence_type: presence type :var str ~.note: attendance note :var str ~.public_resources: attendance public resources :var str ~.remote_resources: attendance remote resources :var `~vulcan.hebe.model.TeamVirtual` ~.group: group, that has the lesson :var bool ~.visible: attendance visibility """ lesson_id: int = IntegerField(key="LessonId") id: int = IntegerField(key="Id") lesson_number: int = IntegerField(key="LessonNumber") global_key: str = StringField(key="GlobalKey") lesson_class_id: int = IntegerField(key="LessonClassId") lesson_class_global_key: str = StringField(key="LessonClassGlobalKey") calculate_presence: bool = BooleanField(key="CalculatePresence") replacement: bool = BooleanField(key="Replacement") subject: Subject = ChildField(Subject, key="Subject", required=False) topic: str = StringField(key="Topic", required=False) teacher: Teacher = ChildField(Teacher, key="TeacherPrimary", required=False) second_teacher: Teacher = ChildField(Teacher, key="TeacherSecondary", required=False) main_teacher: Teacher = ChildField(Teacher, key="TeacherMod", required=False) team_class: TeamClass = ChildField(TeamClass, key="Clazz", required=False) class_alias: str = StringField(key="GroupDefinition", required=False) date: DateTime = ChildField(DateTime, key="Day", required=False) time: TimeSlot = ChildField(TimeSlot, key="TimeSlot", required=False) date_modified: DateTime = ChildField(DateTime, key="DateModify", required=False) aux_presence_id: int = IntegerField(key="AuxPresenceId", required=False) justification_status: str = StringField(key="JustificationStatus", required=False) presence_type: PresenceType = ChildField(PresenceType, key="PresenceType", required=False) note: str = StringField(key="Note", required=False) public_resources: str = StringField(key="PublicResources", required=False) remote_resources: str = StringField(key="RemoteResources", required=False) group: TeamVirtual = ChildField(TeamVirtual, key="Distribution", required=False) visible = BooleanField(key="Visible", required=False) @classmethod async def get(cls, api, last_sync, deleted, date_from, date_to, **kwargs) -> Union[AsyncIterator["Attendance"], List[int]]: """ :rtype: Union[AsyncIterator[:class:`~vulcan.hebe.data.Attendance`], List[int]] """ if date_from == None: date_from = datetime.date.today() if date_to == None: date_to = date_from date_to = date_to + datetime.timedelta( days=1 ) # Vulcan requires the date_to to be one greater the date it is supposed to be data = await api.helper.get_list(DATA_ATTENDANCE, FilterType.BY_PUPIL, deleted=deleted, date_from=date_from, date_to=date_to, last_sync=last_sync, **kwargs) for attendance in data: yield Attendance.load(attendance)
class Lesson: """Lesson :var int ~.number: Lesson number :var str ~.room: Classroom, in which is the lesson :var str ~.group: Group, that has the lesson :var `datetime.date` ~.date: Lesson date :var str ~.changes: Lesson changes :var bool ~.visible: Lesson visibility (whether the timetable applies to the given student) :var `datetime.datetime` ~.from_: Lesson start date and time :var `datetime.datetime` ~.to: Lesson end date and time :var `~vulcan._lesson.LessonTime` ~.time: Information about the lesson time :var `~vulcan._teacher.Teacher` ~.teacher: Teacher of the lesson :var `~vulcan._subject.Subject` ~.subject: Subject on the lesson """ number = IntegerField(key="NumerLekcji") room = StringField(key="Sala", required=False) group = StringField(key="PodzialSkrot", required=False) date = DateField(key="DzienTekst", required=False) changes = StringField(key="AdnotacjaOZmianie", required=False) visible = BooleanField(key="PlanUcznia", required=False) time = ChildField(LessonTime, required=False) teacher = ChildField(Teacher, required=False) subject = ChildField(Subject, required=False) # pylint: disable=E1101 @property def from_(self): return datetime.datetime.combine(self.date, self.time.from_) # pylint: disable=E1101 @property def to(self): return datetime.datetime.combine(self.date, self.time.to) @classmethod def get(cls, api, date_from, date_to): if not date_from: date_from = datetime.date.today() if not date_to: date_to = date_from data = { "DataPoczatkowa": date_from.strftime("%Y-%m-%d"), "DataKoncowa": date_to.strftime("%Y-%m-%d"), } j = api.post("Uczen/PlanLekcjiZeZmianami", json=data) lessons = sort_and_filter_dates( j.get("Data", []), date_from, date_to, sort_key="NumerLekcji", date_key="DzienTekst", ) for lesson in lessons: lesson["time"] = api.dict.get_lesson_time_json(lesson["IdPoraLekcji"]) lesson["teacher"] = api.dict.get_teacher_json(lesson["IdPracownik"]) lesson["subject"] = api.dict.get_subject_json(lesson["IdPrzedmiot"]) yield to_model(cls, lesson)