jobsearch / app.py
PaulMartrenchar's picture
Add an error if no search term set
8090d99
raw
history blame
3.11 kB
import gradio as gr
from datetime import datetime
from typing import List
from JobDescription import JobDescription
from jobspy_indeed import indeed_get_jobs
from WelcomeToTheJungle import wtoj_get_jobs
from jobspy_linkedin import linkedin_get_jobs
from ai_manager import get_extra_information
from db import Database
def log_start(raw_search_term, platform):
current_datetime = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print(f"{current_datetime} - new search: {raw_search_term} on {platform}")
def filterout_jobs(jobs : List[JobDescription]) -> List[JobDescription]:
job_filter = ["marketing", "communication", "community", "business development", "experience", "social media", "brand", "ppc", "seo", "sea", "ads", "user acquisition", "adops", "consultant"]
job_filter_negative = ["stage", "stagiaire", "alternant", "alternance", "intern", "internship", "apprenti"]
selected_jobs : List[JobDescription] = []
for job in jobs:
if not any(item in job.title.lower() for item in job_filter_negative) and any(item in job.title.lower() for item in job_filter):
selected_jobs.append(job)
return selected_jobs
def get_jobs(raw_search_term, platform) -> List[JobDescription]:
search_term = '"' + raw_search_term + '"'
if platform == "Indeed":
return indeed_get_jobs(search_term)
elif platform == "Welcome to the jungle":
return wtoj_get_jobs(search_term)
elif platform == "LinkedIn":
return linkedin_get_jobs(search_term)
else:
raise gr.Error("No platform selected")
def search_jobs(search_term, platform):
log_start(search_term, platform)
if search_term == "":
raise gr.Error("No search term selected")
yield "Searching for jobs..."
jobs : List[JobDescription] = get_jobs(search_term, platform)
selected_jobs = filterout_jobs(jobs)
#db = Database()
#db.add_to_db(selected_jobs)
if len(selected_jobs) == 0:
yield "No job found"
return
yield f"Found {len(selected_jobs)}. Analysing..."
result = ["<style>.job{display: flex;width:70%;margin: 5px auto;border: 1px solid;border-radius: 5px;}.logobox{flex: 1;display: flex;align-items: center;justify-content: center;}.logo{width:100px;height:100px}h4{margin: 2px;}</style>"]
for job in selected_jobs:
job.ai_result = get_extra_information(job.company, job.job_description)
if job.ai_result.is_an_internship == False:
result.append(job.to_html())
yield " ".join(result)
search_textbox = gr.Radio(choices=["Content writer", "Digital Marketing", "Communication", "Business development", "SEO"], label="Search")
platform = gr.Radio(choices=["Welcome to the jungle", "Indeed", "LinkedIn"], label="Platform")
output_html = gr.HTML(label="Result", value="<html><br/><br/><br/><br/></html>")
demo = gr.Interface(
fn=search_jobs,
inputs=[search_textbox, platform],
outputs=[output_html],
flagging_mode="never",
show_progress="full",
clear_btn=None,
title="Job search",
)
if __name__ == "__main__":
demo.launch()