from datetime import datetime
import json
class JobDescription:
def __init__(self, title, company, url, company_url, job_description):
self.title = title
self.company = company
self.url = url
self.company_url = company_url
self.published_at = None # Initialize to None or a default value
self.job_description = job_description
self.organization_logo_url = ""
self.ai_result : AIInformation = None
self.salary_range = ""
def to_dict(self):
return {
"title": self.title,
"company": self.company,
"url": self.url,
"company_url": self.company_url,
"published_at": self.published_at.isoformat() if self.published_at else None,
"job_description": self.job_description,
"organization_logo_url": self.organization_logo_url,
"ai_result": self.ai_result.to_dict() if self.ai_result else None,
"salary_range": self.salary_range
}
@staticmethod
def from_dict(data):
ai_result = AIInformation.from_dict(data["ai_result"]) if data["ai_result"] else None
job_desc = JobDescription(
title=data["title"],
company=data["company"],
url=data["url"],
company_url=data["company_url"],
job_description=data["job_description"]
)
job_desc.published_at = datetime.fromisoformat(data["published_at"]) if data["published_at"] else None
job_desc.organization_logo_url = data["organization_logo_url"]
job_desc.ai_result = ai_result
job_desc.salary_range = data["salary_range"]
return job_desc
def format_should_apply(self, should_apply : bool):
if should_apply:
return "⭐ "
return ""
def get_salary(self):
if self.ai_result.salary_range.lower() not in ["", "unknown"]:
return self.ai_result.salary_range
return self.salary_range
def format_str_or_list(self, input):
if isinstance(input, str):
return input.replace("\n", "
")
if isinstance(input, list):
return "
{} ({}) - published at {}
".format(self.company_url, self.company, self.ai_result.company_description, self.format_posted_date(self.published_at))) result.append("