Make errors loading the ComicVineTalker object explicit

This commit is contained in:
Timmy Welch 2022-11-25 15:35:34 -08:00
parent 858bc303d8
commit 83ac9f91b5
No known key found for this signature in database

View File

@ -55,7 +55,7 @@ try:
"""
if QtWidgets.QApplication.instance() is not None:
errorbox = QtWidgets.QMessageBox()
errorbox.setText(f"Oops. An unexpected error occurred:\n{log_msg}")
errorbox.setText(log_msg)
errorbox.exec()
QtWidgets.QApplication.exit(1)
else:
@ -84,11 +84,12 @@ try:
sys.__excepthook__(exc_type, exc_value, exc_traceback)
else:
exc_info = (exc_type, exc_value, exc_traceback)
log_msg = "\n".join(["".join(traceback.format_tb(exc_traceback)), f"{exc_type.__name__}: {exc_value}"])
trace_back = "".join(traceback.format_tb(exc_traceback))
log_msg = f"{exc_type.__name__}: {exc_value}\n\n{trace_back}"
logger.critical("Uncaught exception: %s: %s", exc_type.__name__, exc_value, exc_info=exc_info)
# trigger message box show
self._exception_caught.emit(log_msg)
self._exception_caught.emit(f"Oops. An unexpected error occurred:\n{log_msg}")
qt_exception_hook = UncaughtHook()
from comictaggerlib.taggerwindow import TaggerWindow
@ -172,7 +173,11 @@ See https://github.com/comictagger/comictagger/releases/1.5.5 for more informati
for pkg in sorted(importlib_metadata.distributions(), key=lambda x: x.name):
logger.debug("%s\t%s", pkg.metadata["Name"], pkg.metadata["Version"])
talker_failed = False
if not qt_available and not opts.no_gui:
opts.no_gui = True
logger.warning("PyQt5 is not available. ComicTagger is limited to command-line mode.")
talker_exception = None
try:
talker_api = ct_api.get_comic_talker("comicvine")(
settings.cv_url,
@ -182,25 +187,15 @@ See https://github.com/comictagger/comictagger/releases/1.5.5 for more informati
settings.use_series_start_as_volume,
settings.wait_and_retry_on_rate_limit,
)
except TalkerError as te:
talker_failed = True
logger.warning(f"Unable to load talker {te.source}. Error: {te.desc}. Defaulting to Comic Vine.")
talker_api = ct_api.get_comic_talker("comicvine")(
settings.cv_url,
settings.cv_api_key,
settings.id_series_match_search_thresh,
settings.remove_html_tables,
settings.use_series_start_as_volume,
settings.wait_and_retry_on_rate_limit,
)
except TalkerError as e:
logger.exception("Unable to load talker")
talker_exception = e
if opts.no_gui:
raise SystemExit(1)
utils.load_publishers()
update_publishers()
if not qt_available and not opts.no_gui:
opts.no_gui = True
logger.warning("PyQt5 is not available. ComicTagger is limited to command-line mode.")
if opts.no_gui:
try:
cli.cli_mode(opts, settings, talker_api)
@ -213,6 +208,11 @@ See https://github.com/comictagger/comictagger/releases/1.5.5 for more informati
args.extend(["-platform", "windows:darkmode=2"])
args.extend(sys.argv)
app = Application(args)
if talker_exception is not None:
trace_back = "".join(traceback.format_tb(talker_exception.__traceback__))
log_msg = f"{type(talker_exception).__name__}: {talker_exception}\n\n{trace_back}"
show_exception_box(f"Unable to load talker: {log_msg}")
raise SystemExit(1)
# needed to catch initial open file events (macOS)
app.openFileRequest.connect(lambda x: opts.files.append(x.toLocalFile()))
@ -253,13 +253,6 @@ See https://github.com/comictagger/comictagger/releases/1.5.5 for more informati
if platform.system() != "Linux":
splash.finish(tagger_window)
if talker_failed:
QtWidgets.QMessageBox.warning(
QtWidgets.QMainWindow(),
"Warning",
"Unable to load configured information source, see log for details. Defaulting to Comic Vine",
)
sys.exit(app.exec())
except Exception:
logger.exception("GUI mode failed")