From f408829d516614c813a59621bfec9b09a6251da4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gul=C3=A1csi=20Tam=C3=A1s?= Date: Sat, 23 Jul 2011 22:15:28 +0200 Subject: [PATCH 1/4] test_request: simplejson is just as good as omnijson for test --- test_requests.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test_requests.py b/test_requests.py index f2aded24..c3f3395d 100755 --- a/test_requests.py +++ b/test_requests.py @@ -6,7 +6,10 @@ from __future__ import with_statement import unittest import cookielib -import omnijson as json +try: + import omnijson as json +except ImportError: + import simplejson as json import requests From 04c456b8775a2560d0fffad445745793929a82f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gul=C3=A1csi=20Tam=C3=A1s?= Date: Sat, 23 Jul 2011 22:16:12 +0200 Subject: [PATCH 2/4] structures: little bit more general, lower-key-caching version of CaseInsensitiveDict --- requests/structures.py | 31 +++++++++++++++++++++++++------ 1 file 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 ` 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 __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() - + 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 From 369e7cb38f7cd2b5ccbc86127d3a59f2fb8790c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gul=C3=A1csi=20Tam=C3=A1s?= Date: Sat, 23 Jul 2011 22:19:28 +0200 Subject: [PATCH 3/4] add myself to AUTHORS --- AUTHORS | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS b/AUTHORS index 1f7c743f..fd536448 100644 --- a/AUTHORS +++ b/AUTHORS @@ -28,3 +28,4 @@ Patches and Suggestions - Alberto Paro - Jérémy Bethmont - 潘旭 (Xu Pan) +- Tamás Gulácsi From 747f882b0e99f7d70e08acef78e517df93085c58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gul=C3=A1csi=20Tam=C3=A1s?= Date: Sat, 23 Jul 2011 22:25:07 +0200 Subject: [PATCH 4/4] structures: CaseInsensitiveDict.__delitem__ missing "value" fix --- requests/structures.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requests/structures.py b/requests/structures.py index b23b72b0..dd5168cf 100644 --- a/requests/structures.py +++ b/requests/structures.py @@ -29,7 +29,7 @@ class CaseInsensitiveDict(dict): self._clear_lower_keys() def __delitem__(self, key): - dict.__delitem__(self, key, value) + dict.__delitem__(self, key) self._lower_keys.clear() def __contains__(self, key):