Skip to content

Commit 9285a98

Browse files
committed
@odeimaiz: returns id
1 parent a8a8046 commit 9285a98

File tree

4 files changed

+49
-7
lines changed

4 files changed

+49
-7
lines changed

packages/models-library/src/models_library/api_schemas_webserver/licensed_items.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class LicensedItemRpcGetPage(NamedTuple):
5353

5454

5555
class _ItisVipRestData(OutputSchema):
56+
id: int
5657
description: str
5758
thumbnail: str
5859
features: FeaturesDict # NOTE: here there is a bit of coupling with domain model
@@ -85,7 +86,6 @@ def _update_json_schema_extra(schema: JsonDict) -> None:
8586
{
8687
"licensedItemId": "0362b88b-91f8-4b41-867c-35544ad1f7a1",
8788
"displayName": "my best model",
88-
"licensedResourceName": "best-model",
8989
"licensedResourceType": f"{LicensedResourceType.VIP_MODEL}",
9090
"licensedResourceData": cast(
9191
JsonDict,

packages/models-library/src/models_library/licenses.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class FeaturesDict(TypedDict):
5353
"doi": "10.1000/xyz123",
5454
"license_key": "ABC123XYZ",
5555
"license_version": "1.0",
56-
"protection": "Encrypted",
56+
"protection": "Code",
5757
"available_from_url": "https://example.com/download",
5858
"additional_field": "trimmed if rest",
5959
}
Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,35 @@
11
from models_library.api_schemas_webserver.licensed_items import LicensedItemRestGet
22
from models_library.licenses import LicensedItem
3+
from pydantic import ConfigDict
34

45

56
def test_licensed_item_from_domain_model():
67
for example in LicensedItem.model_json_schema()["examples"]:
78
item = LicensedItem.model_validate(example)
89

9-
payload = LicensedItemRestGet.from_domain_model(item)
10+
got = LicensedItemRestGet.from_domain_model(item)
1011

11-
assert item.display_name == payload.display_name
12+
assert item.display_name == got.display_name
1213

1314
# nullable doi
1415
assert (
15-
payload.licensed_resource_data.source.doi
16+
got.licensed_resource_data.source.doi
1617
== item.licensed_resource_data["source"]["doi"]
1718
)
1819

1920
# date is required
20-
assert payload.licensed_resource_data.source.features["date"]
21+
assert got.licensed_resource_data.source.features["date"]
22+
23+
#
24+
assert (
25+
got.licensed_resource_data.source.id
26+
== item.licensed_resource_data["source"]["id"]
27+
)
28+
29+
30+
def test_strict_check_of_examples():
31+
class TestLicensedItemRestGet(LicensedItemRestGet):
32+
model_config = ConfigDict(extra="forbid")
33+
34+
for example in LicensedItemRestGet.model_json_schema()["examples"]:
35+
TestLicensedItemRestGet.model_validate(example)

services/web/server/src/simcore_service_webserver/licenses/_itis_vip_models.py

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@
22
from typing import Annotated, Any, Literal, NamedTuple, TypeAlias
33

44
from models_library.basic_types import IDStr
5-
from models_library.licenses import FeaturesDict
5+
from models_library.licenses import VIP_DETAILS_EXAMPLE, FeaturesDict
66
from pydantic import (
77
BaseModel,
88
BeforeValidator,
9+
ConfigDict,
910
Field,
1011
HttpUrl,
1112
StringConstraints,
1213
TypeAdapter,
1314
)
15+
from pydantic.config import JsonDict
1416

1517
_max_str_adapter: TypeAdapter[str] = TypeAdapter(
1618
Annotated[str, StringConstraints(strip_whitespace=True, max_length=1_000)]
@@ -53,6 +55,31 @@ class ItisVipData(BaseModel):
5355
protection: Annotated[Literal["Code", "PayPal"], Field(alias="Protection")]
5456
available_from_url: Annotated[HttpUrl | None, Field(alias="AvailableFromURL")]
5557

58+
@staticmethod
59+
def _update_json_schema_extra(schema: JsonDict) -> None:
60+
schema.update(
61+
{
62+
"examples": [
63+
# complete
64+
VIP_DETAILS_EXAMPLE,
65+
# minimal
66+
{
67+
"id": 1,
68+
"description": "A detailed description of the VIP model",
69+
"thumbnail": "https://example.com/thumbnail.jpg",
70+
"features": {"date": "2013-02-01"},
71+
"doi": "null",
72+
"license_key": "ABC123XYZ",
73+
"license_version": "1.0",
74+
"protection": "Code",
75+
"available_from_url": "null",
76+
},
77+
]
78+
}
79+
)
80+
81+
model_config = ConfigDict(json_schema_extra=_update_json_schema_extra)
82+
5683

5784
class ItisVipResourceData(BaseModel):
5885
category_id: IDStr

0 commit comments

Comments
 (0)