Skip to content

Commit 8b914e6

Browse files
committed
🎨 Add version_display field to Solver schema for user-friendly release names
1 parent b422df3 commit 8b914e6

File tree

2 files changed

+36
-21
lines changed

2 files changed

+36
-21
lines changed

services/api-server/openapi.json

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10465,6 +10465,18 @@
1046510465
"type": "string",
1046610466
"title": "Maintainer",
1046710467
"description": "Maintainer of the solver"
10468+
},
10469+
"version_display": {
10470+
"anyOf": [
10471+
{
10472+
"type": "string"
10473+
},
10474+
{
10475+
"type": "null"
10476+
}
10477+
],
10478+
"title": "Version Display",
10479+
"description": "A user-friendly or marketing name for the release."
1046810480
}
1046910481
},
1047010482
"type": "object",
@@ -10483,7 +10495,8 @@
1048310495
"maintainer": "[email protected]",
1048410496
"title": "iSolve",
1048510497
"url": "https://api.osparc.io/v0/solvers/simcore%2Fservices%2Fcomp%2Fisolve/releases/2.1.1",
10486-
"version": "2.1.1"
10498+
"version": "2.1.1",
10499+
"version_display": "2.1.1-2023-10-01"
1048710500
}
1048810501
},
1048910502
"SolverFunction": {

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

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Annotated, Any, Literal
1+
from typing import Annotated, Any, Literal, Self
22

33
from models_library.api_schemas_catalog.services import LatestServiceGet, ServiceGetV2
44
from models_library.basic_regex import PUBLIC_VARIABLE_NAME_RE
@@ -39,14 +39,20 @@
3939
class Solver(BaseService):
4040
"""A released solver with a specific version"""
4141

42-
maintainer: str = Field(..., description="Maintainer of the solver")
42+
maintainer: Annotated[str, Field(description="Maintainer of the solver")]
43+
44+
version_display: Annotated[
45+
str | None,
46+
Field(description="A user-friendly or marketing name for the release."),
47+
] = None
4348

4449
model_config = ConfigDict(
4550
extra="ignore",
4651
json_schema_extra={
4752
"example": {
4853
"id": "simcore/services/comp/isolve",
4954
"version": "2.1.1",
55+
"version_display": "2.1.1-2023-10-01",
5056
"title": "iSolve",
5157
"description": "EM solver",
5258
"maintainer": "[email protected]",
@@ -56,31 +62,27 @@ class Solver(BaseService):
5662
)
5763

5864
@classmethod
59-
def create_from_image(cls, image_meta: ServiceMetaDataPublished) -> "Solver":
60-
data = image_meta.model_dump(
61-
include={"name", "key", "version", "description", "contact"},
62-
)
65+
def create_from_image(cls, image_meta: ServiceMetaDataPublished) -> Self:
6366
return cls(
64-
id=data.pop("key"),
65-
version=data.pop("version"),
66-
title=data.pop("name"),
67-
maintainer=data.pop("contact"),
67+
id=image_meta.key,
68+
version=image_meta.version,
69+
title=image_meta.name,
70+
description=image_meta.description,
71+
maintainer=image_meta.contact,
72+
version_display=image_meta.version_display,
6873
url=None,
69-
**data,
7074
)
7175

7276
@classmethod
73-
def create_from_service(cls, service: ServiceGetV2 | LatestServiceGet) -> "Solver":
74-
data = service.model_dump(
75-
include={"name", "key", "version", "description", "contact"},
76-
)
77+
def create_from_service(cls, service: ServiceGetV2 | LatestServiceGet) -> Self:
7778
return cls(
78-
id=data.pop("key"),
79-
version=data.pop("version"),
80-
title=data.pop("name"),
79+
id=service.key,
80+
version=service.version,
81+
title=service.name,
82+
description=service.description,
83+
maintainer=service.contact or "UNDEFINED",
84+
version_display=service.version_display,
8185
url=None,
82-
maintainer=data.pop("contact"),
83-
**data,
8486
)
8587

8688
@classmethod

0 commit comments

Comments
 (0)