Skip to content
This repository has been archived by the owner on Aug 29, 2021. It is now read-only.

Commit

Permalink
[student] Add attendance and logout endpoints (#2)
Browse files Browse the repository at this point in the history
  • Loading branch information
Zomatree authored Mar 24, 2020
1 parent 53b28d5 commit 55e4700
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 3 deletions.
33 changes: 31 additions & 2 deletions classcharts/student/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,13 @@ async def login(self):

await self.ping()

async def logout(self):
headers = {
'Authorization': 'Basic {}'.format(self._session_id)
}
await self._request("POST", "apiv2student/logout", headers=headers)
await self.session.close()

async def ping(self):
form = {
'include_data': "true"
Expand All @@ -74,7 +81,6 @@ async def ping(self):
self.announcements_count = user.pop('announcements_count')
self.features = user


async def activity(self, *, after: datetime = None, before: datetime = None):
if after is None:
after = datetime.now() - timedelta(days=31)
Expand Down Expand Up @@ -171,4 +177,27 @@ async def timetable(self, day: datetime = None):
}

data = await self._request('POST', 'apiv2student/timetable/{}'.format(self.id), params=params, headers=headers)
return Timetable(data)

return Timetable(data)

async def attendance(self, *, after: datetime = None, before: datetime = None):
"""Gets the attendance for by default the last month
:param after: when the attendance should start
:type after: datetime.datetime, optional
:param before: when the attendance should end, defaults to today
:type before: datetime.datetime, optional
"""
params = {}

if after:
params["after"] = after.strftime("%Y-%m-%d")
if before:
params["before"] = before.strftime("%Y-%m-%d")

headers = {
'Authorization': 'Basic {}'.format(self._session_id)
}

data = await self._request('POST', 'apiv2student/attendance/{}'.format(self.id), params=params, headers=headers)
return Attendance(data)
31 changes: 30 additions & 1 deletion classcharts/student/objects.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,4 +173,33 @@ def __init__(self, data):
self.end = datetime.fromisoformat(data["meta"]["end_time"])

def __repr__(self):
return "<Timetable date={!r}>".format(self.date)
return "<Timetable date={!r}>".format(self.date)


class AttendanceLesson(BasicLesson):
def __init__(self, name, data):
super().__init__({"name": name, "subject": {"name": None}})
self.code = data["code"] or None
self.late_minutes = int(data["late_minutes"] or "0")
self.status = data["status"]

def __repr__(self):
return '<AttendanceLesson name={!r} code={!r}>'.format(self.name, self.code)


class Attendance:
def __init__(self, data):
self.percentage = int(data["meta"]["percentage"])
self.percentage_singe_august = int(data["meta"]["percentage_singe_august"])
self.dates = [datetime.fromisoformat(date) for date in data["meta"]["dates"]]
self.days = {}

for date, day in data["data"].items():
self.days[datetime.fromisoformat(date)] = [AttendanceLesson(name, lesson) for name, lesson in day.items()]

self.sessions = data["meta"]["sessions"]
self.start = datetime.fromisoformat(data["meta"]["start_date"])
self.end = datetime.fromisoformat(data["meta"]["end_date"])

def __repr__(self):
return "<Attendance percentage={!r}>".format(self.percentage)

0 comments on commit 55e4700

Please sign in to comment.