41 lines
1.4 KiB
Python
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)
|