Files
pplcplapi/app/routers/proxy.py
T
JiriUhlir 0e05fef335 first
2026-07-16 11:56:15 +02:00

41 lines
1.4 KiB
Python

"""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)