Source code for app.schemas.project_participation_schema

from typing import Optional, List

from pydantic import BaseModel, Field, field_validator

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

from app.models.project_participation_model import ProjectParticipation

[docs] class ProjectParticipationSchema(BaseModel): username: str = Field(..., min_length=3, max_length=32, pattern="^[a-zA-Z0-9]*$") join_date: str = Field(default=None) project_name: Optional[str] = Field(default=None, min_length=2, max_length=255) roles: Optional[List[str]] = Field(default=None)
[docs] @field_validator("join_date") @classmethod def validate_datestring(cls, v: str): 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_participation(cls, participation: ProjectParticipation): participation_data = { "username": participation.member.username, "project_name": participation.project.name } for field in {*cls.model_fields.keys()} - {"username", "project_name"}: if hasattr(participation, field): participation_data[field] = getattr(participation, field) return cls(**participation_data)