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)) | |