[Zope-dev] WSGIPublisher and Five

Laurence Rowe l at lrowe.co.uk
Sun May 20 16:21:41 EDT 2007


I'm trying to work out how to use WSGI with Zope, as I believe that this 
is the way to attach a filter to Zope output. However the  seem to be 
some issues with Zope 2.10.3. Setting use-wsgi on in zope.conf seems to 
break Five. The interfaces tab is no longer visible in the ZMI and Plone 
stops working (giving me an AttributeError: @@plone). This seems tricky 
to debug though as ZPublisher.test still works.

Changing ZPublisher.Test.publish_method to use WSGIPublisher.publish 
rather than Publish.publish brings up the zope 3 security issues when 
running the Five tests as bug #2190, but these can be fixed with the 
same interaction fix that Philipp applied to Publish.py in r71819 (see 
attached diff). Having applied this fix I still get the same problems 
with AttributeError: @@plone and the manage_interfaces tab not showing up.

If anyone has an example of attaching a filter to Zope output using WSGI 
  you'd make my day.

Laurence
-------------- next part --------------
Index: Test.py
===================================================================
--- Test.py	(revision 75846)
+++ Test.py	(working copy)
@@ -92,6 +92,7 @@
 
 $Id$
 '''
+#' Waaaa 2
 __version__='$Revision: 1.41 $'[11:-2]
 
 DONE_STRING_DEFAULT = '\n%s\n\n' % ('_'*60)
@@ -180,7 +181,7 @@
     after_list=[None]
     from Response import Response
     from Request import Request
-    from Publish import publish
+    from WSGIPublisher import publish
     try:
         try:
             if response is None:
Index: WSGIPublisher.py
===================================================================
--- WSGIPublisher.py	(revision 75846)
+++ WSGIPublisher.py	(working copy)
@@ -23,6 +23,7 @@
 from zExceptions import Redirect
 from cStringIO import StringIO
 from ZServer.medusa.http_date import build_http_date
+from zope.security.management import newInteraction, endInteraction
 
 class WSGIResponse(Response):
     """A response object for WSGI
@@ -164,6 +165,9 @@
     parents=None
     response=None
     try:
+        # TODO pass request here once BaseRequest implements IParticipation
+        newInteraction()
+        
         request.processInputs()
 
         request_get=request.get
@@ -209,6 +213,7 @@
 
         if transactions_manager:
             transactions_manager.commit()
+        endInteraction()
 
         return response
     except:
@@ -245,6 +250,7 @@
             finally:
                 if transactions_manager:
                     transactions_manager.abort()
+                endInteraction()
 
             # Only reachable if Retry is raised and request supports retry.
             newrequest=request.retry()
@@ -257,6 +263,7 @@
         else:
             if transactions_manager:
                 transactions_manager.abort()
+            endInteraction()
             raise
 
 def publish_module_standard(environ, start_response):


More information about the Zope-Dev mailing list