Spaces:
Runtime error
Runtime error
# Author: Caitlin Blackmore | |
# Project: Pathfinder | |
# Project Description: This is a web application designed to facilitate job-mobility. | |
# It uses NLP to help job seekers find jobs that match their skills and interests. | |
# Date: 2023-02-03 | |
# File Description: This is the main file, containing the FastAPI app and all the endpoints. | |
# License: MIT License | |
# IMPORTS | |
from fastapi import FastAPI, Request, Form, File, UploadFile | |
from fastapi.templating import Jinja2Templates | |
from fastapi.staticfiles import StaticFiles | |
from fastapi.responses import HTMLResponse | |
import pandas as pd | |
from scrape_onet import get_onet_code, get_onet_description, get_onet_tasks | |
from match_utils import get_resume, get_simresults, skillNER | |
# APP SETUP | |
app = FastAPI() | |
app.mount("/static", StaticFiles(directory='static'), name="static") | |
templates = Jinja2Templates(directory="templates/") | |
# LOAD DATA | |
onet = pd.read_csv('static/ONET_JobTitles.csv') | |
### JOB INFORMATION CENTER ### | |
# GET | |
def render_job_list(request: Request): | |
joblist = onet['JobTitle'] | |
return templates.TemplateResponse('job_list.html', context={'request': request, 'joblist': joblist}) | |
# POST | |
def render_job_info(request: Request, jobtitle: str = Form(enum=[x for x in onet['JobTitle']])): | |
joblist = onet['JobTitle'] | |
if jobtitle: | |
onetCode = get_onet_code(jobtitle) | |
jobdescription = get_onet_description(onetCode) | |
tasks = get_onet_tasks(onetCode) | |
return templates.TemplateResponse('job_list.html', context={ | |
'request': request, | |
'joblist': joblist, | |
'jobtitle': jobtitle, | |
'jobdescription': jobdescription, | |
'tasks': tasks}) | |
### JOB NEIGHBORHOODS ### | |
def render_job_neighborhoods(request: Request): | |
return templates.TemplateResponse('job_neighborhoods.html', context={'request': request}) | |
### FIND-MY-MATCH ### | |
# GET | |
def match_page(request: Request): | |
return templates.TemplateResponse('find_my_match.html', context={'request': request}) | |
# POST | |
async def match_page(request: Request, resume: UploadFile = File(...)): | |
resume = get_resume(resume) | |
simResults = await get_simresults(resume) | |
skills = await skillNER(resume) | |
return templates.TemplateResponse('find_my_match.html', context={'request': request, 'resume': resume, 'skills': skills, 'simResults': simResults}) |