feat(upload): adaptive 429 backoff, full Gotenberg file types, directory traversal

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-02-26 23:24:26 +00:00
parent 35d2ed05e9
commit a05690bd5f
10 changed files with 764 additions and 369 deletions
+6 -24
View File
@@ -17,26 +17,6 @@ router = APIRouter()
_FILE_NOT_FOUND = "File not found"
def _get_upload_concurrency() -> int:
"""Return the configured upload concurrency (falls back to default on error)."""
try:
from app.config import settings
return settings.upload_concurrency
except Exception:
return 3
def _get_upload_queue_delay_ms() -> int:
"""Return the configured upload queue delay in ms (falls back to default on error)."""
try:
from app.config import settings
return settings.upload_queue_delay_ms
except Exception:
return 500
@router.get("/files")
@require_login
def files_page(
@@ -53,6 +33,8 @@ def files_page(
"""
Return the 'files.html' template with server-side pagination, sorting, and filtering
"""
from app.config import settings
try:
# Import the model here to avoid circular imports
from sqlalchemy import asc, desc
@@ -131,8 +113,8 @@ def files_page(
"mime_type": mime_type or "",
"status": status or "",
"mime_types": mime_types,
"upload_concurrency": _get_upload_concurrency(),
"upload_queue_delay_ms": _get_upload_queue_delay_ms(),
"upload_concurrency": settings.upload_concurrency,
"upload_queue_delay_ms": settings.upload_queue_delay_ms,
},
)
except Exception as e:
@@ -146,8 +128,8 @@ def files_page(
"files": [],
"pagination": {"page": 1, "per_page": per_page, "total_items": 0, "total_pages": 0},
"error": str(e),
"upload_concurrency": _get_upload_concurrency(),
"upload_queue_delay_ms": _get_upload_queue_delay_ms(),
"upload_concurrency": settings.upload_concurrency,
"upload_queue_delay_ms": settings.upload_queue_delay_ms,
},
)