summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorianb <devnull@localhost>2007-01-16 15:12:13 +0000
committerianb <devnull@localhost>2007-01-16 15:12:13 +0000
commit3e6dab79a2a8a158c97f1f067873bc7abe775188 (patch)
treef398a7f198985e02d37dfc546dcd24e1e748269b
parenteec15e69be44b502fc557886d48c3c8c3a846aeb (diff)
downloadpaste-3e6dab79a2a8a158c97f1f067873bc7abe775188.tar.gz
CONTENT_LENGTH/Content-Length fix in HeaderDict
-rw-r--r--docs/news.txt3
-rw-r--r--paste/request.py37
2 files changed, 28 insertions, 12 deletions
diff --git a/docs/news.txt b/docs/news.txt
index 1865d32..b011bd2 100644
--- a/docs/news.txt
+++ b/docs/news.txt
@@ -17,6 +17,9 @@ svn trunk
* Added entry point for ``paste.registry.RegistryManager``
(``egg:Paste#registry``).
+* ``paste.request.HeaderDict`` fixed to know that ``Content-Length``
+ maps to ``CONTENT_LENGTH``.
+
1.1.1
-----
diff --git a/paste/request.py b/paste/request.py
index 6968c5b..0b49e54 100644
--- a/paste/request.py
+++ b/paste/request.py
@@ -332,33 +332,46 @@ class EnvironHeaders(DictMixin):
def __init__(self, environ):
self.environ = environ
+
+ def _trans_name(self, name):
+ key = 'HTTP_'+name.replace('-', '_').upper()
+ if key == 'HTTP_CONTENT_LENGTH':
+ key = 'CONTENT_LENGTH'
+ elif key == 'HTTP_CONTENT_TYPE':
+ key = 'CONTENT_TYPE'
+ return key
+
+ def _trans_key(self, key):
+ if key == 'CONTENT_TYPE':
+ return 'Content-Type'
+ elif key == 'CONTENT_LENGTH':
+ return 'Content-Length'
+ elif key.startswith('HTTP_'):
+ return key[5:].replace('_', '-').title()
+ else:
+ return None
def __getitem__(self, item):
- item = item.replace('-', '_').upper()
- return self.environ['HTTP_'+item]
+ return self.environ[self._trans_name(item)]
def __setitem__(self, item, value):
# @@: Should this dictionary be writable at all?
- item = item.replace('-', '_').upper()
- self.environ['HTTP_'+item] = value
+ self.environ[self._trans_name(item)] = value
def __delitem__(self, item):
- item = item.replace('-', '_').upper()
- del self.environ['HTTP_'+item]
+ del self.environ[self._trans_name(item)]
def __iter__(self):
for key in self.environ:
- if not key.startswith('HTTP_'):
- continue
- key = key[5:].replace('_', '-').title()
- yield key
+ name = self._trans_key(key)
+ if name is not None:
+ yield name
def keys(self):
return list(self)
def __contains__(self, item):
- item = item.replace('-', '_').upper()
- return 'HTTP_'+item in self.environ
+ return self._trans_name(item) in self.environ
def _cgi_FieldStorage__repr__patch(self):
""" monkey patch for FieldStorage.__repr__