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 = [""] 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="



") 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()