Skip to content

Commit 57bfe25

Browse files
committed
rename and added new test
1 parent 776b223 commit 57bfe25

File tree

7 files changed

+44
-19
lines changed

7 files changed

+44
-19
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class _BaseOrderQueryParams(RequestParameters):
3030
order_by: OrderBy
3131

3232

33-
def create_ordering_query_model_classes(
33+
def create_ordering_query_model_class(
3434
*,
3535
ordering_fields: set[str],
3636
default: OrderBy,

packages/models-library/tests/test_rest_ordering.py

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
import pickle
2+
13
import pytest
24
from common_library.json_serialization import json_dumps
35
from models_library.basic_types import IDStr
46
from models_library.rest_ordering import (
57
OrderBy,
68
OrderDirection,
7-
create_ordering_query_model_classes,
9+
create_ordering_query_model_class,
810
)
911
from pydantic import (
1012
BaseModel,
@@ -48,8 +50,31 @@ def _validate_order_by_field(cls, v):
4850
)
4951

5052

53+
@pytest.mark.xfail(
54+
reason="create_ordering_query_model_class.<locals>._OrderBy is still not pickable"
55+
)
56+
def test_pickle_ordering_query_model_class():
57+
OrderQueryParamsModel = create_ordering_query_model_class(
58+
ordering_fields={"name", "description"},
59+
default=OrderBy(field=IDStr("name"), direction=OrderDirection.DESC),
60+
)
61+
62+
data = {"order_by": {"field": "name", "direction": "asc"}}
63+
query_model = OrderQueryParamsModel.model_validate(data)
64+
65+
# https://docs.pydantic.dev/latest/concepts/serialization/#pickledumpsmodel
66+
expected = query_model.order_by
67+
68+
# see https://github.com/ITISFoundation/osparc-simcore/pull/6828
69+
# FAILURE: raises `AttributeError: Can't pickle local object 'create_ordering_query_model_class.<locals>._OrderBy'`
70+
data = pickle.dumps(expected)
71+
72+
loaded = pickle.loads(data)
73+
assert loaded == expected
74+
75+
5176
def test_conversion_order_by_from_query_to_domain_model():
52-
OrderQueryParamsModel = create_ordering_query_model_classes(
77+
OrderQueryParamsModel = create_ordering_query_model_class(
5378
ordering_fields={"modified_at", "name", "description"},
5479
default=OrderBy(field=IDStr("modified_at"), direction=OrderDirection.DESC),
5580
)
@@ -90,7 +115,7 @@ def test_conversion_order_by_from_query_to_domain_model():
90115

91116

92117
def test_ordering_query_model_class_factory():
93-
BaseOrderingQueryModel = create_ordering_query_model_classes(
118+
BaseOrderingQueryModel = create_ordering_query_model_class(
94119
ordering_fields={"modified_at", "name", "description"},
95120
default=OrderBy(field=IDStr("modified_at"), direction=OrderDirection.DESC),
96121
ordering_fields_api_to_column_map={"modified_at": "modified_column"},
@@ -119,7 +144,7 @@ class OrderQueryParamsModel(BaseOrderingQueryModel):
119144

120145
def test_ordering_query_model_class__fails_with_invalid_fields():
121146

122-
OrderQueryParamsModel = create_ordering_query_model_classes(
147+
OrderQueryParamsModel = create_ordering_query_model_class(
123148
ordering_fields={"modified", "name", "description"},
124149
default=OrderBy(field=IDStr("modified"), direction=OrderDirection.DESC),
125150
)
@@ -136,7 +161,7 @@ def test_ordering_query_model_class__fails_with_invalid_fields():
136161

137162

138163
def test_ordering_query_model_class__fails_with_invalid_direction():
139-
OrderQueryParamsModel = create_ordering_query_model_classes(
164+
OrderQueryParamsModel = create_ordering_query_model_class(
140165
ordering_fields={"modified", "name", "description"},
141166
default=OrderBy(field=IDStr("modified"), direction=OrderDirection.DESC),
142167
)
@@ -154,7 +179,7 @@ def test_ordering_query_model_class__fails_with_invalid_direction():
154179

155180
def test_ordering_query_model_class__defaults():
156181

157-
OrderQueryParamsModel = create_ordering_query_model_classes(
182+
OrderQueryParamsModel = create_ordering_query_model_class(
158183
ordering_fields={"modified", "name", "description"},
159184
default=OrderBy(field=IDStr("modified"), direction=OrderDirection.DESC),
160185
ordering_fields_api_to_column_map={"modified": "modified_at"},
@@ -184,7 +209,7 @@ def test_ordering_query_model_class__defaults():
184209

185210

186211
def test_ordering_query_model_with_map():
187-
OrderQueryParamsModel = create_ordering_query_model_classes(
212+
OrderQueryParamsModel = create_ordering_query_model_class(
188213
ordering_fields={"modified", "name", "description"},
189214
default=OrderBy(field=IDStr("modified"), direction=OrderDirection.DESC),
190215
ordering_fields_api_to_column_map={"modified": "some_db_column_name"},
@@ -197,7 +222,7 @@ def test_ordering_query_model_with_map():
197222

198223
def test_ordering_query_parse_json_pre_validator():
199224

200-
OrderQueryParamsModel = create_ordering_query_model_classes(
225+
OrderQueryParamsModel = create_ordering_query_model_class(
201226
ordering_fields={"modified", "name"},
202227
default=OrderBy(field=IDStr("modified"), direction=OrderDirection.DESC),
203228
)

packages/service-library/tests/aiohttp/test_requests_validation.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from models_library.rest_ordering import (
1616
OrderBy,
1717
OrderDirection,
18-
create_ordering_query_model_classes,
18+
create_ordering_query_model_class,
1919
)
2020
from pydantic import BaseModel, ConfigDict, Field
2121
from servicelib.aiohttp import status
@@ -365,7 +365,7 @@ async def test_parse_request_with_invalid_headers_params(
365365

366366
def test_parse_request_query_parameters_as_with_order_by_query_models():
367367

368-
OrderQueryModel = create_ordering_query_model_classes(
368+
OrderQueryModel = create_ordering_query_model_class(
369369
ordering_fields={"modified", "name"}, default=OrderBy(field="name")
370370
)
371371

services/web/server/src/simcore_service_webserver/folders/_models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from models_library.rest_ordering import (
99
OrderBy,
1010
OrderDirection,
11-
create_ordering_query_model_classes,
11+
create_ordering_query_model_class,
1212
)
1313
from models_library.rest_pagination import PageQueryParameters
1414
from models_library.trash import RemoveQueryParams
@@ -42,7 +42,7 @@ class FolderFilters(Filters):
4242
)
4343

4444

45-
_FolderOrderQueryParams: type[RequestParameters] = create_ordering_query_model_classes(
45+
_FolderOrderQueryParams: type[RequestParameters] = create_ordering_query_model_class(
4646
ordering_fields={
4747
"modified_at",
4848
"name",

services/web/server/src/simcore_service_webserver/projects/_crud_handlers_models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from models_library.rest_ordering import (
1616
OrderBy,
1717
OrderDirection,
18-
create_ordering_query_model_classes,
18+
create_ordering_query_model_class,
1919
)
2020
from models_library.rest_pagination import PageQueryParameters
2121
from models_library.utils.common_validators import (
@@ -100,7 +100,7 @@ class ProjectFilters(Filters):
100100
)
101101

102102

103-
ProjectsListOrderParams = create_ordering_query_model_classes(
103+
ProjectsListOrderParams = create_ordering_query_model_class(
104104
ordering_fields={
105105
"type",
106106
"uuid",

services/web/server/src/simcore_service_webserver/resource_usage/_service_runs_handlers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from models_library.rest_ordering import (
1717
OrderBy,
1818
OrderDirection,
19-
create_ordering_query_model_classes,
19+
create_ordering_query_model_class,
2020
)
2121
from models_library.rest_pagination import Page, PageQueryParameters
2222
from models_library.rest_pagination_utils import paginate_data
@@ -53,7 +53,7 @@ async def wrapper(request: web.Request) -> web.StreamResponse:
5353

5454
_ResorceUsagesListOrderQueryParams: type[
5555
RequestParameters
56-
] = create_ordering_query_model_classes(
56+
] = create_ordering_query_model_class(
5757
ordering_fields={
5858
"wallet_id",
5959
"wallet_name",

services/web/server/src/simcore_service_webserver/workspaces/_models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from models_library.rest_ordering import (
77
OrderBy,
88
OrderDirection,
9-
create_ordering_query_model_classes,
9+
create_ordering_query_model_class,
1010
)
1111
from models_library.rest_pagination import PageQueryParameters
1212
from models_library.trash import RemoveQueryParams
@@ -31,7 +31,7 @@ class WorkspacesPathParams(StrictRequestParameters):
3131

3232
_WorkspacesListOrderQueryParams: type[
3333
RequestParameters
34-
] = create_ordering_query_model_classes(
34+
] = create_ordering_query_model_class(
3535
ordering_fields={
3636
"modified_at",
3737
"name",

0 commit comments

Comments
 (0)