diff piecrust/publishing/base.py @ 954:d709429f02eb

publish: Add more options for logging, better feedback when it fails.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 05 Oct 2017 21:30:25 -0700
parents 13e8b50a2113
children
line wrap: on
line diff
--- a/piecrust/publishing/base.py	Thu Oct 05 20:36:05 2017 -0700
+++ b/piecrust/publishing/base.py	Thu Oct 05 21:30:25 2017 -0700
@@ -70,7 +70,8 @@
         self.app = app
 
     def run(self, target,
-            force=False, preview=False, extra_args=None, log_file=None):
+            force=False, preview=False, extra_args=None,
+            log_file=None, log_debug_info=False, append_log_file=False):
         start_time = time.perf_counter()
 
         # Get publisher for this target.
@@ -87,8 +88,15 @@
         root_logger = logging.getLogger()
         if log_file and not preview:
             logger.debug("Adding file handler for: %s" % log_file)
-            hdlr = logging.FileHandler(log_file, mode='w', encoding='utf8')
+            mode = 'w'
+            if append_log_file:
+                mode = 'a'
+            hdlr = logging.FileHandler(log_file, mode=mode, encoding='utf8')
             root_logger.addHandler(hdlr)
+
+        if log_debug_info:
+            _log_debug_info(target, force, preview, extra_args)
+
         if not preview:
             logger.info("Deploying to %s" % target)
         else:
@@ -122,6 +130,7 @@
             (target, pub.PUBLISHER_NAME))
         pub_start_time = time.perf_counter()
 
+        success = False
         ctx = PublishingContext()
         ctx.bake_out_dir = bake_out_dir
         ctx.bake_records = records
@@ -129,7 +138,7 @@
         ctx.preview = preview
         ctx.args = extra_args
         try:
-            pub.run(ctx)
+            success = pub.run(ctx)
         except Exception as ex:
             raise PublishingError(
                 "Error publishing to target: %s" % target) from ex
@@ -141,7 +150,13 @@
         logger.info(format_timed(
             pub_start_time, "Ran publisher %s" % pub.PUBLISHER_NAME))
 
-        logger.info(format_timed(start_time, 'Deployed to %s' % target))
+        if success:
+            logger.info(format_timed(start_time, 'Deployed to %s' % target))
+            return 0
+        else:
+            logger.error(format_timed(start_time, 'Failed to deploy to %s' %
+                                      target))
+            return 1
 
 
 def find_publisher_class(app, name, is_scheme=False):
@@ -159,3 +174,26 @@
         return pub_cls.PUBLISHER_NAME
     return None
 
+
+def _log_debug_info(target, force, preview, extra_args):
+    import os
+    import sys
+
+    logger.info("---- DEBUG INFO START ----")
+    logger.info("System:")
+    logger.info("  sys.argv=%s" % sys.argv)
+    logger.info("  sys.base_exec_prefix=%s" % sys.base_exec_prefix)
+    logger.info("  sys.base_prefix=%s" % sys.base_prefix)
+    logger.info("  sys.exec_prefix=%s" % sys.exec_prefix)
+    logger.info("  sys.executable=%s" % sys.executable)
+    logger.info("  sys.path=%s" % sys.path)
+    logger.info("  sys.platform=%s" % sys.platform)
+    logger.info("  sys.prefix=%s" % sys.prefix)
+    logger.info("Environment:")
+    logger.info("  cwd=%s" % os.getcwd())
+    logger.info("  pid=%s" % os.getpid())
+    logger.info("Variables:")
+    for k, v in os.environ.items():
+        logger.info("  %s=%s" % (k, v))
+    logger.info("---- DEBUG INFO END ----")
+