""" User & Organization Pydantic Schemas Validation schemas for Gitea user and organization operations. """ from datetime import datetime from pydantic import BaseModel, ConfigDict, Field class User(BaseModel): """Gitea user model""" model_config = ConfigDict(extra="allow") id: int login: str full_name: str | None = None email: str | None = None avatar_url: str language: str | None = None is_admin: bool = False last_login: datetime | None = None created: datetime restricted: bool = False active: bool = True prohibit_login: bool = False location: str | None = None website: str | None = None description: str | None = None visibility: str | None = None followers_count: int = 0 following_count: int = 0 starred_repos_count: int = 0 username: str | None = None # Alias for login class Organization(BaseModel): """Gitea organization model""" model_config = ConfigDict(extra="allow") id: int name: str # org username full_name: str | None = None avatar_url: str description: str | None = None website: str | None = None location: str | None = None visibility: str # "public", "limited", "private" repo_admin_change_team_access: bool = False username: str | None = None # Alias for name class Team(BaseModel): """Organization team model""" model_config = ConfigDict(extra="allow") id: int name: str description: str | None = None organization: Organization | None = None permission: str # "none", "read", "write", "admin", "owner" can_create_org_repo: bool = False includes_all_repositories: bool = False units: list[str] | None = None units_map: dict | None = None class TeamMember(BaseModel): """Team member model""" model_config = ConfigDict(extra="allow") user: User role: str | None = None # Role in team class Email(BaseModel): """User email model""" model_config = ConfigDict(extra="allow") email: str verified: bool primary: bool class SearchUsersRequest(BaseModel): """Request to search users""" model_config = ConfigDict(extra="forbid") q: str | None = Field(None, description="Search query") uid: int | None = Field(None, description="User ID") class SearchOrgsRequest(BaseModel): """Request to search organizations""" model_config = ConfigDict(extra="forbid") q: str | None = Field(None, description="Search query")