From 09bca896da01a7266b6dc9b4cb12e24b89822349 Mon Sep 17 00:00:00 2001 From: Chris PeBenito Date: Fri, 1 Jul 2016 22:14:35 -0400 Subject: [PATCH] ApolMainWindow: Do not save tab/workspace if there are errors. Tabs should raise RuntimeError in save() if they have criteria errors. For #97 and #98. --- setoolsgui/apol/mainwindow.py | 52 +++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/setoolsgui/apol/mainwindow.py b/setoolsgui/apol/mainwindow.py index 1b84c28..1e9fc24 100644 --- a/setoolsgui/apol/mainwindow.py +++ b/setoolsgui/apol/mainwindow.py @@ -410,6 +410,16 @@ class ApolMainWindow(SEToolsWidget, QMainWindow): self.load_settings(new=True) def save_settings(self): + try: + settings = self._get_settings() + + except RuntimeError: + self.log.critical("Errors in the query prevent saving the settings.") + self.error_msg.critical(self, "Unable to save settings", + "Please resolve errors in the query before saving the settings." + ) + return + filename = QFileDialog.getSaveFileName(self, "Save analysis tab settings", "analysis.apolt", "Apol Tab Settings File (*.apolt);;" "All Files (*)")[0] @@ -417,8 +427,6 @@ class ApolMainWindow(SEToolsWidget, QMainWindow): if not filename: return - settings = self._get_settings() - try: with open(filename, "w") as fd: json.dump(settings, fd, indent=1) @@ -556,6 +564,30 @@ class ApolMainWindow(SEToolsWidget, QMainWindow): format("\n\n".join(loading_errors))) def save_workspace(self): + workspace = {} + try: + workspace["__policy__"] = os.path.abspath(str(self._policy)) + workspace["__permmap__"] = os.path.abspath(str(self._permmap)) + workspace["__tabs__"] = [] + + for index in range(self.AnalysisTabs.count()): + tab = self.AnalysisTabs.widget(index) + + settings = tab.save() + + # add the tab info to the settings. + settings["__title__"] = self.AnalysisTabs.tabText(index) + settings["__tab__"] = type(tab).__name__ + + workspace["__tabs__"].append(settings) + + except RuntimeError: + self.log.critical("Errors in the query prevent saving the workspace.") + self.error_msg.critical(self, "Unable to save workspace", + "Please resolve errors in tab \"{0}\" before saving the" + " settings.".format(self.AnalysisTabs.tabText(index))) + return + filename = QFileDialog.getSaveFileName(self, "Save analysis workspace", "workspace.apolw", "Apol Workspace Files (*.apolw);;" "All Files (*)")[0] @@ -563,22 +595,6 @@ class ApolMainWindow(SEToolsWidget, QMainWindow): if not filename: return - workspace = {} - workspace["__policy__"] = os.path.abspath(str(self._policy)) - workspace["__permmap__"] = os.path.abspath(str(self._permmap)) - workspace["__tabs__"] = [] - - for index in range(self.AnalysisTabs.count()): - tab = self.AnalysisTabs.widget(index) - - settings = tab.save() - - # add the tab info to the settings. - settings["__title__"] = self.AnalysisTabs.tabText(index) - settings["__tab__"] = type(tab).__name__ - - workspace["__tabs__"].append(settings) - with open(filename, "w") as fd: json.dump(workspace, fd, indent=1)