summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Hellmann <doug.hellmann@dreamhost.com>2012-05-14 10:43:48 -0400
committerDoug Hellmann <doug.hellmann@dreamhost.com>2012-05-14 10:43:48 -0400
commit31ac9831956e030bb4f815c20583482ed8cae852 (patch)
treef2455b7d27e772c93bb8e4838c57b40992342c3c
parent1beeec9b3081158ddd3dc041e0503a31fe7d7a50 (diff)
downloadcliff-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.py21
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: