apol: Improve tab loading error handling.

Add explicit type conversions so the Qt C++ code always gets the expected
type.  Add additional handlers to catch the exceptions and provide better
error messages.
This commit is contained in:
Chris PeBenito 2016-06-26 11:05:20 -04:00
parent 4c287ba23e
commit a82be1fbdb
2 changed files with 16 additions and 7 deletions

View File

@ -348,7 +348,7 @@ class ApolMainWindow(SEToolsWidget, QMainWindow):
"({1}).".format(type(tab).__name__, settings["__tab__"]))
try:
self.AnalysisTabs.setTabText(index, settings["__title__"])
self.AnalysisTabs.setTabText(index, str(settings["__title__"]))
except KeyError:
self.log.warning("Settings file does not have a title setting.")
@ -401,7 +401,8 @@ class ApolMainWindow(SEToolsWidget, QMainWindow):
except Exception as ex:
self.log.critical("Error loading settings file \"{0}\": {1}".format(filename, ex))
self.error_msg.critical(self, "Failed to load settings",
"Error loading settings file \"{0}\": {1}".format(filename, ex))
"Error loading settings file \"{0}\":\n\n{1}".
format(filename, ex))
else:
self.log.info("Successfully loaded analysis settings from \"{0}\"".format(filename))

View File

@ -95,7 +95,7 @@ def load_lineedits(tab, settings, lines):
lineedit = getattr(tab, entry)
try:
lineedit.setText(settings[entry])
lineedit.setText(str(settings[entry]))
except KeyError:
log.warning("{0} criteria missing from settings file.".format(entry))
@ -133,7 +133,7 @@ def load_textedits(tab, settings, edits):
textedit = getattr(tab, entry)
try:
textedit.setPlainText(settings[entry])
textedit.setPlainText(str(settings[entry]))
except KeyError:
log.warning("{0} criteria missing from settings file.".format(entry))
@ -175,10 +175,14 @@ def load_listviews(tab, settings, listviews):
# set list selections
for entry in listviews:
try:
selections = settings[entry]
selections = list(settings[entry])
except KeyError:
log.warning("{0} criteria missing from settings file.".format(entry))
continue
except TypeError:
msg = "Invalid list for {0} criteria: {1!r}".format(entry, settings[entry])
log.critical(msg)
raise TypeError(msg)
if not selections:
continue
@ -225,7 +229,7 @@ def load_comboboxes(tab, settings, comboboxes):
for entry in comboboxes:
try:
selection = settings[entry]
selection = str(settings[entry])
except KeyError:
log.warning("{0} criteria missing from settings file.".format(entry))
continue
@ -263,10 +267,14 @@ def load_spinboxes(tab, settings, spinboxes):
for entry in spinboxes:
try:
value = settings[entry]
value = int(settings[entry])
except KeyError:
log.warning("{0} criteria missing from settings file.".format(entry))
continue
except (ValueError, TypeError) as ex:
msg = "Invalid value for {0} criteria: {1!r}.".format(entry, settings[entry])
log.critical(msg)
raise ex.__class__(msg)
spinbox = getattr(tab, entry)
spinbox.setValue(value)