diff options
author | Doug Hellmann <doug.hellmann@dreamhost.com> | 2012-05-14 10:43:48 -0400 |
---|---|---|
committer | Doug Hellmann <doug.hellmann@dreamhost.com> | 2012-05-14 10:43:48 -0400 |
commit | 31ac9831956e030bb4f815c20583482ed8cae852 (patch) | |
tree | f2455b7d27e772c93bb8e4838c57b40992342c3c | |
parent | 1beeec9b3081158ddd3dc041e0503a31fe7d7a50 (diff) | |
download | cliff-tablib-31ac9831956e030bb4f815c20583482ed8cae852.tar.gz |
set the interactive mode flag before initializing the app so subclasses can check it; handle initialization errors more cleanly
-rw-r--r-- | cliff/app.py | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/cliff/app.py b/cliff/app.py index cd2386c..55420b5 100644 --- a/cliff/app.py +++ b/cliff/app.py @@ -135,11 +135,20 @@ class App(object): :param argv: input arguments and options :paramtype argv: list of str """ - self.options, remainder = self.parser.parse_known_args(argv) - self.configure_logging() - self.initialize_app(remainder) + try: + self.options, remainder = self.parser.parse_known_args(argv) + self.configure_logging() + self.interactive_mode = not remainder + self.initialize_app(remainder) + except Exception as err: + if self.options.debug: + LOG.exception(err) + raise + else: + LOG.error(err) + return 1 result = 1 - if not remainder: + if self.interactive_mode: result = self.interact() else: result = self.run_subcommand(remainder) @@ -178,7 +187,6 @@ class App(object): return def interact(self): - self.interactive_mode = True interpreter = self.interactive_app_factory(self, self.command_manager, self.stdin, self.stdout) interpreter.cmdloop() return 0 @@ -195,9 +203,10 @@ class App(object): parsed_args = cmd_parser.parse_args(sub_argv) result = cmd.run(parsed_args) except Exception as err: - LOG.error('ERROR: %s', err) if self.options.debug: LOG.exception(err) + else: + LOG.error(err) try: self.clean_up(cmd, result, err) except Exception as err2: |