Mercurial > repos > guerler > springsuite
comparison planemo/lib/python3.7/site-packages/requests/structures.py @ 1:56ad4e20f292 draft
"planemo upload commit 6eee67778febed82ddd413c3ca40b3183a3898f1"
| author | guerler |
|---|---|
| date | Fri, 31 Jul 2020 00:32:28 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 0:d30785e31577 | 1:56ad4e20f292 |
|---|---|
| 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) |
