first
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
"""Vyhledávací metody: výdejní místa, našeptávač adres, routing, tisková data."""
|
||||
from typing import Any
|
||||
|
||||
from fastapi import APIRouter, Depends, Query
|
||||
|
||||
from ..cpl_client import cpl_request, relay_binary, relay_json
|
||||
from ..credentials import Credentials, get_credentials
|
||||
|
||||
router = APIRouter(tags=["lookups"])
|
||||
|
||||
|
||||
@router.get("/access-points", summary="Seznam výdejních míst (ParcelShop/ParcelBox/AlzaBox)")
|
||||
async def access_points(
|
||||
country_code: str = Query(..., alias="countryCode", description="Kód země, např. CZ."),
|
||||
limit: int = Query(default=100, ge=1, le=1000),
|
||||
offset: int = Query(default=0, ge=0),
|
||||
access_point_code: str | None = Query(default=None, alias="accessPointCode"),
|
||||
zip_code: str | None = Query(default=None, alias="zipCode"),
|
||||
city: str | None = Query(default=None),
|
||||
access_point_types: list[str] | None = Query(
|
||||
default=None,
|
||||
alias="accessPointTypes",
|
||||
description="ParcelShop, ParcelBox, AlzaBox.",
|
||||
),
|
||||
latitude: float | None = Query(default=None),
|
||||
longitude: float | None = Query(default=None),
|
||||
radius: float | None = Query(default=None, description="Poloměr hledání v km."),
|
||||
pickup_enabled: bool | None = Query(default=None, alias="pickupEnabled"),
|
||||
active_card_payment: bool | None = Query(default=None, alias="activeCardPayment"),
|
||||
active_cash_payment: bool | None = Query(default=None, alias="activeCashPayment"),
|
||||
sizes: list[str] | None = Query(default=None, description="S, M, L, XL."),
|
||||
creds: Credentials = Depends(get_credentials),
|
||||
):
|
||||
"""`GET accessPoint` — výdejní místa vč. otevírací doby, GPS a kapacit."""
|
||||
params: dict[str, Any] = {
|
||||
"CountryCode": country_code,
|
||||
"Limit": limit,
|
||||
"Offset": offset,
|
||||
}
|
||||
if access_point_code:
|
||||
params["AccessPointCode"] = access_point_code
|
||||
if zip_code:
|
||||
params["ZipCode"] = zip_code
|
||||
if city:
|
||||
params["City"] = city
|
||||
if access_point_types:
|
||||
params["AccessPointTypes"] = access_point_types
|
||||
if latitude is not None:
|
||||
params["Latitude"] = latitude
|
||||
if longitude is not None:
|
||||
params["Longitude"] = longitude
|
||||
if radius is not None:
|
||||
params["Radius"] = radius
|
||||
if pickup_enabled is not None:
|
||||
params["PickupEnabled"] = pickup_enabled
|
||||
if active_card_payment is not None:
|
||||
params["ActiveCardPayment"] = active_card_payment
|
||||
if active_cash_payment is not None:
|
||||
params["ActiveCashPayment"] = active_cash_payment
|
||||
if sizes:
|
||||
params["Sizes"] = sizes
|
||||
resp = await cpl_request(creds, "GET", "/accessPoint", params=params)
|
||||
return relay_json(resp)
|
||||
|
||||
|
||||
@router.get("/address-whisper", summary="Našeptávač adres")
|
||||
async def address_whisper(
|
||||
street: str | None = Query(default=None),
|
||||
zip_code: str | None = Query(default=None, alias="zipCode"),
|
||||
city: str | None = Query(default=None),
|
||||
called_from: str | None = Query(
|
||||
default=None,
|
||||
alias="calledFrom",
|
||||
description="Které pole vyvolalo dotaz: Street, ZipCode nebo City.",
|
||||
),
|
||||
creds: Credentials = Depends(get_credentials),
|
||||
):
|
||||
"""`GET addressWhisper` — validace/doplnění adresy (vrací i pole `valid`)."""
|
||||
params: dict[str, Any] = {}
|
||||
if street:
|
||||
params["Street"] = street
|
||||
if zip_code:
|
||||
params["ZipCode"] = zip_code
|
||||
if city:
|
||||
params["City"] = city
|
||||
if called_from:
|
||||
params["CalledFrom"] = called_from
|
||||
resp = await cpl_request(creds, "GET", "/addressWhisper", params=params or None)
|
||||
return relay_json(resp)
|
||||
|
||||
|
||||
@router.get("/routing", summary="Směrovací informace pro etiketu")
|
||||
async def routing(
|
||||
country: str = Query(..., description="Kód země (povinný), např. CZ."),
|
||||
street: str | None = Query(default=None),
|
||||
city: str | None = Query(default=None),
|
||||
zip_code: str | None = Query(default=None, alias="zipCode"),
|
||||
product_type: str | None = Query(default=None, alias="productType"),
|
||||
parcel_shop_code: str | None = Query(default=None, alias="parcelShopCode"),
|
||||
creds: Credentials = Depends(get_credentials),
|
||||
):
|
||||
"""`GET routing` — kód trasy, depo a pozice v depu pro danou adresu."""
|
||||
params: dict[str, Any] = {"Country": country}
|
||||
if street:
|
||||
params["Street"] = street
|
||||
if city:
|
||||
params["City"] = city
|
||||
if zip_code:
|
||||
params["ZipCode"] = zip_code
|
||||
if product_type:
|
||||
params["ProductType"] = product_type
|
||||
if parcel_shop_code:
|
||||
params["ParcelShopCode"] = parcel_shop_code
|
||||
resp = await cpl_request(creds, "GET", "/routing", params=params)
|
||||
return relay_json(resp)
|
||||
|
||||
|
||||
@router.get("/data/{data_guid}", summary="Tisková data etikety (binární)")
|
||||
async def get_data(
|
||||
data_guid: str,
|
||||
creds: Credentials = Depends(get_credentials),
|
||||
):
|
||||
"""`GET data/{dataGuid}` — stažení jednotlivé etikety přes labelUrl guid
|
||||
(používá se hlavně po změně formátu Pdf -> Zpl)."""
|
||||
resp = await cpl_request(creds, "GET", f"/data/{data_guid}")
|
||||
return relay_binary(resp)
|
||||
Reference in New Issue
Block a user