[Repoze-checkins] r1134 - in repoze.zope2/trunk: . repoze/zope2 repoze/zope2/tests

Chris McDonough chrism at agendaless.com
Wed Jun 25 19:08:18 EDT 2008


Author: Chris McDonough <chrism at agendaless.com>
Date: Wed Jun 25 19:08:17 2008
New Revision: 1134

Log:
  - Add a configuration flag for the app:zope2 section: 'disable_gc'.
    If this flag exists and is true, disable Python garbage collection
    for the interpreter used to start the process.  This flag probably
    doesn't belong here.

  - More explictly call noSecurityManager and clear out instance
    variables in the bob helper's .teardown method in case a helper
    ever leaks.

  - Belatedly change Trove classifier to "Development Status :: 4 - Beta"
    (it was "Development Status :: 1 - Planning").



Modified:
   repoze.zope2/trunk/CHANGES.txt
   repoze.zope2/trunk/repoze/zope2/tests/test_z2bob.py
   repoze.zope2/trunk/repoze/zope2/z2bob.py
   repoze.zope2/trunk/setup.py

Modified: repoze.zope2/trunk/CHANGES.txt
==============================================================================
--- repoze.zope2/trunk/CHANGES.txt	(original)
+++ repoze.zope2/trunk/CHANGES.txt	Wed Jun 25 19:08:17 2008
@@ -1,4 +1,18 @@
-Next release
+0.4.4 (2008-06-25)
+
+  - Add a configuration flag for the app:zope2 section: 'disable_gc'.
+    If this flag exists and is true, disable Python garbage collection
+    for the interpreter used to start the process.  This flag probably
+    doesn't belong here.
+
+  - More explictly call noSecurityManager and clear out instance
+    variables in the bob helper's .teardown method in case a helper
+    ever leaks.
+
+  - Belatedly change Trove classifier to "Development Status :: 4 - Beta"
+    (it was "Development Status :: 1 - Planning").
+
+0.4.3 (2008-06-18)
 
   - Dont attempt any retries on conflict errors at startup.
     This was never tested, and probably didn't work.

Modified: repoze.zope2/trunk/repoze/zope2/tests/test_z2bob.py
==============================================================================
--- repoze.zope2/trunk/repoze/zope2/tests/test_z2bob.py	(original)
+++ repoze.zope2/trunk/repoze/zope2/tests/test_z2bob.py	Wed Jun 25 19:08:17 2008
@@ -31,6 +31,7 @@
 from repoze.zope2.tests.base import DummyPublishedObjectWithCallRoles
 from repoze.zope2.tests.base import DummyPermissiveUserFolder
 from repoze.zope2.tests.base import DummyNoPermissionsUserFolder
+from repoze.zope2.tests.base import DummyUser
 from repoze.zope2.tests.base import _BETTER_THAN_210
 
 class TestTopLevelFuncs(unittest.TestCase):
@@ -130,6 +131,25 @@
         self.assertEqual(helper.appname, 'Application')
         self.assertEqual(helper.browser_default_redirects, False)
 
+    def test_ctor_nondefaults(self):
+        environ = {}
+        import gc
+        if gc.isenabled():
+            reenable = True
+        else:
+            reenable = False
+        try:
+            helper = self._makeOne(environ, appname='Application2',
+                                   browser_default_redirects='true',
+                                   disable_gc='true')
+            self.assertEqual(helper.appname, 'Application2')
+            self.assertEqual(helper.browser_default_redirects, True)
+            self.assertEqual(gc.isenabled(), False)
+        finally:
+            if reenable:
+                gc.enable()
+        
+
     def test_setup(self):
         from zope.security.management import queryInteraction
         from zope.security.management import endInteraction
@@ -239,14 +259,24 @@
         from zope.security.management import queryInteraction
         from zope.security.management import newInteraction
         from zope.security.management import endInteraction
+        from AccessControl.SecurityManagement import newSecurityManager
+        from AccessControl.SecurityManagement import _managers
         helper = self._makeOne()
         if queryInteraction() is not None:
             endInteraction()
         newInteraction()
         interaction = queryInteraction()
+        newSecurityManager(None, DummyUser())
+        request = helper.request
         helper.teardown()
         self.assertEqual(queryInteraction(), None)
-        self.assertEqual(helper.request.closed, True)
+        self.assertEqual(request.closed, True)
+        self.assertEqual(_managers,{}) # noSecurityManager called
+        self.assertEqual(helper.request, None)
+        self.assertEqual(helper.user_folders, None)
+        self.assertEqual(helper.vroot_stack, None)
+        self.assertEqual(helper.root, None)
+        self.assertEqual(helper.browser_default_published, None)
 
     def test_next_name(self):
         helper = self._makeOne()

Modified: repoze.zope2/trunk/repoze/zope2/z2bob.py
==============================================================================
--- repoze.zope2/trunk/repoze/zope2/z2bob.py	(original)
+++ repoze.zope2/trunk/repoze/zope2/z2bob.py	Wed Jun 25 19:08:17 2008
@@ -156,6 +156,10 @@
         self.appname = config.get('appname', 'Application')
         self.browser_default_redirects = asbool(config.get(
             'browser_default_redirects', False))
+        # XXX hack for disable_gc: should be at higher level
+        if asbool(config.get('disable_gc', False)):
+            import gc
+            gc.disable()
 
     def __del__(self):
         if tm and not tm.isActive(self.environ):
@@ -221,6 +225,16 @@
         if self.request is not None:
             # if there was not an error during setup()
             self.request.close()
+        # be explicit about clearing out references; if we hang around
+        # for some reason, we don't want our subitems hanging around.
+        self.request = None
+        self.user_folders = None
+        self.vroot_stack = None
+        self.request = None
+        self.root = None
+        self.browser_default_published = None
+        # can't get rid of environ or conn as they're used in __del__
+        noSecurityManager()
 
     def next_name(self):
         trns = self.request['TraversalRequestNameStack']

Modified: repoze.zope2/trunk/setup.py
==============================================================================
--- repoze.zope2/trunk/setup.py	(original)
+++ repoze.zope2/trunk/setup.py	Wed Jun 25 19:08:17 2008
@@ -12,7 +12,7 @@
 #
 ##############################################################################
 
-__version__ = '0.4.3'
+__version__ = '0.4.4'
 
 from ez_setup import use_setuptools
 use_setuptools()
@@ -29,7 +29,7 @@
       description='Zope2 via WSGI and Paste',
       long_description=README + '\n\nCHANGES\n\n' + CHANGES,
       classifiers=[
-        "Development Status :: 1 - Planning",
+        "Development Status :: 4 - Beta",
         "Intended Audience :: Developers",
         "Programming Language :: Python",
         "Topic :: Internet :: WWW/HTTP",


More information about the Repoze-checkins mailing list