Mercurial > piecrust2
comparison 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 |
comparison
equal
deleted
inserted
replaced
953:e04f2ad5f931 | 954:d709429f02eb |
---|---|
68 def __init__(self, appfactory, app): | 68 def __init__(self, appfactory, app): |
69 self.appfactory = appfactory | 69 self.appfactory = appfactory |
70 self.app = app | 70 self.app = app |
71 | 71 |
72 def run(self, target, | 72 def run(self, target, |
73 force=False, preview=False, extra_args=None, log_file=None): | 73 force=False, preview=False, extra_args=None, |
74 log_file=None, log_debug_info=False, append_log_file=False): | |
74 start_time = time.perf_counter() | 75 start_time = time.perf_counter() |
75 | 76 |
76 # Get publisher for this target. | 77 # Get publisher for this target. |
77 pub = self.app.getPublisher(target) | 78 pub = self.app.getPublisher(target) |
78 if pub is None: | 79 if pub is None: |
85 # Setup logging stuff. | 86 # Setup logging stuff. |
86 hdlr = None | 87 hdlr = None |
87 root_logger = logging.getLogger() | 88 root_logger = logging.getLogger() |
88 if log_file and not preview: | 89 if log_file and not preview: |
89 logger.debug("Adding file handler for: %s" % log_file) | 90 logger.debug("Adding file handler for: %s" % log_file) |
90 hdlr = logging.FileHandler(log_file, mode='w', encoding='utf8') | 91 mode = 'w' |
92 if append_log_file: | |
93 mode = 'a' | |
94 hdlr = logging.FileHandler(log_file, mode=mode, encoding='utf8') | |
91 root_logger.addHandler(hdlr) | 95 root_logger.addHandler(hdlr) |
96 | |
97 if log_debug_info: | |
98 _log_debug_info(target, force, preview, extra_args) | |
99 | |
92 if not preview: | 100 if not preview: |
93 logger.info("Deploying to %s" % target) | 101 logger.info("Deploying to %s" % target) |
94 else: | 102 else: |
95 logger.info("Previewing deployment to %s" % target) | 103 logger.info("Previewing deployment to %s" % target) |
96 | 104 |
120 logger.debug( | 128 logger.debug( |
121 "Running publish target '%s' with publisher: %s" % | 129 "Running publish target '%s' with publisher: %s" % |
122 (target, pub.PUBLISHER_NAME)) | 130 (target, pub.PUBLISHER_NAME)) |
123 pub_start_time = time.perf_counter() | 131 pub_start_time = time.perf_counter() |
124 | 132 |
133 success = False | |
125 ctx = PublishingContext() | 134 ctx = PublishingContext() |
126 ctx.bake_out_dir = bake_out_dir | 135 ctx.bake_out_dir = bake_out_dir |
127 ctx.bake_records = records | 136 ctx.bake_records = records |
128 ctx.was_baked = was_baked | 137 ctx.was_baked = was_baked |
129 ctx.preview = preview | 138 ctx.preview = preview |
130 ctx.args = extra_args | 139 ctx.args = extra_args |
131 try: | 140 try: |
132 pub.run(ctx) | 141 success = pub.run(ctx) |
133 except Exception as ex: | 142 except Exception as ex: |
134 raise PublishingError( | 143 raise PublishingError( |
135 "Error publishing to target: %s" % target) from ex | 144 "Error publishing to target: %s" % target) from ex |
136 finally: | 145 finally: |
137 if hdlr: | 146 if hdlr: |
139 hdlr.close() | 148 hdlr.close() |
140 | 149 |
141 logger.info(format_timed( | 150 logger.info(format_timed( |
142 pub_start_time, "Ran publisher %s" % pub.PUBLISHER_NAME)) | 151 pub_start_time, "Ran publisher %s" % pub.PUBLISHER_NAME)) |
143 | 152 |
144 logger.info(format_timed(start_time, 'Deployed to %s' % target)) | 153 if success: |
154 logger.info(format_timed(start_time, 'Deployed to %s' % target)) | |
155 return 0 | |
156 else: | |
157 logger.error(format_timed(start_time, 'Failed to deploy to %s' % | |
158 target)) | |
159 return 1 | |
145 | 160 |
146 | 161 |
147 def find_publisher_class(app, name, is_scheme=False): | 162 def find_publisher_class(app, name, is_scheme=False): |
148 attr_name = 'PUBLISHER_SCHEME' if is_scheme else 'PUBLISHER_NAME' | 163 attr_name = 'PUBLISHER_SCHEME' if is_scheme else 'PUBLISHER_NAME' |
149 for pub_cls in app.plugin_loader.getPublishers(): | 164 for pub_cls in app.plugin_loader.getPublishers(): |
157 pub_cls = find_publisher_class(app, scheme, True) | 172 pub_cls = find_publisher_class(app, scheme, True) |
158 if pub_cls: | 173 if pub_cls: |
159 return pub_cls.PUBLISHER_NAME | 174 return pub_cls.PUBLISHER_NAME |
160 return None | 175 return None |
161 | 176 |
177 | |
178 def _log_debug_info(target, force, preview, extra_args): | |
179 import os | |
180 import sys | |
181 | |
182 logger.info("---- DEBUG INFO START ----") | |
183 logger.info("System:") | |
184 logger.info(" sys.argv=%s" % sys.argv) | |
185 logger.info(" sys.base_exec_prefix=%s" % sys.base_exec_prefix) | |
186 logger.info(" sys.base_prefix=%s" % sys.base_prefix) | |
187 logger.info(" sys.exec_prefix=%s" % sys.exec_prefix) | |
188 logger.info(" sys.executable=%s" % sys.executable) | |
189 logger.info(" sys.path=%s" % sys.path) | |
190 logger.info(" sys.platform=%s" % sys.platform) | |
191 logger.info(" sys.prefix=%s" % sys.prefix) | |
192 logger.info("Environment:") | |
193 logger.info(" cwd=%s" % os.getcwd()) | |
194 logger.info(" pid=%s" % os.getpid()) | |
195 logger.info("Variables:") | |
196 for k, v in os.environ.items(): | |
197 logger.info(" %s=%s" % (k, v)) | |
198 logger.info("---- DEBUG INFO END ----") | |
199 |