127 lines
4.9 KiB
Python
127 lines
4.9 KiB
Python
"""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)
|