Mercurial > piecrust2
view piecrust/publishing/publisher.py @ 613:e2e955a3bb25
publish: Add publish command.
* Add `shell` publisher.
* Refactor admin panel's publishing backend to use that, along with the new
PID file support.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Thu, 04 Feb 2016 08:05:03 -0800 |
parents | |
children | 8f9c0bdb3724 |
line wrap: on
line source
import logging from piecrust.publishing.base import PublishingContext logger = logging.getLogger(__name__) class InvalidPublishTargetError(Exception): pass class PublishingError(Exception): pass class Publisher(object): def __init__(self, app): self.app = app def run(self, target, log_file=None): target_cfg = self.app.config.get('publish/%s' % target) if not target_cfg: raise InvalidPublishTargetError( "No such publish target: %s" % target) target_type = target_cfg.get('type') if not target_type: raise InvalidPublishTargetError( "Publish target '%s' doesn't specify a type." % target) pub = None for pub_cls in self.app.plugin_loader.getPublishers(): if pub_cls.PUBLISHER_NAME == target_type: pub = pub_cls(self.app, target) break if pub is None: raise InvalidPublishTargetError( "Publish target '%s' has invalid type: %s" % (target, target_type)) ctx = PublishingContext() hdlr = None if log_file: if not pub.is_using_custom_logging: logger.debug("Adding file handler for: %s" % log_file) hdlr = logging.FileHandler(log_file, mode='w', encoding='utf8') logger.addHandler(hdlr) else: logger.debug("Creating custom log file: %s" % log_file) ctx.custom_logging_file = open( log_file, mode='w', encoding='utf8') intro_msg = ("Running publish target '%s' with publisher: %s" % (target, pub.PUBLISHER_NAME)) logger.debug(intro_msg) if ctx.custom_logging_file: ctx.custom_logging_file.write(intro_msg + "\n") try: success = pub.run(ctx) except Exception as ex: raise PublishingError( "Error publishing to target: %s" % target) from ex finally: if ctx.custom_logging_file: ctx.custom_logging_file.close() if hdlr: logger.removeHandler(hdlr) hdlr.close() if not success: raise PublishingError( "Unknown error publishing to target: %s" % target)