From 1da127c89812f94e88cb44c8f37df1ddc026a5b5 Mon Sep 17 00:00:00 2001 From: blitzmann Date: Sun, 26 Nov 2017 01:54:36 -0500 Subject: [PATCH] Working commit to better handle errors --- gui/errorDialog.py | 53 +++++++++++++++++++++++++---------------- pyfa.py | 11 +++++---- service/prereqsCheck.py | 15 +++++++++++- 3 files changed, 53 insertions(+), 26 deletions(-) diff --git a/gui/errorDialog.py b/gui/errorDialog.py index 627e719f9..b1d972b2b 100644 --- a/gui/errorDialog.py +++ b/gui/errorDialog.py @@ -17,31 +17,42 @@ # along with pyfa. If not, see . # =============================================================================== -import platform -import sys +# import platform +# import sys +# +# # noinspection PyPackageRequirements +# import wx +# +# try: +# import config +# except: +# config = None +# +# try: +# import sqlalchemy +# +# sqlalchemy_version = sqlalchemy.__version__ +# except: +# sqlalchemy_version = "Unknown" +# +# try: +# from logbook import __version__ as logbook_version +# except: +# logbook_version = "Unknown" +# +# import wx.lib.agw.hyperlink -# noinspection PyPackageRequirements -import wx -try: - import config -except: - config = None +class ErrorFrameHandler(object): + __app = None -try: - import sqlalchemy - - sqlalchemy_version = sqlalchemy.__version__ -except: - sqlalchemy_version = "Unknown" - -try: - from logbook import __version__ as logbook_version -except: - logbook_version = "Unknown" - -import wx.lib.agw.hyperlink + @classmethod + def HandleException(cls, exc_type, exc_value, exc_traceback): + print("Handle excpetion! {}".format(cls.__app)) + @classmethod + def SetApp(cls, wxApp): + cls.__app = wxApp class ErrorFrame(wx.Frame): diff --git a/pyfa.py b/pyfa.py index 9b1c91e22..9d6f60afa 100755 --- a/pyfa.py +++ b/pyfa.py @@ -20,11 +20,10 @@ import os -import platform import sys import traceback from optparse import AmbiguousOptionError, BadOptionError, OptionParser -from service.prereqsCheck import PreCheckException, version_precheck, version_block +from service.prereqsCheck import PreCheckException, PreCheckMessage, version_precheck, version_block from logbook import CRITICAL, DEBUG, ERROR, FingersCrossedHandler, INFO, Logger, NestedSetup, NullHandler, StreamHandler, TimedRotatingFileHandler, WARNING, \ __version__ as logbook_version @@ -161,9 +160,10 @@ def handleGUIException(exc_type, exc_value, exc_traceback): pass # sys.exit() +from gui.errorDialog import ErrorFrameHandler # Replace the uncaught exception handler with our own handler. -sys.excepthook = handleGUIException +sys.excepthook = ErrorFrameHandler.HandleException # Parse command line options usage = "usage: %prog [--root]" @@ -193,7 +193,10 @@ if __name__ == "__main__": # Configure paths print ('starting') - version_precheck() + try: + version_precheck() + except PreCheckException as ex: + PreCheckMessage(str(ex)) import wx diff --git a/service/prereqsCheck.py b/service/prereqsCheck.py index a5b0896c1..4b781e5f9 100644 --- a/service/prereqsCheck.py +++ b/service/prereqsCheck.py @@ -8,6 +8,19 @@ version_block = '' class PreCheckException(Exception): pass +class PreCheckMessage(): + def __init__(self, msg): + # wx may not be installed, in which case print to console. For all other prechecks, should pop up a MessageDialog + try: + import wx + app = wx.App(False) + wx.MessageBox(msg, 'Error', wx.ICON_ERROR | wx.STAY_ON_TOP) + app.MainLoop() + except: + pass + finally: + print(msg) + sys.exit() def version_precheck(): global version_block @@ -40,7 +53,7 @@ def version_precheck(): saMatch = re.match("([0-9]+).([0-9]+).([0-9]+)(([b\.])([0-9]+))?", sqlalchemy.__version__) version_block += "\nSQLAlchemy version: {}".format(sqlalchemy.__version__) - if (int(saMatch.group(1)), int(saMatch.group(2)), int(saMatch.group(3))) < (3, 0, 5): + if (int(saMatch.group(1)), int(saMatch.group(2)), int(saMatch.group(3))) < (1, 0, 5): raise Exception() except: msg = "pyfa requires SQLAlchemy v1.0.5+. You can download SQLAlchemy from https://www.sqlalchemy.org/download.html"