""" Pydantic schemas for Project API. Defines request and response models for project operations. """ from datetime import datetime from typing import Optional from pydantic import BaseModel, Field class ProjectCreate(BaseModel): """Schema for creating a new project.""" name: str = Field(..., min_length=1, description="Project name") description: str = Field(default="", description="Project description") config: str = Field(..., min_length=1, description="Label Studio configuration") class Config: json_schema_extra = { "example": { "name": "Image Classification Project", "description": "Classify images into categories", "config": "" } } class ProjectUpdate(BaseModel): """Schema for updating an existing project.""" name: Optional[str] = Field(None, min_length=1, description="Project name") description: Optional[str] = Field(None, description="Project description") config: Optional[str] = Field(None, min_length=1, description="Label Studio configuration") class Config: json_schema_extra = { "example": { "name": "Updated Project Name", "description": "Updated description" } } class ProjectResponse(BaseModel): """Schema for project response.""" id: str = Field(..., description="Project unique identifier") name: str = Field(..., description="Project name") description: str = Field(..., description="Project description") config: str = Field(..., description="Label Studio configuration") created_at: datetime = Field(..., description="Project creation timestamp") task_count: int = Field(default=0, description="Number of tasks in project") class Config: json_schema_extra = { "example": { "id": "proj_123abc", "name": "Image Classification Project", "description": "Classify images into categories", "config": "", "created_at": "2024-01-12T10:30:00", "task_count": 5 } }