host-fastapi / app.py
sanjay7178's picture
Update app.py
276f9fd verified
import uvicorn
from aiohttp import ClientSession
from gen_session import gen_session
from get_marks import get_marks_data
from get_grades import get_grades_data
from get_profile import get_profile_data
from fastapi.responses import JSONResponse
from get_timetable import get_timetable_data
from get_attendance import get_attendance_data
from get_exam_schedule import get_examSchedule_data
from get_sem_id import _get_all_sem_ids, _get_sem_id
from fastapi import FastAPI, Request, HTTPException, status, Form
import logging
logger = logging.getLogger(__name__)
app = FastAPI()
def basic_creds_check(username: str | None, password: str | None):
if not username or not password:
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED)
@app.get("/")
async def root():
return {"message": "VTOP-AP API"}
async def handle_request(data_func, num_parameters, username, password):
basic_creds_check(username, password)
async with ClientSession() as sess:
print("password :" + password)
print("username : "+ username)
logger.info("username : "+ username + " password :" + password)
session_result = await gen_session(sess, username, password)
if session_result == 0:
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED)
if num_parameters == 3:
return await data_func(sess, username, session_result)
else:
return await data_func(
sess,
username,
await _get_sem_id(sess, username, session_result),
session_result,
)
@app.post("/api/attendance")
@app.post("/api/timetable")
@app.post("/api/examSchedule")
async def handle_4param_data_functions(
request: Request, username: str = Form(...), password: str = Form(...)
):
data_func = {
"/api/attendance": get_attendance_data,
"/api/timetable": get_timetable_data,
"/api/examSchedule": get_examSchedule_data,
}
return await handle_request(data_func[request.url.path], 4, username, password)
@app.post("/api/grades")
@app.post("/api/profile")
@app.post("/api/semIDs")
async def handle_3param_data_functions(
request: Request, username: str = Form(...), password: str = Form(...)
):
data_func = {
"/api/grades": get_grades_data,
"/api/profile": get_profile_data,
"/api/semIDs": _get_all_sem_ids,
}
return await handle_request(data_func[request.url.path], 3, username, password)
@app.post("/api/verify")
async def verify_creds(username: str = Form(...), password: str = Form(...)):
basic_creds_check(username, password)
async with ClientSession() as sess:
session_result = await gen_session(sess, username, password)
if session_result == 0:
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED)
else:
return JSONResponse(
content={"csrf_token": session_result}, status_code=status.HTTP_200_OK
)
@app.post("/api/all")
async def all_data(username: str = Form(...), password: str = Form(...)):
basic_creds_check(username, password)
async with ClientSession() as sess:
session_result = await gen_session(sess, username, password)
if session_result == 0:
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED)
semID = await _get_sem_id(sess, username, session_result)
data = {
"profile": await get_profile_data(sess, username, session_result),
"attendance": await get_attendance_data(
sess, username, semID, session_result
),
"semIDs": await _get_all_sem_ids(sess, username, session_result),
"grades": await get_grades_data(sess, username, session_result),
"examSchedule": await get_examSchedule_data(
sess, username, semID, session_result
),
"timetable": await get_timetable_data(
sess, username, semID, session_result
),
}
return data
@app.post("/api/marks")
async def marks(
username: str = Form(...), password: str = Form(...), semID: str = Form(...)
):
basic_creds_check(username, password)
async with ClientSession() as sess:
session_result = await gen_session(sess, username, password)
if session_result == 0:
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED)
return await get_marks_data(sess, username, semID, session_result)
if __name__ == "__main__":
uvicorn.run(app, host="localhost", port=7860)