"""Market app fragment endpoints. Exposes HTML fragments at ``/internal/fragments/`` for consumption by other coop apps via the fragment client. """ from __future__ import annotations from quart import Blueprint, Response, g, render_template, request from shared.infrastructure.fragments import FRAGMENT_HEADER from shared.services.registry import services def register(): bp = Blueprint("fragments", __name__, url_prefix="/internal/fragments") _handlers: dict[str, object] = {} @bp.before_request async def _require_fragment_header(): if not request.headers.get(FRAGMENT_HEADER): return Response("", status=403) @bp.get("/") async def get_fragment(fragment_type: str): handler = _handlers.get(fragment_type) if handler is None: return Response("", status=200, content_type="text/html") html = await handler() return Response(html, status=200, content_type="text/html") # --- container-nav fragment: market links -------------------------------- async def _container_nav_handler(): container_type = request.args.get("container_type", "page") container_id = int(request.args.get("container_id", 0)) post_slug = request.args.get("post_slug", "") markets = await services.market.marketplaces_for_container( g.s, container_type, container_id, ) if not markets: return "" return await render_template( "fragments/container_nav_markets.html", markets=markets, post_slug=post_slug, ) _handlers["container-nav"] = _container_nav_handler bp._fragment_handlers = _handlers return bp