print_log.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from datetime import datetime
  2. from pydantic import BaseModel, ConfigDict
  3. class PrintLogEntrySchema(BaseModel):
  4. # from_attributes lets the routes build this straight off the ORM row.
  5. # The GET serialiser used to name every field by hand, and each field it
  6. # forgot came back as its default — a silent null rather than an error.
  7. # That cost the log its failure_reason (#1687 part 4) and then its cost /
  8. # energy_kwh / energy_cost (#2636). Validating from the row removes the
  9. # chance to forget one.
  10. model_config = ConfigDict(from_attributes=True)
  11. id: int
  12. archive_id: int | None = None
  13. print_name: str | None = None
  14. printer_name: str | None = None
  15. printer_id: int | None = None
  16. status: str
  17. started_at: datetime | None = None
  18. completed_at: datetime | None = None
  19. duration_seconds: int | None = None
  20. filament_type: str | None = None
  21. filament_color: str | None = None
  22. filament_used_grams: float | None = None
  23. cost: float | None = None
  24. energy_kwh: float | None = None
  25. energy_cost: float | None = None
  26. failure_reason: str | None = None
  27. thumbnail_path: str | None = None
  28. created_by_id: int | None = None
  29. created_by_username: str | None = None
  30. created_at: datetime
  31. class PrintLogResponse(BaseModel):
  32. items: list[PrintLogEntrySchema]
  33. total: int
  34. class PrintLogEntryUpdate(BaseModel):
  35. """Per-row classification edits (#1687 part 4 — IndividualGhost1905).
  36. Lets the user set ``failure_reason`` (and re-classify ``status``) directly
  37. on a Print Log row, including on orphan entries that have no archive to
  38. edit through. The Failure Analysis widget already groups by
  39. ``PrintLogEntry.failure_reason``, so this just plugs the editor gap.
  40. """
  41. failure_reason: str | None = None
  42. status: str | None = None