22
33from openapi_core .deserializing .exceptions import DeserializeError
44from openapi_core .deserializing .parameters .exceptions import (
5- EmptyParameterValue ,
5+ EmptyQueryParameterValue ,
66)
7- from openapi_core .schema .parameters import get_aslist , get_explode , get_style
7+ from openapi_core .schema .parameters import get_aslist , get_explode
88
99
10- class PrimitiveDeserializer :
10+ class BaseParameterDeserializer :
1111
12- def __init__ (self , param_or_header , deserializer_callable ):
12+ def __init__ (self , param_or_header , style ):
1313 self .param_or_header = param_or_header
14+ self .style = style
15+
16+ def __call__ (self , value ):
17+ raise NotImplementedError
18+
19+
20+ class UnsupportedStyleDeserializer (BaseParameterDeserializer ):
21+
22+ def __call__ (self , value ):
23+ warnings .warn (f"Unsupported { self .style } style" )
24+ return value
25+
26+
27+ class CallableParameterDeserializer (BaseParameterDeserializer ):
28+
29+ def __init__ (self , param_or_header , style , deserializer_callable ):
30+ super ().__init__ (param_or_header , style )
1431 self .deserializer_callable = deserializer_callable
1532
1633 self .aslist = get_aslist (self .param_or_header )
1734 self .explode = get_explode (self .param_or_header )
18- self .style = get_style (self .param_or_header )
1935
2036 def __call__ (self , value ):
2137 # if "in" not defined then it's a Header
@@ -29,12 +45,12 @@ def __call__(self, value):
2945 location_name = self .param_or_header .getkey ('in' , 'header' )
3046 if (location_name == 'query' and value == "" and
3147 not allow_empty_values ):
32- name = self .param_or_header . getkey ( 'name' , 'header' )
33- raise EmptyParameterValue ( value , self . style , name )
48+ name = self .param_or_header [ 'name' ]
49+ raise EmptyQueryParameterValue ( name )
3450
3551 if not self .aslist or self .explode :
3652 return value
3753 try :
3854 return self .deserializer_callable (value )
3955 except (ValueError , TypeError , AttributeError ):
40- raise DeserializeError (value , self .style )
56+ raise DeserializeError (location_name , self .style , value )
0 commit comments