api_key.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from datetime import datetime
  2. from pydantic import BaseModel
  3. class APIKeyCreate(BaseModel):
  4. """Schema for creating a new API key."""
  5. name: str
  6. can_queue: bool = True
  7. can_control_printer: bool = False
  8. can_read_status: bool = True
  9. can_access_cloud: bool = False # Read /cloud/* on the creator's behalf — default off (#1182)
  10. can_update_energy_cost: bool = False # POST /settings/electricity-price only (#1356)
  11. printer_ids: list[int] | None = None # null = all printers
  12. expires_at: datetime | None = None
  13. class APIKeyUpdate(BaseModel):
  14. """Schema for updating an API key."""
  15. name: str | None = None
  16. can_queue: bool | None = None
  17. can_control_printer: bool | None = None
  18. can_read_status: bool | None = None
  19. can_access_cloud: bool | None = None
  20. can_update_energy_cost: bool | None = None
  21. printer_ids: list[int] | None = None
  22. enabled: bool | None = None
  23. expires_at: datetime | None = None
  24. class APIKeyResponse(BaseModel):
  25. """Schema for API key response (without full key)."""
  26. id: int
  27. name: str
  28. key_prefix: str # First 8 chars for identification
  29. user_id: int | None # Owner — NULL on legacy keys created before per-user ownership (#1182)
  30. can_queue: bool
  31. can_control_printer: bool
  32. can_read_status: bool
  33. can_access_cloud: bool
  34. can_update_energy_cost: bool
  35. printer_ids: list[int] | None
  36. enabled: bool
  37. last_used: datetime | None
  38. created_at: datetime
  39. expires_at: datetime | None
  40. class Config:
  41. from_attributes = True
  42. class APIKeyCreateResponse(APIKeyResponse):
  43. """Response when creating a key - includes full key (shown only once)."""
  44. key: str # Full API key, only shown on creation