diff options
| author | Gulácsi Tamás <gt-waterhouse@gthomas.homelinux.org> | 2011-07-23 22:16:12 +0200 |
|---|---|---|
| committer | Gulácsi Tamás <gt-waterhouse@gthomas.homelinux.org> | 2011-07-23 22:16:12 +0200 |
| commit | 04c456b8775a2560d0fffad445745793929a82f0 (patch) | |
| tree | 28a23af8ef9caa352d5c8acff2a739fe25ea0a1b /requests/structures.py | |
| parent | f408829d516614c813a59621bfec9b09a6251da4 (diff) | |
| download | python-requests-04c456b8775a2560d0fffad445745793929a82f0.tar.gz | |
structures: little bit more general, lower-key-caching version of CaseInsensitiveDict
Diffstat (limited to 'requests/structures.py')
| -rw-r--r-- | requests/structures.py | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/requests/structures.py b/requests/structures.py index bfee7b19..b23b72b0 100644 --- a/requests/structures.py +++ b/requests/structures.py @@ -9,20 +9,39 @@ Datastructures that power Requests. """ class CaseInsensitiveDict(dict): - """Case-insensitive Dictionary for :class:`Response <models.Response>` Headers. + """Case-insensitive Dictionary For example, ``headers['content-encoding']`` will return the value of a ``'Content-Encoding'`` response header.""" - def _lower_keys(self): - return map(str.lower, self.keys()) + @property + def lower_keys(self): + if not hasattr(self, '_lower_keys') or not self._lower_keys: + self._lower_keys = dict((k.lower(), k) for k in self.iterkeys()) + return self._lower_keys + def _clear_lower_keys(self): + if hasattr(self, '_lower_keys'): + self._lower_keys.clear() - def __contains__(self, key): - return key.lower() in self._lower_keys() + def __setitem__(self, key, value): + dict.__setitem__(self, key, value) + self._clear_lower_keys() + + def __delitem__(self, key): + dict.__delitem__(self, key, value) + self._lower_keys.clear() + def __contains__(self, key): + return key.lower() in self.lower_keys def __getitem__(self, key): # We allow fall-through here, so values default to None if key in self: - return self.items()[self._lower_keys().index(key.lower())][1] + return dict.__getitem__(self, self.lower_keys[key.lower()]) + + def get(self, key, default=None): + if key in self: + return self[key] + else: + return default |
