"""Base interface for delivery providers.""" from abc import ABC, abstractmethod from app.schemas.request import DeliveryCalculationRequest from app.schemas.response import DeliveryPrice class DeliveryProvider(ABC): name: str @abstractmethod async def get_prices( self, request: DeliveryCalculationRequest ) -> list[DeliveryPrice]: """Fetch provider tariffs for a delivery request.""" raise NotImplementedError class ProviderClientError(RuntimeError): """Raised when a provider call fails for temporary or provider-side reasons.""" class ProviderRequestError(RuntimeError): """Raised when a provider rejects input request data."""