Source code for app.schemas.project_schema

from typing import Optional

from pydantic import BaseModel, Field, field_validator

from app.utils import is_valid_datestring
from app.utils import ProjectStateEnum

from app.models.project_model import Project

[docs] class ProjectSchema(BaseModel): name: str = Field(..., min_length=2, max_length=255) state: ProjectStateEnum = Field(...) start_date: str = Field(...) slug: Optional[str] = Field(default=None) end_date: Optional[str] = Field(default=None) description: Optional[str] = Field(default=None)
[docs] @field_validator("start_date") @classmethod def validate_start_datestring(cls, v: str): if v is None: raise ValueError(f'Invalid start_date type: "{type(None)}"') if not is_valid_datestring(v): raise ValueError( f'Invalid date format: "{v}". Expected format is "YYYY-MM-DD"' ) return v
[docs] @field_validator("end_date") @classmethod def validate_end_datestring(cls, v: str): if v is None: return None if not is_valid_datestring(v): raise ValueError( f'Invalid date format: "{v}". Expected format is "YYYY-MM-DD"' ) return v
[docs] @classmethod def from_project(cls, project: Project): project_data = {} for field in cls.model_fields: if hasattr(project, field): project_data[field] = getattr(project, field) return cls(**project_data)