017 fix returning all tariffs
This commit is contained in:
+23
-16
@@ -83,7 +83,7 @@ class AggregatorService:
|
||||
|
||||
provider_results = await asyncio.gather(
|
||||
*(
|
||||
self._get_provider_price(
|
||||
self._get_provider_prices(
|
||||
provider=provider,
|
||||
request=provider_request,
|
||||
cache_key=self._build_cache_key(
|
||||
@@ -98,8 +98,9 @@ class AggregatorService:
|
||||
|
||||
successful_results = [
|
||||
price
|
||||
for price in provider_results
|
||||
if isinstance(price, DeliveryPrice)
|
||||
for provider_prices in provider_results
|
||||
if isinstance(provider_prices, list)
|
||||
for price in provider_prices
|
||||
]
|
||||
provider_errors = [
|
||||
error
|
||||
@@ -142,26 +143,26 @@ class AggregatorService:
|
||||
from_attributes=True,
|
||||
)
|
||||
|
||||
async def _get_provider_price(
|
||||
async def _get_provider_prices(
|
||||
self,
|
||||
*,
|
||||
provider: DeliveryProvider,
|
||||
request: DeliveryRequest,
|
||||
cache_key: str,
|
||||
) -> DeliveryPrice:
|
||||
cached_price = await self._get_cached_price(cache_key)
|
||||
if cached_price is not None:
|
||||
return cached_price
|
||||
) -> list[DeliveryPrice]:
|
||||
cached_prices = await self._get_cached_prices(cache_key)
|
||||
if cached_prices is not None:
|
||||
return cached_prices
|
||||
|
||||
fresh_price = await provider.get_price(request)
|
||||
await self._set_cached_price(
|
||||
fresh_prices = await provider.get_prices(request)
|
||||
await self._set_cached_prices(
|
||||
cache_key,
|
||||
fresh_price,
|
||||
fresh_prices,
|
||||
ttl=getattr(provider, "cache_ttl_seconds", None),
|
||||
)
|
||||
return fresh_price
|
||||
return fresh_prices
|
||||
|
||||
async def _get_cached_price(self, cache_key: str) -> DeliveryPrice | None:
|
||||
async def _get_cached_prices(self, cache_key: str) -> list[DeliveryPrice] | None:
|
||||
if self._cache is None:
|
||||
return None
|
||||
try:
|
||||
@@ -171,14 +172,14 @@ class AggregatorService:
|
||||
if payload is None:
|
||||
return None
|
||||
try:
|
||||
return self._coerce_delivery_price(payload)
|
||||
return self._coerce_delivery_prices(payload)
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
async def _set_cached_price(
|
||||
async def _set_cached_prices(
|
||||
self,
|
||||
cache_key: str,
|
||||
payload: DeliveryPrice,
|
||||
payload: list[DeliveryPrice],
|
||||
*,
|
||||
ttl: int | None,
|
||||
) -> None:
|
||||
@@ -227,3 +228,9 @@ class AggregatorService:
|
||||
@staticmethod
|
||||
def _coerce_delivery_price(value: object) -> DeliveryPrice:
|
||||
return DeliveryPrice.model_validate(value, from_attributes=True)
|
||||
|
||||
@classmethod
|
||||
def _coerce_delivery_prices(cls, value: object) -> list[DeliveryPrice]:
|
||||
if not isinstance(value, list):
|
||||
raise TypeError("Cached delivery prices must be a list.")
|
||||
return [cls._coerce_delivery_price(item) for item in value]
|
||||
|
||||
Reference in New Issue
Block a user