test-cv / pydantic_model.py
hasanbasbunar's picture
CORRECTIONS CRITIQUES LaTeX et Pydantic
6523154
from typing import List, Optional, Union
from pydantic import BaseModel, EmailStr, HttpUrl, field_validator
class DocumentMeta(BaseModel):
pdf_title: str
pdf_author: str
last_updated_text: Optional[str] = None # ex: "September 2024"
class Header(BaseModel):
name: str
location: str
email: EmailStr
phone: str
website_url: Optional[Union[HttpUrl, str]] = None
website_label: Optional[str] = None # ex: "yourwebsite.com"
linkedin_url: Optional[Union[HttpUrl, str]] = None
linkedin_handle: Optional[str] = None # ex: "yourusername"
github_url: Optional[Union[HttpUrl, str]] = None
github_handle: Optional[str] = None # ex: "yourusername"
@field_validator('website_url', 'linkedin_url', 'github_url', mode='before')
@classmethod
def validate_urls(cls, v):
if v == "" or v is None:
return None
return v
class EducationEntry(BaseModel):
degree: str # ex: "BS"
date_range: str # ex: "Sept 2000 – May 2005"
institution: str # ex: "University of Pennsylvania"
field_of_study: Optional[str] = None # ex: "Computer Science"
highlights: List[str] = [] # puces
class ExperienceEntry(BaseModel):
company: str # ex: "Apple"
role: str # ex: "Software Engineer"
location: str # ex: "Cupertino, CA"
date_range: str # ex: "June 2005 – Aug 2007"
highlights: List[str] = []
class PublicationEntry(BaseModel):
date: str # ex: "Jan 2004"
title: str # ex: "3D Finite Element Analysis of ..."
authors: List[str] # ex: ["Frodo Baggins", "John Doe", "Samwise Gamgee"]
doi_url: Optional[Union[HttpUrl, str]] = None # ex: "https://doi.org/10.1109/..."
doi_label: Optional[str] = None # ex: "10.1109/TASC.2023.3340648"
@field_validator('doi_url', mode='before')
@classmethod
def validate_doi_url(cls, v):
if v == "" or v is None:
return None
return v
class ProjectEntry(BaseModel):
title: str # ex: "Multi-User Drawing Tool"
repo_url: Optional[Union[HttpUrl, str]] = None # ex: "https://github.com/name/repo"
repo_label: Optional[str] = None # ex: "github.com/name/repo"
highlights: List[str] = []
@field_validator('repo_url', mode='before')
@classmethod
def validate_repo_url(cls, v):
if v == "" or v is None:
return None
return v
class Technologies(BaseModel):
languages: List[str] = [] # ex: ["C++", "C", "Java", ...]
technologies: List[str] = [] # ex: [".NET", "SQL Server", "XCode", ...]
class Resume(BaseModel):
meta: DocumentMeta
header: Header
# Sections correspondant au contenu du template fourni
intro_paragraphs: List[str] = [] # section "Welcome to RenderCV!" (paragraphes)
quick_guide_items: List[str] = [] # puces "Quick Guide"
education: List[EducationEntry] = []
experience: List[ExperienceEntry] = []
publications: List[PublicationEntry] = []
projects: List[ProjectEntry] = []
technologies_section: Technologies