Spaces:
Paused
Paused
import re | |
import string | |
import aiohttp | |
import pandas as pd | |
from io import StringIO | |
from constants.constants import vtop_profile_url | |
from utils.payloads import get_profile_payload | |
def _get_value_from_column1(text: str, df: pd.DataFrame): | |
row = df[df[0] == text] | |
if not row.empty: | |
return str(row.iloc[0, 1]) | |
else: | |
return str(None) | |
async def _get_profile_page( | |
sess: aiohttp.ClientSession, username: str, csrf: str | |
) -> str: | |
async with sess.post( | |
vtop_profile_url, data=get_profile_payload(username, csrf) | |
) as req: | |
return await req.text() | |
async def get_profile_data( | |
sess: aiohttp.ClientSession, username: str, csrf: str | |
) -> dict: | |
profile_page = await _get_profile_page(sess, username, csrf) | |
data = {} | |
tables = pd.read_html(StringIO(profile_page)) | |
desired_fields_table_0 = { | |
"Student Name": "STUDENT NAME", | |
"Application Number": "APPLICATION NUMBER", | |
} | |
desired_fields_table_3 = { | |
"Mentor Name": "FACULTY NAME", | |
"Mentor Cabin": "CABIN", | |
"Mentor Email": "FACULTY EMAIL", | |
"Mentor intercom": "FACULTY INTERCOM", | |
"Mentor Mobile Number": "FACULTY MOBILE NUMBER", | |
} | |
data["image"] = re.findall(r'src="data:null;base64,(.*)"', profile_page)[0] | |
data["VIT Registration Number"] = username | |
for key, field in desired_fields_table_0.items(): | |
data[key] = string.capwords(_get_value_from_column1(field, tables[0])) | |
for key, field in desired_fields_table_3.items(): | |
data[key] = _get_value_from_column1(field, tables[3]) | |
return data | |