resume-api / controller /imports.py
Nattyboi's picture
updated codebase to make it faster
bbd997e
raw
history blame
4.03 kB
from io import BytesIO
from dotenv import load_dotenv
import os
from gamification.objects import SimpleIndividualUserLevel
from controller.utils import *
from fastapi import FastAPI, File, HTTPException, Header, UploadFile,status
from controller.tokenManagement import *
from controller.jwtcoding import *
from fastapi.responses import JSONResponse
import docx
import fitz
from gamification.routes import gamification
from controller.scraper import scrapeCourse
import asyncio
from google import genai
from typing import Optional,List
from pydantic import BaseModel
import re
from bson.json_util import dumps
import threading
import concurrent.futures
from gamification.pointLogic import get_all_simple_points_func,get_dream_job
from pydantic import BaseModel
from datetime import datetime
from bson import ObjectId
import os
import re
from urllib.parse import urlparse
from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(max_workers=5)
load_dotenv()
CX = os.getenv("SEARCH_ENGINE_ID")
API_KEY = os.getenv("GOOGLE_API_KEY")
PINECONE_API_KEY=os.getenv("PINECONE_API_KEY")
GEMINI_API_KEY=os.getenv("GEMINI_API_KEY")
MONGO_URI=os.getenv("MONGO_URI")
class UserBody(BaseModel):
firstName: Optional[str] = None
lastName: Optional[str] = None
email:str
password:str
class AiAnalysis(BaseModel):
query:str
class Token(BaseModel):
refreshToken:str
class RecommendedCourse(BaseModel):
courseTitle:Optional[str]=None
courseLink:Optional[str]=None
duration:Optional[str]=None
courseLevel:Optional[str]=None
interimRoleBenefit:Optional[str]=None
dreamRoleBenefit:Optional[str]=None
courseDescription:Optional[str]=None
courseProvider:Optional[str]=None
class UserCourse(BaseModel):
employmentStatus:str
interimRole:bool
interimRoleOptions:Optional[List[str]]=None
dreamRole:str
motivation:str
learningPreference:str
timeCommitmentPerDay:str
challenges:list
timeframeToAchieveDreamRole:str
recommendedCourses: Optional[List[RecommendedCourse]]=None
class LeaderBoardRanking(BaseModel):
userId:str
firstName:str
lastName:str
totalpoints:float
lastUpdated:datetime
careerPath:str
class Config:
json_encoder ={
ObjectId:str
}
class CourseRecommendation(BaseModel):
courseName: str
completionTime: str
def extract_provider(url):
# Parse the URL
parsed_url = urlparse(url)
# Extract domain and split it to get the main part
domain = parsed_url.netloc.split('.')[1]
# Extract course name
match = re.search(r'/course/([^/]+)/', url)
course_name = match.group(1) if match else "Not found"
return domain
def get_course_func(query):
# Example search query
results = google_search(query, API_KEY, CX)
content=[]
if results:
for item in results.get('items', []):
title = item.get('title')
link = item.get('link')
snippet = item.get('snippet')
provider = extract_provider(link)
content_structure={}
content_structure["courseTitle"]=title
content_structure["courseLink"]=link
content_structure["courseSnippet"]= snippet
content_structure["scrapedCourseDetails"]= scrapeCourse(url=link)
content.append(content_structure)
return content
def extract_course_info(text: str) -> CourseRecommendation:
# Example regex patterns – adjust these as needed based on the response format.
course_pattern =r'"coursename":\s*"([^"]+)"'
time_pattern = r"(\d+\s*-\s*\d+\s*months)"
course_match = re.search(course_pattern, text)
time_match = re.search(time_pattern, text)
coursename = course_match.group(1).strip() if course_match else "Unknown"
completiontime = time_match.group(0).strip() if time_match else "Unknown"
return CourseRecommendation(courseName=coursename, completionTime=completiontime)