fix cdek client
This commit is contained in:
@@ -14,3 +14,7 @@ class DeliveryProvider(ABC):
|
||||
"""Fetch one quote from an external provider."""
|
||||
|
||||
raise NotImplementedError
|
||||
|
||||
|
||||
class ProviderRequestError(RuntimeError):
|
||||
"""Raised when a provider rejects input request data."""
|
||||
|
||||
@@ -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.")
|
||||
|
||||
Reference in New Issue
Block a user