first
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
"""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)
|
||||
Reference in New Issue
Block a user