[Checkins] SVN: zc.buildout/branches/aaron-testing-changes/src/zc/buildout/ Made some changes so that the testing functions can share exception handling

Aaron Lehmann aaron at zope.com
Sat Nov 15 01:41:13 EST 2008


Log message for revision 92955:
  Made some changes so that the testing functions can share exception handling
  with the main buildout.
  
  

Changed:
  U   zc.buildout/branches/aaron-testing-changes/src/zc/buildout/buildout.py
  U   zc.buildout/branches/aaron-testing-changes/src/zc/buildout/buildout.txt
  U   zc.buildout/branches/aaron-testing-changes/src/zc/buildout/testing.py
  U   zc.buildout/branches/aaron-testing-changes/src/zc/buildout/tests.py

-=-
Modified: zc.buildout/branches/aaron-testing-changes/src/zc/buildout/buildout.py
===================================================================
--- zc.buildout/branches/aaron-testing-changes/src/zc/buildout/buildout.py	2008-11-15 00:31:32 UTC (rev 92954)
+++ zc.buildout/branches/aaron-testing-changes/src/zc/buildout/buildout.py	2008-11-15 06:41:13 UTC (rev 92955)
@@ -1477,40 +1477,50 @@
     else:
         command = 'install'
 
-    return (config_file, options, user_defaults, windows_restart, command, debug)
+    return (debug, config_file, options, user_defaults, windows_restart, command)
 
-def main(args=None):
-    config_file, options, user_defaults, windows_restart, command, debug = parse(args)
+def handle_internal_error(exc_info):
+    import traceback
+    sys.stderr.write(_internal_error_template)
+    traceback.print_exception(*exc_info)
+    sys.exit(1)
 
+def except_(func, debug=False, *args):
+    ret = None
     try:
-        try:
-            buildout = Buildout(config_file, options,
-                                user_defaults, windows_restart, command)
-            getattr(buildout, command)(args)
-        except SystemExit:
-            pass
-        except Exception, v:
+        ret = func(*args)
+    except SystemExit:
+        pass
+    except Exception, v:
+        exc_info = sys.exc_info()
+        import pdb, traceback
+        if debug:
             _doing()
-            exc_info = sys.exc_info()
-            import pdb, traceback
-            if debug:
-                traceback.print_exception(*exc_info)
-                sys.stderr.write('\nStarting pdb:\n')
-                pdb.post_mortem(exc_info[2])
+            traceback.print_exception(*exc_info)
+            sys.stderr.write('\nStarting pdb:\n')
+            pdb.post_mortem(exc_info[2])
+        else:
+            if isinstance(v, (zc.buildout.UserError,
+                                distutils.errors.DistutilsError,
+                                )
+                            ):
+                _doing()
+                _error(str(v))
             else:
-                if isinstance(v, (zc.buildout.UserError,
-                                  distutils.errors.DistutilsError,
-                                  )
-                              ):
-                    _error(str(v))
-                else:
-                    sys.stderr.write(_internal_error_template)
-                    traceback.print_exception(*exc_info)
-                    sys.exit(1)
-    
-            
+                handle_internal_error(exc_info)
+    return ret
+
+def main(args=None):
+    def do_stuff(
+        config_file, options, user_defaults, windows_restart, command):
+        buildout = Buildout(config_file, options,
+                            user_defaults, windows_restart, command)
+        getattr(buildout, command)(args)
+
+    try:
+        except_(do_stuff, *(parse(args)))
     finally:
-            logging.shutdown()
+        logging.shutdown()
 
 if sys.version_info[:2] < (2, 4):
     def reversed(iterable):

Modified: zc.buildout/branches/aaron-testing-changes/src/zc/buildout/buildout.txt
===================================================================
--- zc.buildout/branches/aaron-testing-changes/src/zc/buildout/buildout.txt	2008-11-15 00:31:32 UTC (rev 92954)
+++ zc.buildout/branches/aaron-testing-changes/src/zc/buildout/buildout.txt	2008-11-15 06:41:13 UTC (rev 92955)
@@ -456,7 +456,6 @@
     >>> bootstrapBuildout(bo)
     >>> installBuildout(bo)
     Develop: '/sample-buildout/recipes'
-    Uninstalling data-dir.
     Installing data-dir.
     data-dir: Creating directory foo
     data-dir: Creating directory bin

Modified: zc.buildout/branches/aaron-testing-changes/src/zc/buildout/testing.py
===================================================================
--- zc.buildout/branches/aaron-testing-changes/src/zc/buildout/testing.py	2008-11-15 00:31:32 UTC (rev 92954)
+++ zc.buildout/branches/aaron-testing-changes/src/zc/buildout/testing.py	2008-11-15 06:41:13 UTC (rev 92955)
@@ -19,6 +19,7 @@
 import BaseHTTPServer, os, random, re, shutil, socket, sys
 import tempfile, threading, time, urllib2, errno
 import pkg_resources
+import traceback
 
 import zc.buildout.buildout
 import zc.buildout.easy_install
@@ -294,7 +295,6 @@
         zc.buildout.buildout.Buildout.root_handler = None
         zc.buildout.buildout.Buildout.zc_buildout_handler = None
 
-
     setup_template = ("from setuptools import setup\n"
                      "setup(\n"
                      "    name = \"%s\",\n"
@@ -322,7 +322,8 @@
             write(sample_buildout, recipe_dir, 'setup.py',
                   setup_template % (recipe_dir, entries))
         write(sample_buildout, 'buildout.cfg', cfg)
-        return zc.buildout.buildout.Buildout(*(zc.buildout.buildout.parse([])[:5]))
+        return zc.buildout.buildout.Buildout(
+            *(zc.buildout.buildout.parse([])[1:6]))
 
     test.globs.update(dict(
         sample_buildout = sample,
@@ -341,26 +342,63 @@
         bdist_egg = bdist_egg,
         start_server = start_server,
         buildout = os.path.join(sample, 'bin', 'buildout'),
-        bootstrapBuildout = lambda buildout:bootstrapBuildout(test, buildout),
+        bootstrapBuildout = (
+            lambda buildout:zc.buildout.buildout.except_(
+                bootstrapBuildout, False, test, buildout)),
         installBuildout = (
             lambda buildout,
                    install_args=None,
-                   uninstall_args=None:installBuildout(
-                test, buildout, install_args, uninstall_args)),
+                   uninstall_args=None:zc.buildout.buildout.except_(
+                    installBuildout, False,
+                    test, buildout, install_args, uninstall_args)),
         setupConfig = (
             lambda cfg,
                    sample_buildout=None,
                    recipe_name='',
                    recipe_dir='',
-                   recipes=None:setupConfig(test,
+                   recipes=None:zc.buildout.buildout.except_(setupConfig, False,
+                                            test,
                                             cfg,
                                             sample_buildout,
                                             recipe_name,
                                             recipe_dir,
                                             recipes)),
         cleanBuildout = (
-            lambda sample_buildout=None:cleanBuildout(test, sample_buildout)),
+            lambda sample_buildout=None:zc.buildout.buildout.except_(
+                cleanBuildout, False, test, sample_buildout)),
         ))
+
+    def get_logger(name):
+        logger = logging.getLogger(name)
+        if logger.handlers:
+            error = logger.error
+        else:
+            error = sys.err.write
+        return error
+
+    def _doing(_, v, tb):
+        error = get_logger('zc.buildout')
+        message = str(v)
+        doing = []
+        while tb is not None:
+            d = tb.tb_frame.f_locals.get('__doing__')
+            if d:
+                doing.append(d)
+            tb = tb.tb_next
+            
+        if doing:
+            error('While:')
+            for d in doing:
+                if not isinstance(d, str):
+                    d = d[0] % d[1:]
+                error('  %s' % d)
+
+    def test_handle_internal_error(exc_info):
+        error = get_logger('zc.buildout')
+        _doing(*exc_info)
+        error((zc.buildout.buildout._internal_error_template +
+              ''.join(traceback.format_exception(*exc_info)).strip()))
+    zc.buildout.buildout.handle_internal_error = test_handle_internal_error
     zc.buildout.easy_install.prefer_final(prefer_final)
 
 def buildoutTearDown(test):

Modified: zc.buildout/branches/aaron-testing-changes/src/zc/buildout/tests.py
===================================================================
--- zc.buildout/branches/aaron-testing-changes/src/zc/buildout/tests.py	2008-11-15 00:31:32 UTC (rev 92954)
+++ zc.buildout/branches/aaron-testing-changes/src/zc/buildout/tests.py	2008-11-15 06:41:13 UTC (rev 92955)
@@ -2676,7 +2676,7 @@
                            r'when that file already exists: '),
                 '[Errno 17] File exists: '
                 ),
-               ])
+               ]),
             ),
         doctest.DocFileSuite(
             'debugging.txt',



More information about the Checkins mailing list