spool.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. from datetime import datetime
  2. from pydantic import BaseModel, Field
  3. class SpoolBase(BaseModel):
  4. material: str = Field(..., min_length=1, max_length=50)
  5. subtype: str | None = None
  6. color_name: str | None = None
  7. rgba: str | None = Field(None, pattern=r"^[0-9A-Fa-f]{8}$")
  8. brand: str | None = None
  9. label_weight: int = 1000
  10. core_weight: int = 250
  11. core_weight_catalog_id: int | None = None
  12. weight_used: float = 0
  13. slicer_filament: str | None = None
  14. slicer_filament_name: str | None = None
  15. nozzle_temp_min: int | None = None
  16. nozzle_temp_max: int | None = None
  17. note: str | None = None
  18. tag_uid: str | None = None
  19. tray_uuid: str | None = None
  20. data_origin: str | None = None
  21. tag_type: str | None = None
  22. cost_per_kg: float | None = Field(default=None, ge=0)
  23. class SpoolCreate(SpoolBase):
  24. pass
  25. class SpoolBulkCreate(BaseModel):
  26. spool: SpoolCreate
  27. quantity: int = Field(default=1, ge=1, le=100)
  28. class SpoolUpdate(BaseModel):
  29. material: str | None = None
  30. subtype: str | None = None
  31. color_name: str | None = None
  32. rgba: str | None = None
  33. brand: str | None = None
  34. label_weight: int | None = None
  35. core_weight: int | None = None
  36. core_weight_catalog_id: int | None = None
  37. weight_used: float | None = None
  38. slicer_filament: str | None = None
  39. slicer_filament_name: str | None = None
  40. nozzle_temp_min: int | None = None
  41. nozzle_temp_max: int | None = None
  42. note: str | None = None
  43. tag_uid: str | None = None
  44. tray_uuid: str | None = None
  45. data_origin: str | None = None
  46. tag_type: str | None = None
  47. cost_per_kg: float | None = Field(default=None, ge=0)
  48. class SpoolKProfileBase(BaseModel):
  49. printer_id: int
  50. extruder: int = 0
  51. nozzle_diameter: str = "0.4"
  52. nozzle_type: str | None = None
  53. k_value: float
  54. name: str | None = None
  55. cali_idx: int | None = None
  56. setting_id: str | None = None
  57. class SpoolKProfileResponse(SpoolKProfileBase):
  58. id: int
  59. spool_id: int
  60. created_at: datetime
  61. class Config:
  62. from_attributes = True
  63. class SpoolResponse(SpoolBase):
  64. id: int
  65. added_full: bool | None = None
  66. last_used: datetime | None = None
  67. encode_time: datetime | None = None
  68. tag_uid: str | None = None
  69. tray_uuid: str | None = None
  70. data_origin: str | None = None
  71. tag_type: str | None = None
  72. archived_at: datetime | None = None
  73. created_at: datetime
  74. updated_at: datetime
  75. k_profiles: list[SpoolKProfileResponse] = []
  76. class Config:
  77. from_attributes = True
  78. class SpoolAssignmentCreate(BaseModel):
  79. spool_id: int
  80. printer_id: int
  81. ams_id: int
  82. tray_id: int
  83. class SpoolAssignmentResponse(BaseModel):
  84. id: int
  85. spool_id: int
  86. printer_id: int
  87. printer_name: str | None = None
  88. ams_id: int
  89. tray_id: int
  90. fingerprint_color: str | None = None
  91. fingerprint_type: str | None = None
  92. created_at: datetime
  93. spool: SpoolResponse | None = None
  94. configured: bool = False
  95. class Config:
  96. from_attributes = True