-
-
Notifications
You must be signed in to change notification settings - Fork 136
Expand file tree
/
Copy pathdeserializers.py
More file actions
40 lines (33 loc) · 1.5 KB
/
deserializers.py
File metadata and controls
40 lines (33 loc) · 1.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import warnings
from openapi_core.deserializing.exceptions import DeserializeError
from openapi_core.deserializing.parameters.exceptions import (
EmptyParameterValue,
)
from openapi_core.schema.parameters import get_aslist, get_explode, get_style
class PrimitiveDeserializer:
def __init__(self, param_or_header, deserializer_callable):
self.param_or_header = param_or_header
self.deserializer_callable = deserializer_callable
self.aslist = get_aslist(self.param_or_header)
self.explode = get_explode(self.param_or_header)
self.style = get_style(self.param_or_header)
def __call__(self, value):
# if "in" not defined then it's a Header
if 'allowEmptyValue' in self.param_or_header:
warnings.warn(
"Use of allowEmptyValue property is deprecated",
DeprecationWarning,
)
allow_empty_values = self.param_or_header.getkey(
'allowEmptyValue', False)
location_name = self.param_or_header.getkey('in', 'header')
if (location_name == 'query' and value == "" and
not allow_empty_values):
name = self.param_or_header.getkey('name', 'header')
raise EmptyParameterValue(value, self.style, name)
if not self.aslist or self.explode:
return value
try:
return self.deserializer_callable(value)
except (ValueError, TypeError, AttributeError):
raise DeserializeError(value, self.style)