From fd3b931423200c26d83cc79fe57b59ebaedf52b2 Mon Sep 17 00:00:00 2001 From: "Martin A. Brown" Date: Wed, 17 Feb 2016 18:31:51 -0800 Subject: [PATCH] include hooks for prebuild and postbuild states --- tldp/doctypes/common.py | 10 +++++----- tldp/outputs.py | 26 ++++++++++++++++++++------ 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/tldp/doctypes/common.py b/tldp/doctypes/common.py index 6a30f3a..3b41efd 100644 --- a/tldp/doctypes/common.py +++ b/tldp/doctypes/common.py @@ -31,13 +31,9 @@ class BaseDoctype(object): self.output = kwargs.get('output', None) self.platform = kwargs.get('platform', None) assert None not in (self.source, self.output, self.platform) - self.logdir = os.path.join(self.output.dirname, 'logs') - if os.path.exists(self.logdir): - logger.warning("Found existing logs directory: %s", self.logdir) - else: - os.mkdir(self.logdir) def generate(self): + self.output.prebuild_hook() os.chdir(self.output.dirname) vector = [self.output.clean(), self.platform_check(), @@ -47,6 +43,10 @@ class BaseDoctype(object): self.create_html(), ] result = all(vector) + if result: + self.output.build_success_hook() + else: + self.output.build_failure_hook() logger.info("%s generation of all documents %s", self.source.stem, result) return all(vector) diff --git a/tldp/outputs.py b/tldp/outputs.py index dbb5a52..862b2ed 100644 --- a/tldp/outputs.py +++ b/tldp/outputs.py @@ -4,9 +4,10 @@ from __future__ import absolute_import, division, print_function import os import errno +import shutil import collections -from .utils import logger, statfiles +from .utils import logger, logdir, statfiles class OutputNamingConvention(object): @@ -51,24 +52,37 @@ class OutputDirectory(OutputNamingConvention): if not os.path.isdir(parent): logger.critical("Missing output tree %s.", parent) raise IOError(errno.ENOENT, os.strerror(errno.ENOENT), parent) - if not os.path.isdir(self.dirname): - logger.info("%s creating output directory %s.", self.stem, dirname) - os.mkdir(dirname) self.statinfo = statfiles(self.dirname, relative=self.dirname) self.status = 'output' + self.logdir = os.path.join(self.dirname, logdir) super(OutputDirectory, self).__init__(self.dirname, self.stem) def clean(self): - logger.info("%s cleaning directory %s.", self.stem, self.dirname) + logger.info("%s cleaning dir %s.", self.stem, self.dirname) for oformat in self.expected: name = getattr(self, oformat, None) assert name is not None if os.path.exists(name) or os.path.islink(name): - logger.info("%s cleaning directory %s, removing file %s", + logger.info("%s cleaning dir %s, removing file %s", self.stem, self.dirname, os.path.basename(name)) os.unlink(name) return True + def prebuild_hook(self): + for d in (self.dirname, self.logdir): + if not os.path.isdir(d): + logger.info("%s creating dir %s.", self.stem, d) + os.mkdir(d) + + def build_failure_hook(self): + logger.critical("%s FAILURE, see logs in %s", self.stem, self.logdir) + + def build_success_hook(self): + logger.info("%s SUCCESS!", self.stem) + logger.debug("%s removing logs %s)", self.stem, self.logdir) + if os.path.isdir(self.logdir): + shutil.rmtree(logdir) + class OutputCollection(collections.MutableMapping):