"""Generická proxy na libovolnou metodu PPL CPL API. Pokrývá i endpointy, které nemají vlastní typovanou obálku, a budoucí novinky API bez nutnosti upravovat tuto službu. Služba doplní OAuth token, dodrží rozestup requestů a odpověď PPL vrátí 1:1 (status, tělo, content-type, Location a X-Paging-* hlavičky). """ from fastapi import APIRouter, Depends, Request from ..cpl_client import cpl_request, relay_raw from ..credentials import Credentials, get_credentials router = APIRouter(tags=["proxy"]) @router.api_route( "/proxy/{cpl_path:path}", methods=["GET", "POST", "PUT", "PATCH", "DELETE"], summary="Generické volání libovolné metody CPL API", ) async def proxy( cpl_path: str, request: Request, creds: Credentials = Depends(get_credentials), ): """Příklad: `GET /proxy/codelist/product?Limit=10&Offset=0` zavolá `GET {base}/codelist/product?Limit=10&Offset=0` s doplněným Bearer tokenem. Tělo requestu (JSON i jiné) se předává beze změny; transliterace diakritiky se zde NEaplikuje — za obsah odpovídá volající.""" body = await request.body() resp = await cpl_request( creds, request.method, "/" + cpl_path.lstrip("/"), params=list(request.query_params.multi_items()) or None, content=body if body else None, content_type=request.headers.get("content-type") if body else None, ) return relay_raw(resp)