| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- """Pydantic schemas for K-profile (pressure advance) management."""
- from pydantic import BaseModel
- from backend.app.schemas.not_null import IgnoresNullForRequiredColumns
- class KProfile(BaseModel):
- """A pressure advance (K) calibration profile stored on the printer."""
- slot_id: int # Storage slot on printer (limited capacity ~20 slots)
- extruder_id: int = 0 # 0 or 1 for dual nozzle printers
- nozzle_id: str # e.g., "HS00-0.4" (hardened steel 0.4mm)
- nozzle_diameter: str # e.g., "0.4"
- filament_id: str # Bambu filament identifier
- name: str # User-defined name for the profile
- k_value: str # Pressure advance coefficient as string, e.g., "0.020000"
- n_coef: str = "0.000000" # N coefficient (usually 0)
- ams_id: int = 0 # AMS unit ID
- tray_id: int = -1 # AMS tray ID (-1 if not linked)
- setting_id: str | None = None # Unique setting identifier
- class KProfileCreate(BaseModel):
- """Schema for creating/updating a K-profile."""
- slot_id: int = 0 # Storage slot, 0 for new profiles
- extruder_id: int = 0
- nozzle_id: str
- nozzle_diameter: str
- filament_id: str
- name: str
- k_value: str
- n_coef: str = "0.000000"
- ams_id: int = 0
- tray_id: int = -1
- setting_id: str | None = None
- class KProfilesResponse(BaseModel):
- """Response containing K-profiles from a printer."""
- profiles: list[KProfile]
- nozzle_diameter: str # Current nozzle filter
- class KProfileDelete(BaseModel):
- """Schema for deleting a K-profile."""
- slot_id: int # cali_idx - calibration index to delete
- extruder_id: int = 0
- nozzle_id: str # e.g., "HH00-0.4"
- nozzle_diameter: str # e.g., "0.4"
- filament_id: str # Bambu filament identifier
- setting_id: str | None = None # Setting ID (for X1C series)
- class KProfileNote(IgnoresNullForRequiredColumns):
- """Schema for K-profile notes (stored locally, not on printer)."""
- __orm_table__ = "kprofile_notes"
- setting_id: str # Unique identifier for the K-profile
- note: str # The note content
- class KProfileNoteResponse(BaseModel):
- """Response containing notes for K-profiles."""
- notes: dict[str, str] # mapping of setting_id -> note
|