filament.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from datetime import datetime
  2. from pydantic import BaseModel, Field
  3. class FilamentBase(BaseModel):
  4. name: str = Field(..., min_length=1, max_length=100)
  5. type: str = Field(..., min_length=1, max_length=50)
  6. brand: str | None = None
  7. color: str | None = None
  8. color_hex: str | None = Field(None, pattern=r"^#[0-9A-Fa-f]{6}$")
  9. cost_per_kg: float = 25.0
  10. spool_weight_g: float = 1000.0
  11. currency: str = "USD"
  12. density: float | None = None
  13. print_temp_min: int | None = None
  14. print_temp_max: int | None = None
  15. bed_temp_min: int | None = None
  16. bed_temp_max: int | None = None
  17. class FilamentCreate(FilamentBase):
  18. pass
  19. class FilamentUpdate(BaseModel):
  20. name: str | None = None
  21. type: str | None = None
  22. brand: str | None = None
  23. color: str | None = None
  24. color_hex: str | None = None
  25. cost_per_kg: float | None = None
  26. spool_weight_g: float | None = None
  27. currency: str | None = None
  28. density: float | None = None
  29. print_temp_min: int | None = None
  30. print_temp_max: int | None = None
  31. bed_temp_min: int | None = None
  32. bed_temp_max: int | None = None
  33. class FilamentResponse(FilamentBase):
  34. id: int
  35. created_at: datetime
  36. updated_at: datetime
  37. class Config:
  38. from_attributes = True
  39. class FilamentCostCalculation(BaseModel):
  40. filament_id: int
  41. filament_name: str
  42. weight_grams: float
  43. cost: float
  44. currency: str