diff options
author | Michael Schwarz <michi.schwarz@gmail.com> | 2015-09-11 21:55:58 +0200 |
---|---|---|
committer | Michael Schwarz <michi.schwarz@gmail.com> | 2015-09-16 01:50:23 +0200 |
commit | 096db19a9a465cc667aa5d0ef92df2eeac5955b2 (patch) | |
tree | eba053a06141adb569d6f33fb9e28675faecc0a6 /support | |
parent | 93f96964914ae30686d30e5667bff92f2d17b791 (diff) | |
download | pogojig-096db19a9a465cc667aa5d0ef92df2eeac5955b2.tar.gz pogojig-096db19a9a465cc667aa5d0ef92df2eeac5955b2.tar.bz2 pogojig-096db19a9a465cc667aa5d0ef92df2eeac5955b2.zip |
Wrap all Python main functions with decorator.
This decorator check if a module was called as the main module and catches exceptions.
Diffstat (limited to 'support')
-rw-r--r-- | support/asymptote/__main__.py | 12 | ||||
-rw-r--r-- | support/inkscape/__main__.py | 12 | ||||
-rw-r--r-- | support/lib/util.py | 23 | ||||
-rw-r--r-- | support/openscad/__main__.py | 12 |
4 files changed, 28 insertions, 31 deletions
diff --git a/support/asymptote/__main__.py b/support/asymptote/__main__.py index 91902dd..238332f 100644 --- a/support/asymptote/__main__.py +++ b/support/asymptote/__main__.py @@ -1,4 +1,4 @@ -import os, sys, shutil +import os, shutil from lib import util @@ -6,6 +6,7 @@ def _asymptote(in_path, out_path, asymptote_dir, working_dir): util.command([os.environ['ASYMPTOTE'], '-f', 'pdf', '-o', out_path, in_path], set_env = { 'ASYMPTOTE_DIR': asymptote_dir }, working_dir = working_dir) +@util.main def main(in_path, out_path): _, out_suffix = os.path.splitext(out_path) @@ -23,12 +24,3 @@ def main(in_path, out_path): shutil.copyfile(temp_out_path, out_path) else: raise Exception('Unknown file type: {}'.format(out_suffix)) - - -try: - main(*sys.argv[1:]) -except util.UserError as e: - print 'Error:', e - sys.exit(1) -except KeyboardInterrupt: - sys.exit(2) diff --git a/support/inkscape/__main__.py b/support/inkscape/__main__.py index 03f6689..a2c9341 100644 --- a/support/inkscape/__main__.py +++ b/support/inkscape/__main__.py @@ -1,4 +1,4 @@ -import sys, os, shutil +import os, shutil from lib import util from . import effect, inkscape @@ -36,6 +36,7 @@ def _unfuck_svg_document(temp_svg_path): command_line.run() +@util.main def main(in_path, out_path): _, out_suffix = os.path.splitext(out_path) @@ -56,12 +57,3 @@ def main(in_path, out_path): export_effect.write_asy(file) else: raise Exception('Unknown file type: {}'.format(out_suffix)) - - -try: - main(*sys.argv[1:]) -except util.UserError as e: - print 'Error:', e - sys.exit(1) -except KeyboardInterrupt: - sys.exit(2) diff --git a/support/lib/util.py b/support/lib/util.py index e343b73..d14b342 100644 --- a/support/lib/util.py +++ b/support/lib/util.py @@ -1,4 +1,4 @@ -import contextlib, subprocess, tempfile, shutil, re, os +import sys, contextlib, subprocess, tempfile, shutil, re, os, inspect class UserError(Exception): @@ -6,6 +6,27 @@ class UserError(Exception): super(UserError, self).__init__(message.format(*args)) +def main(fn): + """Decorator for "main" functions. Decorates a function that should be called when the containing module is run as a script (e.g. via python -m <module>).""" + + frame = inspect.currentframe().f_back + + def wrapped_fn(*args, **kwargs): + try: + fn(*args, **kwargs) + except UserError as e: + print >> sys.stderr, 'Error:', e + sys.exit(1) + except KeyboardInterrupt: + sys.exit(2) + + if frame.f_globals['__name__'] == '__main__': + wrapped_fn(*sys.argv[1:]) + + # Allow the main function also to be called explicitly + return wrapped_fn + + def rename_atomic(source_path, target_path): """ Move the file at source_path to target_path. diff --git a/support/openscad/__main__.py b/support/openscad/__main__.py index 28de2cf..0eae27e 100644 --- a/support/openscad/__main__.py +++ b/support/openscad/__main__.py @@ -1,4 +1,4 @@ -import os, sys +import os from lib import util @@ -10,6 +10,7 @@ def _write_dependencies(path, target, dependencies): util.write_file(path, '{}: {}\n'.format(target, ' '.join(dependencies)).encode()) +@util.main def main(in_path, out_path, deps_path): cwd = os.getcwd() @@ -43,12 +44,3 @@ def main(in_path, out_path, deps_path): # Write output files. _write_dependencies(deps_path, relpath(out_path), deps - ignored_files) util.rename_atomic(temp_out_path, out_path) - - -try: - main(*sys.argv[1:]) -except util.UserError as e: - print 'Error:', e - sys.exit(1) -except KeyboardInterrupt: - sys.exit(2) |