diff options
| author | Chris McDonough <chrism@plope.com> | 2012-01-28 20:54:24 -0500 |
|---|---|---|
| committer | Chris McDonough <chrism@plope.com> | 2012-01-28 20:54:24 -0500 |
| commit | 3f71d70b3bb387115befc2e1dcd3cad066ccab22 (patch) | |
| tree | 93151119f0cbbc33acd5f6ea7709d45762ad4675 | |
| parent | 83fdc8663295c0a5221f79c08475eaf1e09777ef (diff) | |
| download | webob-3f71d70b3bb387115befc2e1dcd3cad066ccab22.tar.gz | |
give up on trying to encode header values when request.headers is used
| -rw-r--r-- | tests/test_headers.py | 61 | ||||
| -rw-r--r-- | webob/headers.py | 14 | ||||
| -rw-r--r-- | webob/request.py | 11 |
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__) |
