[Checkins] SVN: zope.app.wsgi/trunk/ - Fixed: zope.app.wsgi.paste.ZopeApplication didn't emit

Jim Fulton jim at zope.com
Thu Jan 19 15:03:08 UTC 2012


Log message for revision 124089:
  - Fixed: zope.app.wsgi.paste.ZopeApplication didn't emit
    ProcessStarting events.
  

Changed:
  U   zope.app.wsgi/trunk/CHANGES.txt
  U   zope.app.wsgi/trunk/setup.py
  U   zope.app.wsgi/trunk/src/zope/app/wsgi/paste.py
  U   zope.app.wsgi/trunk/src/zope/app/wsgi/tests.py

-=-
Modified: zope.app.wsgi/trunk/CHANGES.txt
===================================================================
--- zope.app.wsgi/trunk/CHANGES.txt	2012-01-19 13:04:19 UTC (rev 124088)
+++ zope.app.wsgi/trunk/CHANGES.txt	2012-01-19 15:03:08 UTC (rev 124089)
@@ -2,11 +2,17 @@
 CHANGES
 =======
 
-3.14.1 (unreleased)
+3.15.0 (2012-01-19)
 -------------------
 
-- Nothing to release yet.
+- Fixed: zope.app.wsgi.paste.ZopeApplication didn't emit
+  ProcessStarting events.
 
+  **NOTE**
+    If an application compensated for this by generating the event, it
+    will need to stop or there will be multiple events
+    emited. (Whether or not multiple events will do any harm is
+    application specific.)
 
 3.14.0 (2012-01-10)
 -------------------

Modified: zope.app.wsgi/trunk/setup.py
===================================================================
--- zope.app.wsgi/trunk/setup.py	2012-01-19 13:04:19 UTC (rev 124088)
+++ zope.app.wsgi/trunk/setup.py	2012-01-19 15:03:08 UTC (rev 124089)
@@ -68,7 +68,16 @@
           'zope.publisher',
           'zope.security',
           'zope.component',
+          'zope.configuration',
+          'zope.container',
+          'zope.error',
+          'zope.lifecycleevent',
+          'zope.processlifetime',
+          'zope.session',
+          'zope.site',
           'zope.testbrowser[wsgi] >= 4.0.0',
+          'zope.testing',
+          'zope.traversing',
           ],
       entry_points={
           'paste.app_factory': [

Modified: zope.app.wsgi/trunk/src/zope/app/wsgi/paste.py
===================================================================
--- zope.app.wsgi/trunk/src/zope/app/wsgi/paste.py	2012-01-19 13:04:19 UTC (rev 124088)
+++ zope.app.wsgi/trunk/src/zope/app/wsgi/paste.py	2012-01-19 15:03:08 UTC (rev 124089)
@@ -16,6 +16,8 @@
 $Id$
 """
 from zope.app.wsgi import getWSGIApplication
+import zope.event
+import zope.processlifetime
 
 
 def asbool(obj):
@@ -30,4 +32,6 @@
 
 def ZopeApplication(global_config, config_file, handle_errors=True, **options):
     handle_errors = asbool(handle_errors)
-    return getWSGIApplication(config_file, handle_errors=handle_errors)
+    app = getWSGIApplication(config_file, handle_errors=handle_errors)
+    zope.event.notify(zope.processlifetime.ProcessStarting())
+    return app

Modified: zope.app.wsgi/trunk/src/zope/app/wsgi/tests.py
===================================================================
--- zope.app.wsgi/trunk/src/zope/app/wsgi/tests.py	2012-01-19 13:04:19 UTC (rev 124088)
+++ zope.app.wsgi/trunk/src/zope/app/wsgi/tests.py	2012-01-19 15:03:08 UTC (rev 124089)
@@ -26,7 +26,43 @@
 def cleanEvents(s):
     zope.event.subscribers.pop()
 
+def creating_app_w_paste_emits_ProcessStarting_event():
+    """
+    >>> import zope.event
+    >>> events = []
+    >>> subscriber = events.append
+    >>> zope.event.subscribers.append(subscriber)
 
+    >>> import os, tempfile
+    >>> temp_dir = tempfile.mkdtemp()
+    >>> sitezcml = os.path.join(temp_dir, 'site.zcml')
+    >>> open(sitezcml, 'w').write('<configure />')
+    >>> zopeconf = os.path.join(temp_dir, 'zope.conf')
+    >>> open(zopeconf, 'w').write('''
+    ... site-definition %s
+    ...
+    ... <zodb>
+    ...   <mappingstorage />
+    ... </zodb>
+    ...
+    ... <eventlog>
+    ...   <logfile>
+    ...     path STDOUT
+    ...   </logfile>
+    ... </eventlog>
+    ... ''' % sitezcml)
+
+    >>> import zope.app.wsgi.paste, zope.processlifetime
+    >>> app = zope.app.wsgi.paste.ZopeApplication(
+    ...     {}, zopeconf, handle_errors=False)
+
+    >>> len([e for e in events
+    ...     if isinstance(e, zope.processlifetime.ProcessStarting)]) == 1
+    True
+
+    >>> zope.event.subscribers.remove(subscriber)
+    """
+
 def test_suite():
 
     checker = renormalizing.RENormalizing([
@@ -36,6 +72,8 @@
         ])
     filereturns_suite = doctest.DocFileSuite('filereturns.txt')
     filereturns_suite.layer = BrowserLayer(zope.app.wsgi)
+    dt_suite = doctest.DocTestSuite()
+    dt_suite.layer = BrowserLayer(zope.app.wsgi)
 
     readme_test = doctest.DocFileSuite(
             'README.txt',
@@ -56,4 +94,6 @@
     testlayer_suite.layer = SillyMiddleWareBrowserLayer(zope.app.wsgi)
 
     return unittest.TestSuite((
-        filereturns_suite, readme_test, doctest_suite, testlayer_suite))
+        filereturns_suite, readme_test, doctest_suite, testlayer_suite,
+        dt_suite,
+        ))



More information about the checkins mailing list