From 983da9e5b144634874ddc252b479f6293b6b4333 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Tue, 26 May 2026 10:36:38 -0400 Subject: [PATCH] =?UTF-8?q?feat(thumb-backfill):=20/api/thumbnails/backfil?= =?UTF-8?q?l=20endpoint=20=E2=80=94=20POST=20=E2=86=92=20202=20+=20celery?= =?UTF-8?q?=5Ftask=5Fid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 (1M context) --- backend/app/api/__init__.py | 2 ++ backend/app/api/thumbnails.py | 13 +++++++++++++ tests/test_api_thumbnails.py | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 backend/app/api/thumbnails.py create mode 100644 tests/test_api_thumbnails.py diff --git a/backend/app/api/__init__.py b/backend/app/api/__init__.py index 4a88c1e..b8dc7c4 100644 --- a/backend/app/api/__init__.py +++ b/backend/app/api/__init__.py @@ -38,6 +38,7 @@ def all_blueprints() -> list[Blueprint]: from .system_activity import system_activity_bp from .system_backup import system_backup_bp from .tags import tags_bp + from .thumbnails import thumbnails_bp return [ api_bp, attachments_bp, @@ -58,6 +59,7 @@ def all_blueprints() -> list[Blueprint]: allowlist_bp, aliases_bp, ml_admin_bp, + thumbnails_bp, sources_bp, platforms_bp, posts_bp, diff --git a/backend/app/api/thumbnails.py b/backend/app/api/thumbnails.py new file mode 100644 index 0000000..eff1491 --- /dev/null +++ b/backend/app/api/thumbnails.py @@ -0,0 +1,13 @@ +"""Thumbnail admin API: backfill trigger.""" + +from quart import Blueprint, jsonify + +thumbnails_bp = Blueprint("thumbnails", __name__, url_prefix="/api/thumbnails") + + +@thumbnails_bp.route("/backfill", methods=["POST"]) +async def trigger_backfill(): + from ..tasks.thumbnail import backfill_thumbnails + + r = backfill_thumbnails.delay() + return jsonify({"celery_task_id": r.id}), 202 diff --git a/tests/test_api_thumbnails.py b/tests/test_api_thumbnails.py new file mode 100644 index 0000000..b9d07a4 --- /dev/null +++ b/tests/test_api_thumbnails.py @@ -0,0 +1,32 @@ +import pytest + +from backend.app import create_app +from backend.app.celery_app import celery + +pytestmark = pytest.mark.integration + + +@pytest.fixture(autouse=True) +def eager(): + celery.conf.task_always_eager = True + yield + celery.conf.task_always_eager = False + + +@pytest.fixture +async def app(): + return create_app() + + +@pytest.fixture +async def client(app): + async with app.test_client() as c: + yield c + + +@pytest.mark.asyncio +async def test_trigger_thumbnail_backfill(client): + r = await client.post("/api/thumbnails/backfill") + assert r.status_code == 202 + body = await r.get_json() + assert "celery_task_id" in body