diff -r 401e8882baf9 Doc/library/wsgiref.rst --- a/Doc/library/wsgiref.rst Sun Mar 06 12:24:49 2011 +0100 +++ b/Doc/library/wsgiref.rst Sun Mar 06 13:29:49 2011 +0000 @@ -184,7 +184,7 @@ manipulation of WSGI response headers using a mapping-like interface. -.. class:: Headers(headers) +.. class:: Headers([headers]) Create a mapping-like object wrapping *headers*, which must be a list of header name/value tuples as described in :pep:`3333`. diff -r 401e8882baf9 Lib/test/test_wsgiref.py --- a/Lib/test/test_wsgiref.py Sun Mar 06 12:24:49 2011 +0100 +++ b/Lib/test/test_wsgiref.py Sun Mar 06 13:29:49 2011 +0000 @@ -28,7 +28,6 @@ self.server_port = port self.setup_environ() - class MockHandler(WSGIRequestHandler): """Non-socket HTTP handler""" def setup(self): @@ -38,10 +37,6 @@ def finish(self): pass - - - - def hello_app(environ,start_response): start_response("200 OK", [ ('Content-Type','text/plain'), @@ -63,28 +58,6 @@ return out.getvalue(), err.getvalue() - - - - - - - - - - - - - - - - - - - - - - def compare_generic_iter(make_it,match): """Utility to compare a generic 2.1/2.2+ iterator with an iterable @@ -121,11 +94,6 @@ else: raise AssertionError("Too many items from .__next__()", it) - - - - - class IntegrationTests(TestCase): def check_hello(self, out, has_length=True): @@ -373,14 +341,15 @@ def testMappingInterface(self): test = [('x','y')] - self.assertEqual(len(Headers([])),0) - self.assertEqual(len(Headers(test[:])),1) + self.assertEqual(len(Headers()), 0) + self.assertEqual(len(Headers([])), 0) + self.assertEqual(len(Headers(test[:])), 1) self.assertEqual(Headers(test[:]).keys(), ['x']) self.assertEqual(Headers(test[:]).values(), ['y']) self.assertEqual(Headers(test[:]).items(), test) self.assertFalse(Headers(test).items() is test) # must be copy! - h=Headers([]) + h=Headers() del h['foo'] # should not raise an error h['Foo'] = 'bar' @@ -405,9 +374,8 @@ def testRequireList(self): self.assertRaises(TypeError, Headers, "foo") - def testExtras(self): - h = Headers([]) + h = Headers() self.assertEqual(str(h),'\r\n') h.add_header('foo','bar',baz="spam") @@ -445,16 +413,6 @@ def handle_error(self): raise # for testing, we want to see what's happening - - - - - - - - - - class HandlerTests(TestCase): def checkEnvironAttrs(self, handler): @@ -504,7 +462,6 @@ self.assertRaises(NotImplementedError, getattr(h,name)) self.assertRaises(NotImplementedError, h._write, "test") - def testContentLength(self): # Demo one reason iteration is better than write()... ;) @@ -596,7 +553,6 @@ "\r\n".encode("iso-8859-1")+MSG)) self.assertIn("AssertionError", h.stderr.getvalue()) - def testHeaderFormats(self): def non_error_app(e,s): diff -r 401e8882baf9 Lib/wsgiref/headers.py --- a/Lib/wsgiref/headers.py Sun Mar 06 12:24:49 2011 +0100 +++ b/Lib/wsgiref/headers.py Sun Mar 06 13:29:49 2011 +0000 @@ -24,12 +24,11 @@ else: return param - class Headers: - """Manage a collection of HTTP response headers""" - def __init__(self,headers): + def __init__(self, headers=None): + headers = headers if headers is not None else [] if type(headers) is not list: raise TypeError("Headers must be a list of name/value tuples") self._headers = headers @@ -55,7 +54,7 @@ self._headers.append( (self._convert_string_type(name), self._convert_string_type(val))) - def __delitem__(self,name): + def __delitem__(self, name): """Delete all occurrences of a header, if present. Does *not* raise an exception if the header is missing. @@ -63,7 +62,7 @@ name = self._convert_string_type(name.lower()) self._headers[:] = [kv for kv in self._headers if kv[0].lower() != name] - def __getitem__(self,name): + def __getitem__(self, name): """Get the first header value for 'name' Return None if the header is missing instead of raising an exception. @@ -78,7 +77,6 @@ """Return true if the message contains the header.""" return self.get(name) is not None - def get_all(self, name): """Return a list of all the values for the named field. @@ -88,18 +86,16 @@ If no fields exist with the given name, returns an empty list. """ name = self._convert_string_type(name.lower()) - return [kv[1] for kv in self._headers if kv[0].lower()==name] + return [v for k, v in self._headers if k.lower() == name] - - def get(self,name,default=None): + def get(self, name, default=None): """Get the first header value for 'name', or return 'default'""" name = self._convert_string_type(name.lower()) - for k,v in self._headers: + for k, v in self._headers: if k.lower()==name: return v return default - def keys(self): """Return a list of all the header field names. @@ -141,7 +137,7 @@ def __bytes__(self): return str(self).encode('iso-8859-1') - def setdefault(self,name,value): + def setdefault(self, name, value): """Return first matching header value for 'name', or 'value' If there is no header named 'name', add a new header with name 'name'