diff --git a/weboob/tools/application/base.py b/weboob/tools/application/base.py index 55692962a17523d6795e86a4b40b07a690fce5f6..14fc739cfad8ba467688e66c511c7b03576ca661 100644 --- a/weboob/tools/application/base.py +++ b/weboob/tools/application/base.py @@ -344,6 +344,8 @@ def bcall_errors_handler(self, errors, debugmsg='Use --debug option to print bac :param ignore: Exceptions to ignore :type ignore: tuple[:class:`Exception`] """ + err = 0 + ask_debug_mode = False for backend, error, backtrace in errors.errors: if isinstance(error, ignore): @@ -351,9 +353,14 @@ def bcall_errors_handler(self, errors, debugmsg='Use --debug option to print bac elif self.bcall_error_handler(backend, error, backtrace): ask_debug_mode = True + if not isinstance(error, MoreResultsAvailable): + err = 1 + if ask_debug_mode: print(debugmsg, file=self.stderr) + return err + def _shell_completion_items(self): items = set() for ol in [self._parser.option_list] + [og.option_list for og in self._parser.option_groups]: @@ -506,9 +513,11 @@ def run(cls, args=None): sys.exit(1) except CallErrors as e: try: - app.bcall_errors_handler(e) + ret = app.bcall_errors_handler(e) except KeyboardInterrupt: pass + else: + sys.exit(ret) sys.exit(1) except ResultsConditionError as e: print('%s' % e, file=cls.stderr) diff --git a/weboob/tools/application/console.py b/weboob/tools/application/console.py index ebfce55fec85e6c00cf898c2cd49bd56a80e8dde..c54b2da1ca129fd0efafe02eaa9f7d80b5c9a2ee 100644 --- a/weboob/tools/application/console.py +++ b/weboob/tools/application/console.py @@ -647,15 +647,21 @@ def bcall_errors_handler(self, errors, debugmsg='Use --debug option to print bac """ ask_debug_mode = False more_results = set() + err = 0 + for backend, error, backtrace in errors.errors: if isinstance(error, MoreResultsAvailable): more_results.add(backend.name) elif isinstance(error, ignore): continue - elif self.bcall_error_handler(backend, error, backtrace): - ask_debug_mode = True + else: + err = 1 + if self.bcall_error_handler(backend, error, backtrace): + ask_debug_mode = True if ask_debug_mode: print(debugmsg, file=self.stderr) elif len(more_results) > 0: print('Hint: There are more results available for %s (use option -n or count command)' % (', '.join(more_results)), file=self.stderr) + + return err diff --git a/weboob/tools/application/repl.py b/weboob/tools/application/repl.py index 8f2ad023e5dffcb73868cdfd999ea3fc701387e6..88ca3883c9ddfcb57d6283d223fc32d7a7ba148d 100644 --- a/weboob/tools/application/repl.py +++ b/weboob/tools/application/repl.py @@ -453,7 +453,7 @@ def onecmd(self, line): try: return super(ReplApplication, self).onecmd(line) except CallErrors as e: - self.bcall_errors_handler(e) + return self.bcall_errors_handler(e) except BackendNotGiven as e: print('Error: %s' % str(e), file=self.stderr) return os.EX_DATAERR @@ -550,9 +550,9 @@ def bcall_error_handler(self, backend, error, backtrace): def bcall_errors_handler(self, errors, ignore=()): if self.interactive: - ConsoleApplication.bcall_errors_handler(self, errors, 'Use "logging debug" option to print backtraces.', ignore) + return super(ReplApplication, self).bcall_errors_handler(errors, 'Use "logging debug" option to print backtraces.', ignore) else: - ConsoleApplication.bcall_errors_handler(self, errors, ignore=ignore) + return super(ReplApplication, self).bcall_errors_handler(errors, ignore=ignore) # -- options related methods ------------- def _handle_options(self):