library_trash.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. """Schemas for the library trash bin + bulk purge (#1008)."""
  2. from __future__ import annotations
  3. from datetime import datetime
  4. from pydantic import BaseModel, Field
  5. class PurgePreviewRequest(BaseModel):
  6. older_than_days: int = Field(ge=1, le=3650, description="Age threshold in days.")
  7. include_never_printed: bool = True
  8. class PurgePreviewResponse(BaseModel):
  9. count: int
  10. total_bytes: int
  11. sample_filenames: list[str]
  12. older_than_days: int
  13. include_never_printed: bool
  14. class PurgeRequest(BaseModel):
  15. older_than_days: int = Field(ge=1, le=3650)
  16. include_never_printed: bool = True
  17. class PurgeResponse(BaseModel):
  18. moved_to_trash: int
  19. class TrashFile(BaseModel):
  20. id: int
  21. filename: str
  22. file_size: int
  23. thumbnail_path: str | None = None
  24. folder_id: int | None = None
  25. folder_name: str | None = None
  26. created_by_id: int | None = None
  27. created_by_username: str | None = None
  28. deleted_at: datetime
  29. auto_purge_at: datetime
  30. class TrashListResponse(BaseModel):
  31. items: list[TrashFile]
  32. total: int
  33. retention_days: int
  34. class TrashSettings(BaseModel):
  35. retention_days: int = Field(ge=1, le=365)
  36. auto_purge_enabled: bool = False
  37. auto_purge_days: int = Field(default=90, ge=7, le=3650)
  38. auto_purge_include_never_printed: bool = True
  39. class EmptyTrashResponse(BaseModel):
  40. deleted: int