From 5ebe179b8d6bff0d912f411d041e1a3d47f0c3fc Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 2 Apr 2014 12:58:45 +0200 Subject: [PATCH] =?UTF-8?q?Possibilit=C3=A9=20d'ajouter=20=C3=A0=20la=20ch?= =?UTF-8?q?a=C3=AEne=20de=20compilation=20une=20commande=20personnalis?= =?UTF-8?q?=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cette commande personnalisée apparait comme `--steps "%commande arg1 arg2"`. --- songbook | 15 ++++++++++++--- songbook_core/build.py | 6 ++++++ songbook_core/errors.py | 17 ++++++++++++++--- 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/songbook b/songbook index bda01f79..b5eefa51 100755 --- a/songbook +++ b/songbook @@ -21,10 +21,15 @@ from songbook_core import errors class ParseStepsAction(argparse.Action): """Argparse action to split a string into a list.""" def __call__(self, __parser, namespace, values, __option_string=None): + if not getattr(namespace, self.dest): + setattr(namespace, self.dest, []) setattr( namespace, self.dest, - [value.strip() for value in values[0].split(',')], + ( + getattr(namespace, self.dest) + + [value.strip() for value in values[0].split(',')] + ), ) def argument_parser(args): @@ -52,9 +57,13 @@ def argument_parser(args): "tex" produce .tex file from templates; "pdf" compile .tex file; "sbx" compile index files; - "clean" remove temporary files. + "clean" remove temporary files; + any string beginning with '%%' (in this case, it will be run + in a shell). Several steps (excepted the custom shell + command) can be combinend in one --steps argument, as a + comma separated string. """.format(steps=','.join(DEFAULT_STEPS))), - default=DEFAULT_STEPS, + default=None, ) options = parser.parse_args(args) diff --git a/songbook_core/build.py b/songbook_core/build.py index bf86d76d..e32533ef 100644 --- a/songbook_core/build.py +++ b/songbook_core/build.py @@ -208,6 +208,12 @@ def buildsongbook( elif step == 'clean': # Cleaning clean(basename) + elif step.startswith("%"): + # Shell command + command = step[1:] + exit_code = subprocess.call(command, shell=True) + if exit_code: + raise errors.StepCommandError(command, exit_code) else: # Unknown step name raise errors.UnknownStep(step) diff --git a/songbook_core/errors.py b/songbook_core/errors.py index 00e6b3d8..bf8675fa 100644 --- a/songbook_core/errors.py +++ b/songbook_core/errors.py @@ -18,11 +18,22 @@ class LatexCompilationError(SongbookError): self.basename = basename def __str__(self): - return ( - """Error while pdfLaTeX compilation of "{basename}.tex" - (see {basename}.log for more information).""" + return ("""Error while pdfLaTeX compilation of "{basename}.tex" """ + """(see {basename}.log for more information).""" ).format(basename=self.basename) +class StepCommandError(SongbookError): + """Error during LaTeX compilation.""" + + def __init__(self, command, code): + super(StepCommandError, self).__init__() + self.command = command + self.code = code + + def __str__(self): + return ("""Error while running custom command "{command}": got return""" + " code {code}.").format(command=self.command, code=self.code) + class CleaningError(SongbookError): """Error during cleaning of LaTeX auxiliary files."""