api_key.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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. printer_ids: list[int] | None = None # null = all printers
  10. expires_at: datetime | None = None
  11. class APIKeyUpdate(BaseModel):
  12. """Schema for updating an API key."""
  13. name: str | None = None
  14. can_queue: bool | None = None
  15. can_control_printer: bool | None = None
  16. can_read_status: bool | None = None
  17. printer_ids: list[int] | None = None
  18. enabled: bool | None = None
  19. expires_at: datetime | None = None
  20. class APIKeyResponse(BaseModel):
  21. """Schema for API key response (without full key)."""
  22. id: int
  23. name: str
  24. key_prefix: str # First 8 chars for identification
  25. can_queue: bool
  26. can_control_printer: bool
  27. can_read_status: bool
  28. printer_ids: list[int] | None
  29. enabled: bool
  30. last_used: datetime | None
  31. created_at: datetime
  32. expires_at: datetime | None
  33. class Config:
  34. from_attributes = True
  35. class APIKeyCreateResponse(APIKeyResponse):
  36. """Response when creating a key - includes full key (shown only once)."""
  37. key: str # Full API key, only shown on creation