summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2012-01-28 20:54:24 -0500
committerChris McDonough <chrism@plope.com>2012-01-28 20:54:24 -0500
commit3f71d70b3bb387115befc2e1dcd3cad066ccab22 (patch)
tree93151119f0cbbc33acd5f6ea7709d45762ad4675
parent83fdc8663295c0a5221f79c08475eaf1e09777ef (diff)
downloadwebob-3f71d70b3bb387115befc2e1dcd3cad066ccab22.tar.gz
give up on trying to encode header values when request.headers is used
-rw-r--r--tests/test_headers.py61
-rw-r--r--webob/headers.py14
-rw-r--r--webob/request.py11
3 files changed, 35 insertions, 51 deletions
diff --git a/tests/test_headers.py b/tests/test_headers.py
index 47e62dc..8bcf2d6 100644
--- a/tests/test_headers.py
+++ b/tests/test_headers.py
@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
-import unittest
-
from webob import headers
from nose.tools import ok_, assert_raises, eq_
@@ -77,6 +75,27 @@ def test_ResponseHeaders_contains():
ok_('a' in d)
ok_(not 'b' in d)
+def test_EnvironHeaders_delitem():
+ d = headers.EnvironHeaders({'CONTENT_LENGTH': '10'})
+ del d['CONTENT-LENGTH']
+ assert not d
+ assert_raises(KeyError, d.__delitem__, 'CONTENT-LENGTH')
+
+def test_EnvironHeaders_getitem():
+ d = headers.EnvironHeaders({'CONTENT_LENGTH': '10'})
+ eq_(d['CONTENT-LENGTH'], '10')
+
+def test_EnvironHeaders_setitem():
+ d = headers.EnvironHeaders({})
+ d['abc'] = '10'
+ eq_(d['abc'], '10')
+
+def test_EnvironHeaders_contains():
+ d = headers.EnvironHeaders({})
+ d['a'] = '10'
+ ok_('a' in d)
+ ok_(not 'b' in d)
+
def test__trans_key_not_basestring():
result = headers._trans_key(None)
eq_(result, None)
@@ -92,41 +111,3 @@ def test__trans_key_key2header():
def test__trans_key_httpheader():
result = headers._trans_key('HTTP_FOO_BAR')
eq_(result, 'Foo-Bar')
-
-class TestEnvironHeaders(unittest.TestCase):
- def _makeOne(self, env=None):
- if env is None:
- env = {}
- req = DummyRequest(env)
- from webob.headers import EnvironHeaders
- return EnvironHeaders(req)
-
- def test___delitem__(self):
- d = self._makeOne({'CONTENT_LENGTH': '10'})
- del d['CONTENT-LENGTH']
- assert not d
- assert_raises(KeyError, d.__delitem__, 'CONTENT-LENGTH')
-
- def test___getitem__(self):
- d = self._makeOne({'CONTENT_LENGTH': '10'})
- eq_(d['CONTENT-LENGTH'], '10')
-
- def test___setitem__(self):
- d = self._makeOne({})
- d['abc'] = '10'
- eq_(d['abc'], '10')
-
- def test___contains__(self):
- d = self._makeOne({})
- d['a'] = '10'
- ok_('a' in d)
- ok_(not 'b' in d)
-
-class DummyRequest(object):
- def __init__(self, environ):
- self.environ = environ
- def encset(self, k, v):
- self.environ[k] = v
- def encget(self, k):
- return self.environ[k]
-
diff --git a/webob/headers.py b/webob/headers.py
index d2161d9..e2f5e34 100644
--- a/webob/headers.py
+++ b/webob/headers.py
@@ -132,23 +132,23 @@ class EnvironHeaders(MutableMapping):
headers).
"""
- def __init__(self, req):
- self.req = req
+ def __init__(self, environ):
+ self.environ = environ
def __getitem__(self, hname):
- return self.req.encget(_trans_name(hname))
+ return self.environ[_trans_name(hname)]
def __setitem__(self, hname, value):
- self.req.encset(_trans_name(hname), value)
+ self.environ[_trans_name(hname)] = value
def __delitem__(self, hname):
- del self.req.environ[_trans_name(hname)]
+ del self.environ[_trans_name(hname)]
def keys(self):
- return filter(None, map(_trans_key, self.req.environ))
+ return filter(None, map(_trans_key, self.environ))
def __contains__(self, hname):
- return _trans_name(hname) in self.req.environ
+ return _trans_name(hname) in self.environ
def __len__(self):
return len(list(self.keys()))
diff --git a/webob/request.py b/webob/request.py
index d526579..ec799a9 100644
--- a/webob/request.py
+++ b/webob/request.py
@@ -357,17 +357,20 @@ class BaseRequest(object):
_content_type__set,
_content_type__get.__doc__)
+ _headers = None
+
def _headers__get(self):
"""
All the request headers as a case-insensitive dictionary-like
object.
"""
- return EnvironHeaders(self)
+ if self._headers is None:
+ self._headers = EnvironHeaders(self.environ)
+ return self._headers
def _headers__set(self, value):
- headers = self.headers
- headers.clear()
- headers.update(value)
+ self.headers.clear()
+ self.headers.update(value)
headers = property(_headers__get, _headers__set, doc=_headers__get.__doc__)