Skip to content

Commit 0aea337

Browse files
authored
Uses typing_extensions.TypedDict in all instances used in pydantic models AND fixes with migration of rest_ordering (#6770)
1 parent c50d79c commit 0aea337

File tree

20 files changed

+80
-22
lines changed

20 files changed

+80
-22
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Makefile @pcrespov @sanderegg
1414
/ci/ @sanderegg @pcrespov
1515
/docs/ @pcrespov
1616
/packages/common-library/ @giancarloromeo
17-
/packages/models-library/ @sanderegg @pcrespov @matusdrobuliak66
17+
/packages/models-library/ @sanderegg @pcrespov @matusdrobuliak66 @giancarloromeo
1818
/packages/postgres-database/ @matusdrobuliak66
1919
/packages/pytest-simcore/ @pcrespov @sanderegg
2020
/packages/service-integration/ @pcrespov @sanderegg @GitHK

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from pydantic import BaseModel, ConfigDict, ValidationInfo, field_validator
2-
from typing_extensions import TypedDict
2+
from typing_extensions import ( # https://docs.pydantic.dev/latest/api/standard_library_types/#typeddict
3+
TypedDict,
4+
)
35

46
from .basic_types import EnvVarKey
57

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66

77
from pydantic import BaseModel, ConfigDict, Field, field_validator
88
from pydantic_extra_types.color import Color
9-
from typing_extensions import TypedDict
9+
from typing_extensions import ( # https://docs.pydantic.dev/latest/api/standard_library_types/#typeddict
10+
TypedDict,
11+
)
1012

1113
from .projects_nodes_io import NodeID, NodeIDStr
1214
from .projects_nodes_ui import Marker, Position

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class RequestParameters(BaseModel):
88
"""
99

1010
def as_params(self, **export_options) -> dict[str, str]:
11-
data = self.dict(**export_options)
11+
data = self.model_dump(**export_options)
1212
return {k: f"{v}" for k, v in data.items()}
1313

1414

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
from math import ceil
22
from typing import Any, Protocol, runtime_checkable
3-
from typing_extensions import TypedDict
43

54
from common_library.pydantic_networks_extension import AnyHttpUrlLegacy
65
from pydantic import TypeAdapter
6+
from typing_extensions import ( # https://docs.pydantic.dev/latest/api/standard_library_types/#typeddict
7+
TypedDict,
8+
)
79

810
from .rest_pagination import PageLinks, PageMetaInfoLimitOffset
911

@@ -70,7 +72,9 @@ def paginate_data(
7072
"""
7173
last_page = ceil(total / limit) - 1
7274

73-
data = [item.model_dump() if hasattr(item, "model_dump") else item for item in chunk]
75+
data = [
76+
item.model_dump() if hasattr(item, "model_dump") else item for item in chunk
77+
]
7478

7579
return PageDict(
7680
_meta=PageMetaInfoLimitOffset(

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
from typing import Any, TypedDict
1+
from typing import Any
2+
3+
from typing_extensions import ( # https://docs.pydantic.dev/latest/api/standard_library_types/#typeddict
4+
TypedDict,
5+
)
26

37

48
class SocketMessageDict(TypedDict):

packages/models-library/src/models_library/utils/common_validators.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def parse_json_pre_validator(value: Any):
4848
return json_loads(value)
4949
except JSONDecodeError as err:
5050
msg = f"Invalid JSON {value=}: {err}"
51-
raise TypeError(msg) from err
51+
raise ValueError(msg) from err
5252
return value
5353

5454

packages/models-library/tests/test_rest_ordering.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,3 +151,22 @@ def test_ordering_query_model_with_map():
151151
model = OrderQueryParamsModel.model_validate({"order_by": {"field": "modified"}})
152152
assert model.order_by
153153
assert model.order_by.field == "some_db_column_name"
154+
155+
156+
def test_ordering_query_parse_json_pre_validator():
157+
158+
OrderQueryParamsModel = create_ordering_query_model_classes(
159+
ordering_fields={"modified", "name"},
160+
default=OrderBy(field=IDStr("modified"), direction=OrderDirection.DESC),
161+
)
162+
163+
bad_json_value = ",invalid json"
164+
with pytest.raises(ValidationError) as err_info:
165+
OrderQueryParamsModel.model_validate({"order_by": bad_json_value})
166+
167+
exc = err_info.value
168+
assert exc.error_count() == 1
169+
error = exc.errors()[0]
170+
assert error["loc"] == ("order_by",)
171+
assert error["type"] == "value_error"
172+
assert error["input"] == bad_json_value

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
import sqlalchemy as sa
1212
from sqlalchemy.dialects.postgresql import JSONB
1313
from sqlalchemy.sql import func
14-
from typing_extensions import TypedDict
14+
from typing_extensions import ( # https://docs.pydantic.dev/latest/api/standard_library_types/#typeddict
15+
TypedDict,
16+
)
1517

1618
from .base import metadata
1719
from .groups import groups

packages/service-library/src/servicelib/aiohttp/application_setup.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@
44
from collections.abc import Callable
55
from copy import deepcopy
66
from enum import Enum
7-
from typing import Any, Protocol, TypedDict
7+
from typing import Any, Protocol
88

99
import arrow
1010
from aiohttp import web
1111
from pydantic import TypeAdapter
12+
from typing_extensions import ( # https://docs.pydantic.dev/latest/api/standard_library_types/#typeddict
13+
TypedDict,
14+
)
1215

1316
from .application_keys import APP_CONFIG_KEY, APP_SETTINGS_KEY
1417

0 commit comments

Comments
 (0)