comparison env/lib/python3.9/site-packages/requests/structures.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4f3585e2f14b
1 # -*- coding: utf-8 -*-
2
3 """
4 requests.structures
5 ~~~~~~~~~~~~~~~~~~~
6
7 Data structures that power Requests.
8 """
9
10 from collections import OrderedDict
11
12 from .compat import Mapping, MutableMapping
13
14
15 class CaseInsensitiveDict(MutableMapping):
16 """A case-insensitive ``dict``-like object.
17
18 Implements all methods and operations of
19 ``MutableMapping`` as well as dict's ``copy``. Also
20 provides ``lower_items``.
21
22 All keys are expected to be strings. The structure remembers the
23 case of the last key to be set, and ``iter(instance)``,
24 ``keys()``, ``items()``, ``iterkeys()``, and ``iteritems()``
25 will contain case-sensitive keys. However, querying and contains
26 testing is case insensitive::
27
28 cid = CaseInsensitiveDict()
29 cid['Accept'] = 'application/json'
30 cid['aCCEPT'] == 'application/json' # True
31 list(cid) == ['Accept'] # True
32
33 For example, ``headers['content-encoding']`` will return the
34 value of a ``'Content-Encoding'`` response header, regardless
35 of how the header name was originally stored.
36
37 If the constructor, ``.update``, or equality comparison
38 operations are given keys that have equal ``.lower()``s, the
39 behavior is undefined.
40 """
41
42 def __init__(self, data=None, **kwargs):
43 self._store = OrderedDict()
44 if data is None:
45 data = {}
46 self.update(data, **kwargs)
47
48 def __setitem__(self, key, value):
49 # Use the lowercased key for lookups, but store the actual
50 # key alongside the value.
51 self._store[key.lower()] = (key, value)
52
53 def __getitem__(self, key):
54 return self._store[key.lower()][1]
55
56 def __delitem__(self, key):
57 del self._store[key.lower()]
58
59 def __iter__(self):
60 return (casedkey for casedkey, mappedvalue in self._store.values())
61
62 def __len__(self):
63 return len(self._store)
64
65 def lower_items(self):
66 """Like iteritems(), but with all lowercase keys."""
67 return (
68 (lowerkey, keyval[1])
69 for (lowerkey, keyval)
70 in self._store.items()
71 )
72
73 def __eq__(self, other):
74 if isinstance(other, Mapping):
75 other = CaseInsensitiveDict(other)
76 else:
77 return NotImplemented
78 # Compare insensitively
79 return dict(self.lower_items()) == dict(other.lower_items())
80
81 # Copy is required
82 def copy(self):
83 return CaseInsensitiveDict(self._store.values())
84
85 def __repr__(self):
86 return str(dict(self.items()))
87
88
89 class LookupDict(dict):
90 """Dictionary lookup object."""
91
92 def __init__(self, name=None):
93 self.name = name
94 super(LookupDict, self).__init__()
95
96 def __repr__(self):
97 return '<lookup \'%s\'>' % (self.name)
98
99 def __getitem__(self, key):
100 # We allow fall-through here, so values default to None
101
102 return self.__dict__.get(key, None)
103
104 def get(self, key, default=None):
105 return self.__dict__.get(key, default)