| 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 |
|
|
|
|
| class Header(BaseModel): |
| name: str |
| location: str |
| email: EmailStr |
| phone: str |
| website_url: Optional[Union[HttpUrl, str]] = None |
| website_label: Optional[str] = None |
| linkedin_url: Optional[Union[HttpUrl, str]] = None |
| linkedin_handle: Optional[str] = None |
| github_url: Optional[Union[HttpUrl, str]] = None |
| github_handle: Optional[str] = None |
|
|
| @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 |
| date_range: str |
| institution: str |
| field_of_study: Optional[str] = None |
| highlights: List[str] = [] |
|
|
|
|
| class ExperienceEntry(BaseModel): |
| company: str |
| role: str |
| location: str |
| date_range: str |
| highlights: List[str] = [] |
|
|
|
|
| class PublicationEntry(BaseModel): |
| date: str |
| title: str |
| authors: List[str] |
| doi_url: Optional[Union[HttpUrl, str]] = None |
| doi_label: Optional[str] = None |
|
|
| @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 |
| repo_url: Optional[Union[HttpUrl, str]] = None |
| repo_label: Optional[str] = None |
| 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] = [] |
| technologies: List[str] = [] |
|
|
|
|
| class Resume(BaseModel): |
| meta: DocumentMeta |
| header: Header |
|
|
| |
| intro_paragraphs: List[str] = [] |
| quick_guide_items: List[str] = [] |
|
|
| education: List[EducationEntry] = [] |
| experience: List[ExperienceEntry] = [] |
| publications: List[PublicationEntry] = [] |
| projects: List[ProjectEntry] = [] |
| technologies_section: Technologies |