Source code for pydotorg.domains.nominations.schemas

"""Nominations domain Pydantic schemas."""

from __future__ import annotations

import datetime
from typing import Annotated
from uuid import UUID

from pydantic import BaseModel, ConfigDict, Field

from pydotorg.domains.nominations.models import ElectionStatus


[docs] class ElectionBase(BaseModel): """Base election schema.""" name: Annotated[str, Field(max_length=200)] description: str | None = None nominations_open: datetime.date nominations_close: datetime.date voting_open: datetime.date voting_close: datetime.date
[docs] class ElectionCreate(ElectionBase): """Schema for creating a new election.""" slug: Annotated[str, Field(max_length=200)] | None = None
[docs] class ElectionUpdate(BaseModel): """Schema for updating an election.""" name: Annotated[str, Field(max_length=200)] | None = None description: str | None = None nominations_open: datetime.date | None = None nominations_close: datetime.date | None = None voting_open: datetime.date | None = None voting_close: datetime.date | None = None slug: Annotated[str, Field(max_length=200)] | None = None
[docs] class ElectionRead(ElectionBase): """Schema for reading election data.""" id: UUID slug: str created_at: datetime.datetime updated_at: datetime.datetime status: ElectionStatus model_config = ConfigDict(from_attributes=True)
[docs] class NomineeBase(BaseModel): """Base nominee schema.""" election_id: UUID user_id: UUID
[docs] class NomineeCreate(NomineeBase): """Schema for creating a new nominee."""
[docs] class NomineeUpdate(BaseModel): """Schema for updating a nominee.""" accepted: bool | None = None
[docs] class NomineeRead(NomineeBase): """Schema for reading nominee data.""" id: UUID accepted: bool created_at: datetime.datetime updated_at: datetime.datetime model_config = ConfigDict(from_attributes=True)
[docs] class NominationBase(BaseModel): """Base nomination schema.""" nominee_id: UUID endorsement: str | None = None
[docs] class NominationCreate(NominationBase): """Schema for creating a new nomination."""
[docs] class NominationUpdate(BaseModel): """Schema for updating a nomination.""" endorsement: str | None = None
[docs] class NominationRead(NominationBase): """Schema for reading nomination data.""" id: UUID nominator_id: UUID created_at: datetime.datetime updated_at: datetime.datetime model_config = ConfigDict(from_attributes=True)
[docs] class ElectionPublic(BaseModel): """Public election schema for listings.""" id: UUID slug: str name: str description: str | None nominations_open: datetime.date nominations_close: datetime.date voting_open: datetime.date voting_close: datetime.date status: ElectionStatus model_config = ConfigDict(from_attributes=True)
[docs] class NomineePublic(BaseModel): """Public nominee schema for listings.""" id: UUID election_id: UUID user_id: UUID accepted: bool model_config = ConfigDict(from_attributes=True)