Skip to content

Commit 66f96b2

Browse files
committed
ensure api servers price model is independent
1 parent ad1c3e2 commit 66f96b2

File tree

3 files changed

+22
-8
lines changed

3 files changed

+22
-8
lines changed

services/api-server/src/simcore_service_api_server/api/routes/credits.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from fastapi import APIRouter, Depends, status
44

5-
from ...models.schemas.backwards_compatibility import GetCreditPriceApiServer
5+
from ...models.schemas.backwards_compatibility import GetCreditPrice
66
from ..dependencies.webserver import AuthSession, get_webserver_session
77
from ._constants import FMSG_CHANGELOG_NEW_IN_VERSION
88

@@ -12,7 +12,7 @@
1212
@router.get(
1313
"/price",
1414
status_code=status.HTTP_200_OK,
15-
response_model=GetCreditPriceApiServer,
15+
response_model=GetCreditPrice,
1616
description=FMSG_CHANGELOG_NEW_IN_VERSION.format("0.6.0"),
1717
)
1818
async def get_credits_price(

services/api-server/src/simcore_service_api_server/models/schemas/backwards_compatibility.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@
22

33
from typing import Annotated
44

5-
from models_library.api_schemas_webserver.product import GetCreditPrice
5+
from models_library.api_schemas_webserver._base import OutputSchema
6+
from models_library.api_schemas_webserver.product import (
7+
GetCreditPrice as _GetCreditPrice,
8+
)
69
from models_library.basic_types import NonNegativeDecimal
7-
from pydantic import Field, NonNegativeFloat, PlainSerializer
10+
from pydantic import Field, NonNegativeFloat, NonNegativeInt, PlainSerializer
811

912

10-
class GetCreditPriceApiServer(GetCreditPrice):
13+
class GetCreditPrice(OutputSchema):
14+
product_name: str
1115
usd_per_credit: Annotated[
1216
NonNegativeDecimal,
1317
PlainSerializer(float, return_type=NonNegativeFloat, when_used="json"),
@@ -16,3 +20,13 @@ class GetCreditPriceApiServer(GetCreditPrice):
1620
description="Price of a credit in USD. "
1721
"If None, then this product's price is UNDEFINED",
1822
)
23+
min_payment_amount_usd: NonNegativeInt | None = Field(
24+
...,
25+
description="Minimum amount (included) in USD that can be paid for this product"
26+
"Can be None if this product's price is UNDEFINED",
27+
)
28+
29+
30+
assert set(GetCreditPrice.model_fields.keys()) == set(
31+
_GetCreditPrice.model_fields.keys()
32+
)

services/api-server/src/simcore_service_api_server/services/webserver.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
WalletNotFoundError,
6565
)
6666
from simcore_service_api_server.models.schemas.backwards_compatibility import (
67-
GetCreditPriceApiServer,
67+
GetCreditPrice,
6868
)
6969
from tenacity import TryAgain
7070
from tenacity.asyncio import AsyncRetrying
@@ -575,13 +575,13 @@ async def get_project_wallet(self, *, project_id: ProjectID) -> WalletGet:
575575
# PRODUCTS -------------------------------------------------
576576

577577
@_exception_mapper({status.HTTP_404_NOT_FOUND: ProductPriceNotFoundError})
578-
async def get_product_price(self) -> GetCreditPriceApiServer:
578+
async def get_product_price(self) -> GetCreditPrice:
579579
response = await self.client.get(
580580
"/credits-price",
581581
cookies=self.session_cookies,
582582
)
583583
response.raise_for_status()
584-
data = Envelope[GetCreditPriceApiServer].model_validate_json(response.text).data
584+
data = Envelope[GetCreditPrice].model_validate_json(response.text).data
585585
assert data is not None # nosec
586586
return data
587587

0 commit comments

Comments
 (0)