Spaces:
Paused
Paused
| import aiohttp | |
| import pandas as pd | |
| from io import StringIO | |
| from constants.constants import vtop_doMarks_view_url | |
| from utils.payloads import get_doMarks_view_payload | |
| async def _get_doMarks_view_page( | |
| sess: aiohttp.ClientSession, username: str, semID: str, csrf: str | |
| ) -> str: | |
| async with sess.post( | |
| vtop_doMarks_view_url, data=get_doMarks_view_payload(username, semID, csrf) | |
| ) as req: | |
| return await req.text() | |
| def _parse_marks(marks_page): | |
| try: | |
| tables = pd.read_html(StringIO(marks_page)) | |
| except ValueError: | |
| return {} | |
| course_details = tables[0].iloc[1::2, :] | |
| marks_data = {} | |
| for i in range(course_details.shape[0]): | |
| course = course_details.iloc[i] | |
| marks_data[course[1]] = { | |
| "courseName": course[3], | |
| "courseType": course[4], | |
| "professor": course[6], | |
| "courseSlot": course[7], | |
| "marks": {}, | |
| } | |
| current_course_table = tables[i + 1] | |
| for j in range(1, current_course_table.shape[0]): | |
| entry = current_course_table.iloc[j] | |
| marks_data[course[1]]["marks"][entry[1]] = { | |
| "maxMarks": entry[2], | |
| "maxWeightageMarks": entry[3], | |
| "scoredMarks": entry[5], | |
| "scoredWeightageMarks": entry[6], | |
| } | |
| return marks_data | |
| async def get_marks_data( | |
| sess: aiohttp.ClientSession, username: str, semID: str, csrf: str | |
| ): | |
| return _parse_marks(await _get_doMarks_view_page(sess, username, semID, csrf)) | |