feat: filter public media by role
This commit is contained in:
@@ -23,7 +23,7 @@ def _public_role_allowed(entity_type: str | None, role: object) -> bool:
|
||||
return False
|
||||
|
||||
|
||||
def published_assets(entity_type: str | None = None) -> list[dict]:
|
||||
def published_assets(entity_type: str | None = None, media_role: str | None = None) -> list[dict]:
|
||||
manifest = json.loads((MEDIA_ROOT / "manifest.json").read_text(encoding="utf-8"))
|
||||
result = []
|
||||
for item in manifest.get("assets", []):
|
||||
@@ -31,6 +31,8 @@ def published_assets(entity_type: str | None = None) -> list[dict]:
|
||||
continue
|
||||
if entity_type and item.get("entity_type") != entity_type:
|
||||
continue
|
||||
if media_role and item.get("media_role") != media_role:
|
||||
continue
|
||||
if not _public_role_allowed(item.get("entity_type"), item.get("media_role")):
|
||||
continue
|
||||
source_page = str(item.get("source_page") or "")
|
||||
|
||||
@@ -1,15 +1,22 @@
|
||||
from fastapi import APIRouter, HTTPException, Query
|
||||
from fastapi.responses import FileResponse
|
||||
|
||||
from ..media_catalog import published_assets, published_file
|
||||
from ..media_catalog import KNOWN_MEDIA_ROLES, published_assets, published_file
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get("/api/v1/media/catalog")
|
||||
def media_catalog(entity_type: str | None = Query(None, pattern="^(fish|waterbody|tackle|reference)$")) -> list[dict]:
|
||||
return published_assets(entity_type)
|
||||
def media_catalog(
|
||||
entity_type: str | None = Query(None, pattern="^(fish|waterbody|tackle|reference)$"),
|
||||
media_role: str | None = Query(None, pattern="^(waterbody_cover|waterbody_map|waterbody_depth_map|waterbody_screenshot|tackle_card|tackle_detail|rig_diagram|tackle_screenshot)$"),
|
||||
) -> list[dict]:
|
||||
if media_role and entity_type not in {"waterbody", "tackle"}:
|
||||
raise HTTPException(status_code=422, detail="media_role requires waterbody or tackle entity_type")
|
||||
if media_role and media_role not in KNOWN_MEDIA_ROLES:
|
||||
raise HTTPException(status_code=422, detail="unknown media role")
|
||||
return published_assets(entity_type, media_role)
|
||||
|
||||
|
||||
@router.get("/api/v1/media/assets/{digest}", response_class=FileResponse)
|
||||
|
||||
Reference in New Issue
Block a user