Skip to content

Commit 7550a9c

Browse files
authored
✨ webapi: new descriptionUI flag to render service a single page UI (#6290)
1 parent 0297b24 commit 7550a9c

File tree

17 files changed

+94
-4
lines changed

17 files changed

+94
-4
lines changed

packages/models-library/src/models_library/api_schemas_catalog/services.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ class Config:
122122
"name": "sleeper",
123123
"thumbnail": None,
124124
"description": "A service which awaits for time to pass, two times.",
125+
"description_ui": True,
125126
"classifiers": [],
126127
"quality": {},
127128
"accessRights": {"1": {"execute": True, "write": False}},
@@ -221,6 +222,8 @@ class ServiceGetV2(BaseModel):
221222
thumbnail: HttpUrl | None = None
222223
description: str
223224

225+
description_ui: bool = False
226+
224227
version_display: str | None = None
225228

226229
service_type: ServiceType = Field(default=..., alias="type")
@@ -317,6 +320,7 @@ class ServiceUpdateV2(BaseModel):
317320
thumbnail: HttpUrl | None = None
318321

319322
description: str | None = None
323+
description_ui: bool = False
320324
version_display: str | None = None
321325

322326
deprecated: datetime | None = None

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ class ServiceBaseDisplay(BaseModel):
4141
"The mother of all nodes, makes your numbers shine!",
4242
],
4343
)
44+
description_ui: bool = Field(
45+
default=False,
46+
description="A flag to enable the `description` to be presented as a single web page (=true) or in another structured format (default=false).",
47+
)
48+
4449
version_display: str | None = Field(
4550
None,
4651
description="A user-friendly or marketing name for the release."

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class ServiceMetaDataEditable(ServiceBaseDisplay):
2121
name: str | None # type: ignore[assignment]
2222
thumbnail: HttpUrl | None
2323
description: str | None # type: ignore[assignment]
24+
description_ui: bool = False
2425
version_display: str | None = None
2526

2627
# Below fields only in the database ----

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ class Config:
174174
{
175175
**_EXAMPLE_W_BOOT_OPTIONS_AND_NO_DISPLAY_ORDER,
176176
"version_display": "Matterhorn Release",
177+
"description_ui": True,
177178
"release_date": "2024-05-31T13:45:30",
178179
},
179180
]
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
"""new description_ui column
2+
3+
Revision ID: 926c3eb2254e
4+
Revises: feca36c8e18f
5+
Create Date: 2024-09-02 21:25:06.042365+00:00
6+
7+
"""
8+
import sqlalchemy as sa
9+
from alembic import op
10+
11+
# revision identifiers, used by Alembic.
12+
revision = "926c3eb2254e"
13+
down_revision = "feca36c8e18f"
14+
branch_labels = None
15+
depends_on = None
16+
17+
18+
def upgrade():
19+
# ### commands auto generated by Alembic - please adjust! ###
20+
op.add_column(
21+
"services_meta_data",
22+
sa.Column(
23+
"description_ui",
24+
sa.Boolean(),
25+
server_default=sa.text("false"),
26+
nullable=False,
27+
),
28+
)
29+
# ### end Alembic commands ###
30+
31+
32+
def downgrade():
33+
# ### commands auto generated by Alembic - please adjust! ###
34+
op.drop_column("services_meta_data", "description_ui")
35+
# ### end Alembic commands ###

packages/postgres-database/src/simcore_postgres_database/models/services.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import sqlalchemy as sa
22
from sqlalchemy.dialects.postgresql import ARRAY, JSONB
3+
from sqlalchemy.sql import expression
34

45
from .base import metadata
56

@@ -49,7 +50,16 @@
4950
"description",
5051
sa.String,
5152
nullable=False,
52-
doc="Markdown-compatible description (editable)",
53+
doc="Markdown-compatible description (editable). SEE `description_ui`",
54+
),
55+
sa.Column(
56+
"description_ui",
57+
sa.Boolean,
58+
nullable=False,
59+
server_default=expression.false(),
60+
doc="A flag that determines how the `description` column is rendered in the UI (editable)"
61+
"Specifically, it indicates whether the `description` should be presented as a single web page (=true) or in another structured format (default=false)."
62+
"This field is primarily used by the front-end of the application to decide on the presentation style of the service's metadata.",
5363
),
5464
sa.Column(
5565
"thumbnail",

packages/pytest-simcore/src/pytest_simcore/helpers/faker_factories.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,7 @@ def random_service_meta_data(
386386
"name": f"the-{_name}-service", # display
387387
"description": fake.sentence(),
388388
# optional
389+
"description_ui": fake.pybool(),
389390
"owner": owner_primary_gid,
390391
"thumbnail": _pick_from([fake.image_url(), None]), # nullable
391392
"version_display": _pick_from([f"v{_version}", None]), # nullable

services/catalog/openapi.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2070,6 +2070,12 @@
20702070
"title": "Description",
20712071
"description": "human readable description of the purpose of the node"
20722072
},
2073+
"description_ui": {
2074+
"type": "boolean",
2075+
"title": "Description Ui",
2076+
"description": "A flag to enable the `description` to be presented as a single web page (=true) or in another structured format (default=false).",
2077+
"default": false
2078+
},
20732079
"version_display": {
20742080
"type": "string",
20752081
"title": "Version Display",
@@ -2550,6 +2556,11 @@
25502556
"type": "string",
25512557
"title": "Description"
25522558
},
2559+
"description_ui": {
2560+
"type": "boolean",
2561+
"title": "Description Ui",
2562+
"default": false
2563+
},
25532564
"version_display": {
25542565
"type": "string",
25552566
"title": "Version Display"

services/catalog/src/simcore_service_catalog/db/repositories/_services_sql.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ def list_latest_services_with_history_stmt(
179179
users.c.email.label("owner_email"),
180180
services_meta_data.c.name,
181181
services_meta_data.c.description,
182+
services_meta_data.c.description_ui,
182183
services_meta_data.c.thumbnail,
183184
services_meta_data.c.version_display,
184185
services_meta_data.c.classifiers,
@@ -270,6 +271,7 @@ def list_latest_services_with_history_stmt(
270271
# display
271272
latest_query.c.name,
272273
latest_query.c.description,
274+
latest_query.c.description_ui,
273275
latest_query.c.thumbnail,
274276
latest_query.c.version_display,
275277
# ownership
@@ -308,6 +310,7 @@ def list_latest_services_with_history_stmt(
308310
latest_query.c.owner_email,
309311
latest_query.c.name,
310312
latest_query.c.description,
313+
latest_query.c.description_ui,
311314
latest_query.c.thumbnail,
312315
latest_query.c.version_display,
313316
latest_query.c.classifiers,
@@ -369,6 +372,7 @@ def get_service_stmt(
369372
# display
370373
services_meta_data.c.name,
371374
services_meta_data.c.description,
375+
services_meta_data.c.description_ui,
372376
services_meta_data.c.thumbnail,
373377
services_meta_data.c.version_display,
374378
# ownership

services/catalog/src/simcore_service_catalog/db/repositories/services.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,7 @@ async def get_service_with_history(
344344
# display
345345
name=row.name,
346346
description=row.description,
347+
description_ui=row.description_ui,
347348
thumbnail=row.thumbnail,
348349
version_display=row.version_display,
349350
# ownership
@@ -401,6 +402,7 @@ async def list_latest_services(
401402
# display
402403
name=r.name,
403404
description=r.description,
405+
description_ui=r.description_ui,
404406
thumbnail=r.thumbnail,
405407
version_display=r.version_display,
406408
# ownership

0 commit comments

Comments
 (0)