[Zope-dev] SVN: zope.server/branches/achapman-exc-info/src/zope/server/http/ further compliance with WSGI PEP.

Satchidanand Haridas satchit at zope.com
Tue May 17 18:12:27 EDT 2011


On May 17, 2011, at 12:02 PM, Tres Seaver wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
> 
> On 05/17/2011 10:14 AM, Satchidanand Haridas wrote:
> 
>> --- zope.server/branches/achapman-exc-info/src/zope/server/http/wsgihttpserver.py	2011-05-17 12:41:54 UTC (rev 121686)
>> +++ zope.server/branches/achapman-exc-info/src/zope/server/http/wsgihttpserver.py	2011-05-17 14:14:20 UTC (rev 121687)
>> @@ -77,12 +77,16 @@
>>         env = self._constructWSGIEnvironment(task)
>> 
>>         def start_response(status, headers, exc_info=None):
>> +            if task.wroteResponseHeader() and not exc_info:
>> +                raise AssertionError("start_response called a second time "
>> +                                     "without providing exc_info.")
>>             if exc_info:
>>                 try:
>>                     if task.wroteResponseHeader():
>>                         raise exc_info[0], exc_info[1], exc_info[2]
>>                     else:
>> -                        pass
>> +                        # As per WSGI spec existing headers must be cleared
>> +                        task.accumulated_headers = None
>>                 finally:
>>                     exc_info = None
>>             # Prepare the headers for output
>> @@ -110,12 +114,16 @@
>>         env['wsgi.handleErrors'] = False
>> 
>>         def start_response(status, headers, exc_info=None):
>> +            if task.wroteResponseHeader() and not exc_info:
>> +                raise AssertionError("start_response called a second time "
>> +                                     "without providing exc_info.")
>>             if exc_info:
>>                 try:
>>                     if task.wroteResponseHeader():
>>                         raise exc_info[0], exc_info[1], exc_info[2]
>>                     else:
>> -                        pass
>> +                        # As per WSGI spec existing headers must be cleared
>> +                        task.accumulated_headers = None
>>                 finally:
>>                     exc_info = None
>>             # Prepare the headers for output
> 
> I think AssertionError is the wrong type of exception here:  it has
> "debugging / testing" semantics which seem inappropriate.  I think we
> would be better of raising an instance of a WSGI-specific exception type
> 

The WSGI PEP doesn't specify any WSGI specific exceptions. 

- The sample CGI example that the PEP provides  also raises an AssertionError for this scenario:

	http://www.python.org/dev/peps/pep-0333/#the-server-gateway-side

Also note that Paste's HTTP server (Paster) and CherryPy both raise AssertionErrors for this scenario:

- Paste: https://bitbucket.org/ianb/paste/src/4f5cfde87603/paste/httpserver.py#cl-166

- CherryPy: http://www.cherrypy.org/browser/trunk/py2/cherrypy/wsgiserver/__init__.py#L2050


Can you clarify what you meant by a WSGI-specific exception type?



> Thanks for the careful testing!
> 
> 
> 
> Tres.
> - -- 
> ===================================================================
> Tres Seaver          +1 540-429-0999          tseaver at palladion.com
> Palladion Software   "Excellence by Design"    http://palladion.com
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.10 (GNU/Linux)
> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
> 
> iEYEARECAAYFAk3Sm/gACgkQ+gerLs4ltQ7oVQCfa0vEWPcASmLdO2BDeEzoeI5j
> eZYAniT/BCbFojmKxjq0did6wXLmmmiG
> =udSc
> -----END PGP SIGNATURE-----
> 
> _______________________________________________
> Zope-Dev maillist  -  Zope-Dev at zope.org
> https://mail.zope.org/mailman/listinfo/zope-dev
> **  No cross posts or HTML encoding!  **
> (Related lists - 
> https://mail.zope.org/mailman/listinfo/zope-announce
> https://mail.zope.org/mailman/listinfo/zope )

Satchidanand Haridas
Software Engineer, Zope Corporation





More information about the Zope-Dev mailing list