local_preset.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. """Pydantic schemas for local preset API."""
  2. from datetime import datetime
  3. from pydantic import BaseModel
  4. class LocalPresetResponse(BaseModel):
  5. """Local preset summary (without full setting blob)."""
  6. id: int
  7. name: str
  8. preset_type: str
  9. source: str
  10. filament_type: str | None = None
  11. filament_vendor: str | None = None
  12. nozzle_temp_min: int | None = None
  13. nozzle_temp_max: int | None = None
  14. pressure_advance: str | None = None
  15. default_filament_colour: str | None = None
  16. filament_cost: str | None = None
  17. filament_density: str | None = None
  18. compatible_printers: str | None = None
  19. inherits: str | None = None
  20. version: str | None = None
  21. created_at: datetime
  22. updated_at: datetime
  23. model_config = {"from_attributes": True}
  24. class LocalPresetDetail(LocalPresetResponse):
  25. """Full preset detail including the resolved setting JSON."""
  26. setting: dict
  27. class LocalPresetCreate(BaseModel):
  28. """Schema for manually creating a local preset."""
  29. name: str
  30. preset_type: str # filament, printer, process
  31. setting: dict
  32. class LocalPresetUpdate(BaseModel):
  33. """Schema for updating a local preset."""
  34. name: str | None = None
  35. setting: dict | None = None
  36. class LocalPresetsResponse(BaseModel):
  37. """Grouped local presets by type."""
  38. filament: list[LocalPresetResponse] = []
  39. printer: list[LocalPresetResponse] = []
  40. process: list[LocalPresetResponse] = []
  41. class ImportResponse(BaseModel):
  42. """Result of an import operation."""
  43. success: bool
  44. imported: int
  45. skipped: int
  46. errors: list[str] = []