10
10
from werkzeug .datastructures import ImmutableMultiDict
11
11
12
12
13
- def binary_loads (value : Union [str , bytes ], ** parameters : str ) -> bytes :
14
- charset = "utf-8"
15
- if "charset" in parameters :
16
- charset = parameters ["charset" ]
17
- if isinstance (value , str ):
18
- return value .encode (charset )
13
+ def binary_loads (value : bytes , ** parameters : str ) -> bytes :
19
14
return value
20
15
21
16
22
- def plain_loads (value : Union [ str , bytes ] , ** parameters : str ) -> str :
17
+ def plain_loads (value : bytes , ** parameters : str ) -> str :
23
18
charset = "utf-8"
24
19
if "charset" in parameters :
25
20
charset = parameters ["charset" ]
@@ -32,30 +27,36 @@ def plain_loads(value: Union[str, bytes], **parameters: str) -> str:
32
27
return value
33
28
34
29
35
- def json_loads (value : Union [ str , bytes ] , ** parameters : str ) -> Any :
30
+ def json_loads (value : bytes , ** parameters : str ) -> Any :
36
31
return loads (value )
37
32
38
33
39
- def xml_loads (value : Union [str , bytes ], ** parameters : str ) -> Element :
40
- return fromstring (value )
34
+ def xml_loads (value : bytes , ** parameters : str ) -> Element :
35
+ charset = "utf-8"
36
+ if "charset" in parameters :
37
+ charset = parameters ["charset" ]
38
+ return fromstring (value .decode (charset ))
41
39
42
40
43
- def urlencoded_form_loads (value : Any , ** parameters : str ) -> Mapping [str , Any ]:
44
- return ImmutableMultiDict (parse_qsl (value ))
41
+ def urlencoded_form_loads (
42
+ value : bytes , ** parameters : str
43
+ ) -> Mapping [str , Any ]:
44
+ # only UTF-8 is conforming
45
+ return ImmutableMultiDict (parse_qsl (value .decode ("utf-8" )))
45
46
46
47
47
- def data_form_loads (
48
- value : Union [ str , bytes ], ** parameters : str
49
- ) -> Mapping [ str , Any ] :
50
- if isinstance ( value , bytes ):
51
- value = value .decode ("ASCII" , errors = "surrogateescape" )
48
+ def data_form_loads (value : bytes , ** parameters : str ) -> Mapping [ str , Any ]:
49
+ charset = "ASCII"
50
+ if "charset" in parameters :
51
+ charset = parameters [ "charset" ]
52
+ decoded = value .decode (charset , errors = "surrogateescape" )
52
53
boundary = ""
53
54
if "boundary" in parameters :
54
55
boundary = parameters ["boundary" ]
55
56
parser = Parser ()
56
57
mimetype = "multipart/form-data"
57
58
header = f'Content-Type: { mimetype } ; boundary="{ boundary } "'
58
- text = "\n \n " .join ([header , value ])
59
+ text = "\n \n " .join ([header , decoded ])
59
60
parts = parser .parsestr (text , headersonly = False )
60
61
return ImmutableMultiDict (
61
62
[
0 commit comments