from datetime import datetime from pydantic import BaseModel, Field class PrinterBase(BaseModel): name: str = Field(..., min_length=1, max_length=100) serial_number: str = Field(..., min_length=1, max_length=50) ip_address: str = Field(..., pattern=r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$") access_code: str = Field(..., min_length=1, max_length=20) model: str | None = None auto_archive: bool = True class PrinterCreate(PrinterBase): pass class PrinterUpdate(BaseModel): name: str | None = None ip_address: str | None = None access_code: str | None = None model: str | None = None is_active: bool | None = None auto_archive: bool | None = None class PrinterResponse(PrinterBase): id: int is_active: bool created_at: datetime updated_at: datetime class Config: from_attributes = True class PrinterStatus(BaseModel): id: int name: str connected: bool state: str | None = None current_print: str | None = None subtask_name: str | None = None gcode_file: str | None = None progress: float | None = None remaining_time: int | None = None layer_num: int | None = None total_layers: int | None = None temperatures: dict | None = None cover_url: str | None = None