39
39
# The mapping with validators using by to cast raw value to instance of target type
40
40
REGISTERED_PYDANTIC_TYPES : Dict [Type , List [Callable ]] = dict (_VALIDATORS )
41
41
42
+ cast_failed = object ()
43
+
42
44
43
45
def create_filters (model : Type [TypeModel ], filter_info : Union [list , dict ], schema : Type [TypeSchema ]):
44
46
"""
@@ -65,7 +67,22 @@ def __init__(self, model: Type[TypeModel], filter_: dict, schema: Type[TypeSchem
65
67
self .filter_ = filter_
66
68
self .schema = schema
67
69
68
- def create_filter (self , schema_field : ModelField , model_column , operator , value ): # noqa: PLR0912 temporary
70
+ def _cast_value_with_scheme (self , field_types : List [ModelField ], value : Any ) -> Tuple [Any , List [str ]]:
71
+ errors : List [str ] = []
72
+ casted_value = cast_failed
73
+
74
+ for field_type in field_types :
75
+ try :
76
+ if isinstance (value , list ): # noqa: SIM108
77
+ casted_value = [field_type (item ) for item in value ]
78
+ else :
79
+ casted_value = field_type (value )
80
+ except (TypeError , ValueError ) as ex :
81
+ errors .append (str (ex ))
82
+
83
+ return casted_value , errors
84
+
85
+ def create_filter (self , schema_field : ModelField , model_column , operator , value ):
69
86
"""
70
87
Create sqlalchemy filter
71
88
:param schema_field:
@@ -107,17 +124,7 @@ def create_filter(self, schema_field: ModelField, model_column, operator, value)
107
124
if clear_value is None and userspace_types :
108
125
log .warning ("Filtering by user type values is not properly tested yet. Use this on your own risk." )
109
126
110
- cast_failed = object ()
111
- clear_value = cast_failed
112
-
113
- for i_type in types :
114
- try :
115
- if isinstance (value , list ): # noqa: SIM108
116
- clear_value = [i_type (item ) for item in value ]
117
- else :
118
- clear_value = i_type (value )
119
- except (TypeError , ValueError ) as ex :
120
- errors .append (str (ex ))
127
+ clear_value , errors = self ._cast_value_with_scheme (types , value )
121
128
122
129
if clear_value is cast_failed :
123
130
raise InvalidType (
0 commit comments