Spaces:
Paused
Paused
File size: 1,660 Bytes
5161c7a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
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
|