3939# The mapping with validators using by to cast raw value to instance of target type
4040REGISTERED_PYDANTIC_TYPES : Dict [Type , List [Callable ]] = dict (_VALIDATORS )
4141
42+ cast_failed = object ()
43+
4244
4345def create_filters (model : Type [TypeModel ], filter_info : Union [list , dict ], schema : Type [TypeSchema ]):
4446 """
@@ -65,7 +67,22 @@ def __init__(self, model: Type[TypeModel], filter_: dict, schema: Type[TypeSchem
6567 self .filter_ = filter_
6668 self .schema = schema
6769
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 ):
6986 """
7087 Create sqlalchemy filter
7188 :param schema_field:
@@ -107,17 +124,7 @@ def create_filter(self, schema_field: ModelField, model_column, operator, value)
107124 if clear_value is None and userspace_types :
108125 log .warning ("Filtering by user type values is not properly tested yet. Use this on your own risk." )
109126
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 )
121128
122129 if clear_value is cast_failed :
123130 raise InvalidType (
0 commit comments