1+ import pickle
2+
13import pytest
24from common_library .json_serialization import json_dumps
35from models_library .basic_types import IDStr
46from models_library .rest_ordering import (
57 OrderBy ,
68 OrderDirection ,
7- create_ordering_query_model_classes ,
9+ create_ordering_query_model_class ,
810)
911from 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+
5176def 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
92117def 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
120145def 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
138163def 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
155180def 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
186211def 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
198223def 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 )
0 commit comments