local_preset.py 1.7 KB

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