Skip to content

Commit e3fdf00

Browse files
authored
🐛 catalog-api: Fixes validation errors on /services entrypoint (#7268)
1 parent 29816b1 commit e3fdf00

File tree

3 files changed

+69
-5
lines changed

3 files changed

+69
-5
lines changed

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,10 @@ class ServiceBaseDisplay(BaseModel):
4141
validate_default=True,
4242
),
4343
] = None
44-
icon: Annotated[HttpUrl | None, Field(description="URL to the service icon")] = None
44+
icon: Annotated[
45+
HttpUrl | None,
46+
Field(description="URL to the service icon"),
47+
] = None
4548
description: Annotated[
4649
str,
4750
Field(
@@ -67,6 +70,6 @@ class ServiceBaseDisplay(BaseModel):
6770
),
6871
] = None
6972

70-
_empty_is_none = field_validator("thumbnail", mode="before")(
71-
empty_str_to_none_pre_validator
72-
)
73+
_empty_is_none = field_validator(
74+
"icon", "thumbnail", "version_display", mode="before"
75+
)(empty_str_to_none_pre_validator)
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
"""enforce null
2+
3+
Revision ID: 163b11424cb1
4+
Revises: a8d336ca9379
5+
Create Date: 2025-02-24 12:44:10.538469+00:00
6+
7+
"""
8+
import sqlalchemy as sa
9+
from alembic import op
10+
11+
# revision identifiers, used by Alembic.
12+
revision = "163b11424cb1"
13+
down_revision = "a8d336ca9379"
14+
branch_labels = None
15+
depends_on = None
16+
17+
18+
def upgrade():
19+
20+
# SEE https://github.com/ITISFoundation/osparc-simcore/pull/7268
21+
22+
op.execute(
23+
sa.DDL(
24+
"""
25+
UPDATE services_meta_data
26+
SET thumbnail = NULL
27+
WHERE thumbnail = '';
28+
"""
29+
)
30+
)
31+
op.execute(
32+
sa.DDL(
33+
"""
34+
UPDATE services_meta_data
35+
SET version_display = NULL
36+
WHERE version_display = '';
37+
"""
38+
)
39+
)
40+
op.execute(
41+
"""
42+
UPDATE services_meta_data
43+
SET icon = NULL
44+
WHERE icon = '';
45+
"""
46+
)
47+
48+
49+
def downgrade():
50+
"""
51+
Nothing to be done here
52+
"""

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
from models_library.services_access import ServiceGroupAccessRights
88
from models_library.services_base import ServiceKeyVersion
99
from models_library.services_types import ServiceKey, ServiceVersion
10-
from pydantic import BaseModel, ConfigDict, Field
10+
from models_library.utils.common_validators import empty_str_to_none_pre_validator
11+
from pydantic import BaseModel, ConfigDict, Field, field_validator
1112
from pydantic.config import JsonDict
1213
from pydantic.types import PositiveInt
1314
from simcore_postgres_database.models.services_compatibility import CompatiblePolicyDict
@@ -123,6 +124,10 @@ def _update_json_schema_extra(schema: JsonDict) -> None:
123124

124125
model_config = ConfigDict(json_schema_extra=_update_json_schema_extra)
125126

127+
_prevent_empty_strings_in_nullable_string_cols = field_validator(
128+
"icon", "thumbnail", "version_display", mode="before"
129+
)(empty_str_to_none_pre_validator)
130+
126131

127132
class ServiceMetaDataDBPatch(BaseModel):
128133
# ownership
@@ -159,6 +164,10 @@ def _update_json_schema_extra(schema: JsonDict) -> None:
159164

160165
model_config = ConfigDict(json_schema_extra=_update_json_schema_extra)
161166

167+
_prevent_empty_strings_in_nullable_string_cols = field_validator(
168+
"icon", "thumbnail", "version_display", mode="before"
169+
)(empty_str_to_none_pre_validator)
170+
162171

163172
class ReleaseDBGet(BaseModel):
164173
version: ServiceVersion

0 commit comments

Comments
 (0)