Skip to content

Commit 615f03c

Browse files
GitHKAndrei Neagumergify[bot]
authored andcommitted
🐛 fixed issue with catalog and the icon field (ITISFoundation#7331)
Co-authored-by: Andrei Neagu <[email protected]> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent 36cf5bc commit 615f03c

File tree

2 files changed

+49
-11
lines changed

2 files changed

+49
-11
lines changed

services/catalog/src/simcore_service_catalog/models/services_db.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,14 @@
99
from models_library.services_base import ServiceKeyVersion
1010
from models_library.services_types import ServiceKey, ServiceVersion
1111
from models_library.utils.common_validators import empty_str_to_none_pre_validator
12-
from pydantic import BaseModel, ConfigDict, Field, field_validator
12+
from pydantic import (
13+
BaseModel,
14+
BeforeValidator,
15+
ConfigDict,
16+
Field,
17+
HttpUrl,
18+
field_validator,
19+
)
1320
from pydantic.config import JsonDict
1421
from simcore_postgres_database.models.services_compatibility import CompatiblePolicyDict
1522

@@ -83,6 +90,12 @@ def _update_json_schema_extra(schema: JsonDict) -> None:
8390
)
8491

8592

93+
def _httpurl_to_str(value: HttpUrl | str | None) -> str | None:
94+
if isinstance(value, HttpUrl):
95+
return f"{value}"
96+
return value
97+
98+
8699
class ServiceMetaDataDBCreate(BaseModel):
87100
# primary-keys
88101
key: ServiceKey
@@ -96,7 +109,7 @@ class ServiceMetaDataDBCreate(BaseModel):
96109
description: str
97110
description_ui: bool = False
98111
thumbnail: str | None = None
99-
icon: str | None = None
112+
icon: Annotated[str | None, BeforeValidator(_httpurl_to_str)] = None
100113
version_display: str | None = None
101114

102115
# tagging

services/catalog/tests/unit/with_dbs/test_db_repositories.py

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from models_library.users import UserID
1111
from packaging import version
1212
from packaging.version import Version
13-
from pydantic import EmailStr, TypeAdapter
13+
from pydantic import EmailStr, HttpUrl, TypeAdapter
1414
from simcore_service_catalog.db.repositories.services import ServicesRepository
1515
from simcore_service_catalog.models.services_db import (
1616
ServiceAccessRightsAtDB,
@@ -125,6 +125,31 @@ async def test_create_services(
125125
) == service_db_create.model_dump(exclude_unset=True)
126126

127127

128+
@pytest.mark.parametrize(
129+
"url_object",
130+
[
131+
"https://github.com/some/path/to/image.png?raw=true",
132+
TypeAdapter(HttpUrl).validate_python(
133+
"https://github.com/some/path/to/image.png?raw=true"
134+
),
135+
"",
136+
None,
137+
],
138+
)
139+
async def test_regression_service_meta_data_db_create(
140+
create_fake_service_data: Callable, url_object: str | HttpUrl | None
141+
):
142+
fake_service, *_ = create_fake_service_data(
143+
"simcore/services/dynamic/jupyterlab",
144+
"1.0.0",
145+
team_access="x",
146+
everyone_access="x",
147+
)
148+
149+
fake_service["icon"] = url_object
150+
assert ServiceMetaDataDBCreate.model_validate(fake_service)
151+
152+
128153
async def test_read_services(
129154
services_repo: ServicesRepository,
130155
user_groups_ids: list[int],
@@ -240,19 +265,19 @@ async def test_list_service_releases_version_filtered(
240265
assert latest
241266
assert latest.version == fake_catalog_with_jupyterlab.expected_latest
242267

243-
releases_1_1_x: list[
244-
ServiceMetaDataDBGet
245-
] = await services_repo.list_service_releases(
246-
"simcore/services/dynamic/jupyterlab", major=1, minor=1
268+
releases_1_1_x: list[ServiceMetaDataDBGet] = (
269+
await services_repo.list_service_releases(
270+
"simcore/services/dynamic/jupyterlab", major=1, minor=1
271+
)
247272
)
248273
assert [
249274
s.version for s in releases_1_1_x
250275
] == fake_catalog_with_jupyterlab.expected_1_1_x
251276

252-
expected_0_x_x: list[
253-
ServiceMetaDataDBGet
254-
] = await services_repo.list_service_releases(
255-
"simcore/services/dynamic/jupyterlab", major=0
277+
expected_0_x_x: list[ServiceMetaDataDBGet] = (
278+
await services_repo.list_service_releases(
279+
"simcore/services/dynamic/jupyterlab", major=0
280+
)
256281
)
257282
assert [
258283
s.version for s in expected_0_x_x

0 commit comments

Comments
 (0)