summaryrefslogtreecommitdiffstats
path: root/Lib/wsgiref/headers.py
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2009-01-03 18:41:49 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2009-01-03 18:41:49 (GMT)
commit38a66adccbef4a2b2e0ad57024a2398939f47ec2 (patch)
treeb5663d1f8cd3f844cddba6794d0cbc262c5cc4db /Lib/wsgiref/headers.py
parentffe431d8bda82db8e478930fc46a0764fcbe879b (diff)
downloadcpython-38a66adccbef4a2b2e0ad57024a2398939f47ec2.zip
cpython-38a66adccbef4a2b2e0ad57024a2398939f47ec2.tar.gz
cpython-38a66adccbef4a2b2e0ad57024a2398939f47ec2.tar.bz2
Issue #4718: Adapt the wsgiref package so that it actually works with Python 3.x,
in accordance with http://www.wsgi.org/wsgi/Amendments_1.0
Diffstat (limited to 'Lib/wsgiref/headers.py')
-rw-r--r--Lib/wsgiref/headers.py25
1 files changed, 21 insertions, 4 deletions
diff --git a/Lib/wsgiref/headers.py b/Lib/wsgiref/headers.py
index c3774bb..83074af 100644
--- a/Lib/wsgiref/headers.py
+++ b/Lib/wsgiref/headers.py
@@ -44,7 +44,19 @@ class Headers:
def __init__(self,headers):
if not isinstance(headers, list):
raise TypeError("Headers must be a list of name/value tuples")
- self._headers = headers
+ self._headers = []
+ for k, v in headers:
+ k = self._convert_string_type(k)
+ v = self._convert_string_type(v)
+ self._headers.append((k, v))
+
+ def _convert_string_type(self, value):
+ """Convert/check value type."""
+ if isinstance(value, str):
+ return value
+ assert isinstance(value, bytes), ("Header names/values must be"
+ " a string or bytes object (not {0})".format(value))
+ return str(value, "iso-8859-1")
def __len__(self):
"""Return the total number of headers, including duplicates."""
@@ -53,7 +65,8 @@ class Headers:
def __setitem__(self, name, val):
"""Set the value of a header."""
del self[name]
- self._headers.append((name, val))
+ self._headers.append(
+ (self._convert_string_type(name), self._convert_string_type(val)))
def __delitem__(self,name):
"""Delete all occurrences of a header, if present.
@@ -152,7 +165,8 @@ class Headers:
and value 'value'."""
result = self.get(name)
if result is None:
- self._headers.append((name,value))
+ self._headers.append((self._convert_string_type(name),
+ self._convert_string_type(value)))
return value
else:
return result
@@ -176,13 +190,16 @@ class Headers:
"""
parts = []
if _value is not None:
+ _value = self._convert_string_type(_value)
parts.append(_value)
for k, v in _params.items():
+ k = self._convert_string_type(k)
if v is None:
parts.append(k.replace('_', '-'))
else:
+ v = self._convert_string_type(v)
parts.append(_formatparam(k.replace('_', '-'), v))
- self._headers.append((_name, "; ".join(parts)))
+ self._headers.append((self._convert_string_type(_name), "; ".join(parts)))