diff --git a/packages/models-library/src/models_library/api_schemas_webserver/licensed_items.py b/packages/models-library/src/models_library/api_schemas_webserver/licensed_items.py index 0bc1e8b4738..45e7e20c1a7 100644 --- a/packages/models-library/src/models_library/api_schemas_webserver/licensed_items.py +++ b/packages/models-library/src/models_library/api_schemas_webserver/licensed_items.py @@ -56,7 +56,7 @@ class _ItisVipRestData(OutputSchema): description: str thumbnail: str features: FeaturesDict # NOTE: here there is a bit of coupling with domain model - doi: str + doi: str | None class _ItisVipResourceRestData(OutputSchema): @@ -92,13 +92,14 @@ def _update_json_schema_extra(schema: JsonDict) -> None: { "categoryId": "HumanWholeBody", "categoryDisplay": "Humans", - "source": VIP_DETAILS_EXAMPLE, + "source": {**VIP_DETAILS_EXAMPLE, "doi": doi}, }, ), "pricingPlanId": "15", "createdAt": "2024-12-12 09:59:26.422140", "modifiedAt": "2024-12-12 09:59:26.422140", } + for doi in ["10.1000/xyz123", None] ] } ) diff --git a/packages/models-library/src/models_library/licenses.py b/packages/models-library/src/models_library/licenses.py index 8f0cc84fed5..fd89e6b8621 100644 --- a/packages/models-library/src/models_library/licenses.py +++ b/packages/models-library/src/models_library/licenses.py @@ -110,7 +110,14 @@ def _update_json_schema_extra(schema: JsonDict) -> None: "display_name": "my best model", "licensed_resource_name": "best-model", "licensed_resource_type": f"{LicensedResourceType.VIP_MODEL}", - "licensed_resource_data": cast(JsonDict, VIP_DETAILS_EXAMPLE), + "licensed_resource_data": cast( + JsonDict, + { + "category_id": "HumanWholeBody", + "category_display": "Humans", + "source": VIP_DETAILS_EXAMPLE, + }, + ), "pricing_plan_id": "15", "created_at": "2024-12-12 09:59:26.422140", "modified_at": "2024-12-12 09:59:26.422140", diff --git a/packages/models-library/tests/test_licenses.py b/packages/models-library/tests/test_licenses.py new file mode 100644 index 00000000000..c5eaae26ff4 --- /dev/null +++ b/packages/models-library/tests/test_licenses.py @@ -0,0 +1,20 @@ +from models_library.api_schemas_webserver.licensed_items import LicensedItemRestGet +from models_library.licenses import LicensedItem + + +def test_licensed_item_from_domain_model(): + for example in LicensedItem.model_json_schema()["examples"]: + item = LicensedItem.model_validate(example) + + payload = LicensedItemRestGet.from_domain_model(item) + + assert item.display_name == payload.display_name + + # nullable doi + assert ( + payload.licensed_resource_data.source.doi + == item.licensed_resource_data["source"]["doi"] + ) + + # date is required + assert payload.licensed_resource_data.source.features["date"] diff --git a/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml b/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml index 6caffd946b6..8ed4bd58b1f 100644 --- a/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml +++ b/services/web/server/src/simcore_service_webserver/api/v0/openapi.yaml @@ -15542,7 +15542,9 @@ components: features: $ref: '#/components/schemas/FeaturesDict' doi: - type: string + anyOf: + - type: string + - type: 'null' title: Doi type: object required: