[Zope-Checkins] SVN: Zope/branches/2.9-layer-support/lib/python/Testing/ZopeTestCase/utils.py fixing missing part of patch

david whitfield Morriss whit at longnow.org
Sun Aug 20 16:20:04 EDT 2006


Log message for revision 69708:
  fixing missing part of patch
  

Changed:
  U   Zope/branches/2.9-layer-support/lib/python/Testing/ZopeTestCase/utils.py

-=-
Modified: Zope/branches/2.9-layer-support/lib/python/Testing/ZopeTestCase/utils.py
===================================================================
--- Zope/branches/2.9-layer-support/lib/python/Testing/ZopeTestCase/utils.py	2006-08-20 20:13:01 UTC (rev 69707)
+++ Zope/branches/2.9-layer-support/lib/python/Testing/ZopeTestCase/utils.py	2006-08-20 20:20:04 UTC (rev 69708)
@@ -24,15 +24,46 @@
 import random
 import transaction
 
+def appcall(function, *args, **kw):
+    '''Calls a function passing 'app' as first argument.'''
+    from base import app, close
+    app = app()
+    args = (app,) + args
+    try:
+        return function(*args, **kw)
+    finally:
+        transaction.abort()
+        close(app)
+        
 
+def deferToZ2Layer(function):
+    '''
+    decorator assumes following:
+
+    * function only takes one argument: app
+    
+    * if app is not passed in, function should be deferred 
+
+    deferral queues execution of the function to the setup call of
+    Testing.ZopeTestCase.layer.Zope2Layer
+    '''
+    def wrapped(*args, **kwargs):
+        if args or kwargs.get('app', None):
+            return function(*args, **kwargs)
+        else:
+            import layer
+            def curryAppCall(*args, **kwargs):
+                return appcall(function, *args, **kwargs)
+            return layer._z2_callables.append((curryAppCall, args, kwargs))
+    return wrapped
+
+
+ at deferToZ2Layer
 def setupCoreSessions(app=None):
     '''Sets up the session_data_manager e.a.'''
     from Acquisition import aq_base
     commit = 0
 
-    if app is None: 
-        return appcall(setupCoreSessions)
-
     if not hasattr(app, 'temp_folder'):
         from Products.TemporaryFolder.TemporaryFolder import MountedTemporaryFolder
         tf = MountedTemporaryFolder('temp_folder', 'Temporary Folder')
@@ -67,11 +98,9 @@
     if commit:
         transaction.commit()
 
-
+ at deferToZ2Layer
 def setupZGlobals(app=None):
     '''Sets up the ZGlobals BTree required by ZClasses.'''
-    if app is None: 
-        return appcall(setupZGlobals)
 
     root = app._p_jar.root()
     if not root.has_key('ZGlobals'):
@@ -79,11 +108,9 @@
         root['ZGlobals'] = OOBTree()
         transaction.commit()
 
-
+ at deferToZ2Layer
 def setupSiteErrorLog(app=None):
     '''Sets up the error_log object required by ZPublisher.'''
-    if app is None: 
-        return appcall(setupSiteErrorLog)
 
     if not hasattr(app, 'error_log'):
         try:
@@ -147,18 +174,6 @@
     return app.__of__(RequestContainer(REQUEST=request))
 
 
-def appcall(function, *args, **kw):
-    '''Calls a function passing 'app' as first argument.'''
-    from base import app, close
-    app = app()
-    args = (app,) + args
-    try:
-        return function(*args, **kw)
-    finally:
-        transaction.abort()
-        close(app)
-
-
 def makelist(arg):
     '''Turns arg into a list. Where arg may be
        list, tuple, or string.
@@ -171,7 +186,33 @@
        return filter(None, [arg])
     raise ValueError('Argument must be list, tuple, or string')
 
+def hasProduct(name):
+    '''Checks if a product can be found along Products.__path__'''
+    from OFS.Application import get_products
+    return name in [n[1] for n in get_products()]
 
+def _print(msg):
+    '''Writes 'msg' to stderr and flushes the stream.'''
+    sys.stderr.write(msg)
+    sys.stderr.flush()
+
+def setDebugMode(mode):
+    '''
+    Allows manual setting of Five's inspection of debug mode to allow for
+    zcml to fail meaningfully
+    '''
+    import Products.Five.fiveconfigure as fc
+    fc.debug_mode=mode
+
+def setAllLayers(suite, newlayer):
+    '''
+    helper function that iterates through all the subsuites in a
+    suite, resetting their layer to @param layer: the desired layer
+    class
+    '''
+    [setattr(subsuite, 'layer', newlayer) for subsuite in suite]
+    return suite
+
 __all__ = [
     'setupCoreSessions',
     'setupSiteErrorLog',
@@ -181,5 +222,9 @@
     'appcall',
     'makerequest',
     'makelist',
+    'hasProduct',
+    'setDebugMode',
+    '_print',
+    'setAllLayers'
 ]
 



More information about the Zope-Checkins mailing list