aboutsummaryrefslogtreecommitdiff
path: root/requests/structures.py
diff options
context:
space:
mode:
Diffstat (limited to 'requests/structures.py')
-rw-r--r--requests/structures.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/requests/structures.py b/requests/structures.py
new file mode 100644
index 0000000..0c82c7b
--- /dev/null
+++ b/requests/structures.py
@@ -0,0 +1,64 @@
+# -*- coding: utf-8 -*-
+
+"""
+requests.structures
+~~~~~~~~~~~~~~~~~~~
+
+Datastructures that power Requests.
+
+"""
+
+from UserDict import DictMixin
+
+
+class CaseInsensitiveDict(DictMixin):
+ """Case-insensitive Dictionary for :class:`Response <models.Response>` Headers.
+
+ For example, ``headers['content-encoding']`` will return the
+ value of a ``'Content-Encoding'`` response header."""
+
+ def __init__(self, *args, **kwargs):
+ # super(CaseInsensitiveDict, self).__init__()
+ self.data = dict(*args, **kwargs)
+
+ def __repr__(self):
+ return self.data.__repr__()
+
+ def __getstate__(self):
+ return self.data.copy()
+
+ def __setstate__(self, d):
+ self.data = d
+
+ def _lower_keys(self):
+ return map(str.lower, self.data.keys())
+
+
+ def __contains__(self, key):
+ return key.lower() in self._lower_keys()
+
+
+ def __getitem__(self, key):
+
+ if key.lower() in self:
+ return self.items()[self._lower_keys().index(key.lower())][1]
+
+
+ def __setitem__(self, key, value):
+ return self.data.__setitem__(key, value)
+
+
+ def __delitem__(self, key):
+ return self.data.__delitem__(key)
+
+
+ def __keys__(self):
+ return self.data.__keys__()
+
+
+ def __iter__(self):
+ return self.data.__iter__()
+
+
+ def iteritems(self):
+ return self.data.iteritems()