filament_profile_default.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from datetime import datetime
  2. from pydantic import BaseModel, Field, field_validator
  3. from backend.app.schemas.spool import SpoolFilamentPresetBase, SpoolKProfileBase
  4. class FilamentProfileDefaultKey(BaseModel):
  5. """The product a default is for (#1326). ``color_name`` "" = every colour."""
  6. brand: str = Field(default="", max_length=100)
  7. material: str = Field(..., min_length=1, max_length=50)
  8. subtype: str = Field(default="", max_length=50)
  9. color_name: str = Field(default="", max_length=100)
  10. @field_validator("brand", "material", "subtype", "color_name", mode="before")
  11. @classmethod
  12. def _strip(cls, value):
  13. return (value or "").strip() if value is None or isinstance(value, str) else value
  14. class FilamentProfileDefaultWrite(FilamentProfileDefaultKey):
  15. """Everything a spool form's Printers tab holds, plus the spool's own preset."""
  16. slicer_filament: str | None = Field(default=None, max_length=128)
  17. slicer_filament_name: str | None = Field(default=None, max_length=255)
  18. presets: list[SpoolFilamentPresetBase] = Field(default_factory=list)
  19. k_profiles: list[SpoolKProfileBase] = Field(default_factory=list)
  20. class FilamentProfileDefaultResponse(FilamentProfileDefaultWrite):
  21. id: int
  22. updated_at: datetime
  23. class ResolvedProfileDefault(BaseModel):
  24. """What a new spool of a product gets: the all-colours default with the
  25. colour's own one laid over it."""
  26. slicer_filament: str | None = None
  27. slicer_filament_name: str | None = None
  28. presets: list[SpoolFilamentPresetBase] = Field(default_factory=list)
  29. k_profiles: list[SpoolKProfileBase] = Field(default_factory=list)
  30. default_ids: list[int] = Field(default_factory=list)
  31. class ProfileDefaultApplyResult(BaseModel):
  32. """How many spools ``Apply to existing spools`` filled something in on."""
  33. updated: int