2019-08-31 15:17:10 +02:00
|
|
|
from collections import OrderedDict
|
|
|
|
|
|
|
|
from requests.structures import CaseInsensitiveDict
|
|
|
|
|
|
|
|
|
|
|
|
class RequestHeadersDict(CaseInsensitiveDict):
|
|
|
|
"""
|
|
|
|
Headers are case-insensitive and multiple values are currently not supported.
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
class RequestJSONDataDict(OrderedDict):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
class MultiValueOrderedDict(OrderedDict):
|
|
|
|
"""Multi-value dict for URL parameters and form data."""
|
|
|
|
|
|
|
|
def __setitem__(self, key, value):
|
|
|
|
"""
|
|
|
|
If `key` is assigned more than once, `self[key]` holds a
|
|
|
|
`list` of all the values.
|
|
|
|
|
|
|
|
This allows having multiple fields with the same name in form
|
|
|
|
data and URL params.
|
|
|
|
|
|
|
|
"""
|
|
|
|
assert not isinstance(value, list)
|
|
|
|
if key not in self:
|
|
|
|
super().__setitem__(key, value)
|
|
|
|
else:
|
|
|
|
if not isinstance(self[key], list):
|
|
|
|
super().__setitem__(key, [self[key]])
|
|
|
|
self[key].append(value)
|
|
|
|
|
2020-09-28 12:16:57 +02:00
|
|
|
def items(self):
|
|
|
|
for key, values in super().items():
|
|
|
|
if not isinstance(values, list):
|
|
|
|
values = [values]
|
|
|
|
for value in values:
|
|
|
|
yield key, value
|
|
|
|
|
2019-08-31 15:17:10 +02:00
|
|
|
|
|
|
|
class RequestQueryParamsDict(MultiValueOrderedDict):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
class RequestDataDict(MultiValueOrderedDict):
|
2020-09-28 12:16:57 +02:00
|
|
|
pass
|
2019-08-31 15:17:10 +02:00
|
|
|
|
2020-09-28 12:16:57 +02:00
|
|
|
|
|
|
|
class MultipartRequestDataDict(MultiValueOrderedDict):
|
|
|
|
pass
|
2019-08-31 15:17:10 +02:00
|
|
|
|
|
|
|
|
|
|
|
class RequestFilesDict(RequestDataDict):
|
|
|
|
pass
|