attendance models
pyjiit/attendance.py. Used by get_attendance_meta and get_attendance, and Semester is reused across the wrapper.
AttendanceHeader#
Dataclass from each headerlist row.
| Attribute | JSON key |
|---|---|
branchdesc |
branchdesc |
name |
name |
programdesc |
programdesc |
stynumber |
stynumber |
get_attendance sends stynumber in the encrypted body.
Semester#
| Attribute | JSON key |
|---|---|
registration_id |
registrationid |
registration_code |
registrationcode |
Same class is built from:
AttendanceMeta.semesters(semlist)get_registered_semesters(response.registrations)get_semesters_for_exam_events(response.semesterCodeinfo.semestercode)get_semesters_for_marks(response.semestercode)get_semesters_for_grade_card(response.registrations)
classDiagram
class AttendanceHeader {
branchdesc
name
programdesc
stynumber
from_json()
}
class Semester {
registration_code
registration_id
from_json()
}
class AttendanceMeta {
raw_response
headers
semesters
latest_header()
latest_semester()
}
AttendanceMeta --> AttendanceHeader
AttendanceMeta --> SemesterAttendanceMeta#
class AttendanceMeta:
def __init__(self, resp) -> None:
self.raw_response = resp
self.headers = [AttendanceHeader.from_json(i) for i in resp["headerlist"]]
self.semesters = [Semester.from_json(i) for i in resp["semlist"]]
def latest_header(self):
return self.headers[0]
def latest_semester(self):
return self.semesters[0]
latest_* is “first element”, not a date sort. Empty lists would IndexError.
flowchart LR API["get_attendance_meta JSON"] --> Meta["AttendanceMeta"] Meta --> H["headers[0]"] Meta --> S["semesters[0]"] H --> GA["get_attendance"] S --> GA GA --> Dict["studentattendancelist dict"]
Detail rows#
get_attendance does not wrap rows. You get the portal dict. Usage docs show keys like LTpercantage, Lpercentage, Lsubjectcomponentcode.
meta = w.get_attendance_meta()
data = w.get_attendance(meta.latest_header(), meta.latest_semester())
rows = data["studentattendancelist"]