fix cdek client

This commit is contained in:
Раис Юсупалиев
2026-03-08 23:35:04 +03:00
parent f799f2ba03
commit 2d68aff34d
7 changed files with 105 additions and 8 deletions
+20 -2
View File
@@ -1,23 +1,38 @@
"""CDEK HTTP client and provider adapter."""
import asyncio
import sys
from collections.abc import Awaitable, Callable
from typing import Any
import httpx
from app.adapters.delivery_providers.base import DeliveryProvider
from app.adapters.delivery_providers.base import DeliveryProvider, ProviderRequestError
from app.adapters.delivery_providers.cdek.auth import CDEKAuthClient
from app.adapters.delivery_providers.cdek.mapper import map_cdek_response
from app.config import AdapterConfig
from app.schemas.request import DeliveryRequest
from app.schemas.response import DeliveryPrice
import logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
handlers=[logging.StreamHandler(sys.stdout)] # важно: stdout, не stderr
)
log = logging.getLogger(__name__)
log.info("test")
class CDEKClientError(RuntimeError):
"""Raised when CDEK tariff request fails."""
class CDEKRequestError(CDEKClientError, ProviderRequestError):
"""Raised when CDEK rejects request data as invalid."""
class CDEKClient:
def __init__(
self,
@@ -133,6 +148,7 @@ class CDEKClient:
raise CDEKClientError(
f"CDEK city lookup failed with status {response.status_code}."
)
log.info(response.json())
try:
response.raise_for_status()
body = response.json()
@@ -143,7 +159,9 @@ class CDEKClient:
raise CDEKClientError("CDEK city lookup failed unexpectedly.")
if not isinstance(body, list) or not body:
raise CDEKClientError(f"CDEK city lookup returned no matches for '{city}'.")
raise CDEKRequestError(
f"CDEK city lookup returned no matches for '{city}'."
)
first_item = body[0]
if not isinstance(first_item, dict):
raise CDEKClientError("CDEK city lookup response entry must be an object.")