Finish pulling all the cruft out of pyfa.py relating to logging and error handling. All that is now done in separate areas.

Also finally did some major reworking on the error dialog. Now it doesn't spawn a new wxApp and wxFrame for each and every error - attaches to MainFrame and sticks around, having exceptions append to it rather than spawn a new one. In the case that an error happens before MainFrame is available, it spins up a new wxApp. Yay cleanup!
This commit is contained in:
blitzmann
2017-11-26 03:53:38 -05:00
parent 1da127c898
commit c000b19986
4 changed files with 179 additions and 293 deletions

View File

@@ -18,48 +18,50 @@
# ===============================================================================
# import platform
# import sys
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
import traceback
import config
from logbook import Logger
from service.prereqsCheck import version_block
pyfalog = Logger(__name__)
class ErrorFrameHandler(object):
__app = None
class ErrorHandler(object):
__parent = None
__frame = None
@classmethod
def HandleException(cls, exc_type, exc_value, exc_traceback):
print("Handle excpetion! {}".format(cls.__app))
with config.logging_setup.threadbound():
# Print the base level traceback
t = traceback.format_exception(exc_type, exc_value, exc_traceback)
pyfalog.critical("\n\n"+"".join(t))
if cls.__parent is None:
app = wx.App(False)
ErrorFrame(None)
app.MainLoop()
sys.exit()
else:
if not cls.__frame:
cls.__frame = ErrorFrame(cls.__parent)
cls.__frame.Show()
cls.__frame.addException("".join(t))
@classmethod
def SetApp(cls, wxApp):
cls.__app = wxApp
def SetParent(cls, parent):
cls.__parent = parent
class ErrorFrame(wx.Frame):
def __init__(self, exception=None, tb=None, error_title='Error!'):
def __init__(self, parent=None, error_title='Error!'):
v = sys.version_info
wx.Frame.__init__(self, None, id=wx.ID_ANY, title="pyfa error", pos=wx.DefaultPosition, size=wx.Size(500, 600),
wx.Frame.__init__(self, parent, id=wx.ID_ANY, title="pyfa error", pos=wx.DefaultPosition, size=wx.Size(500, 600),
style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER | wx.STAY_ON_TOP)
desc = "pyfa has experienced an unexpected issue. Below is a message that contains crucial\n" \
@@ -96,59 +98,24 @@ class ErrorFrame(wx.Frame):
# mainSizer.AddSpacer((0, 5), 0, wx.EXPAND, 5)
errorTextCtrl = wx.TextCtrl(self, wx.ID_ANY, "", wx.DefaultPosition, (-1, 400), wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_RICH2 | wx.TE_DONTWRAP)
errorTextCtrl.SetFont(wx.Font(8, wx.FONTFAMILY_TELETYPE, wx.NORMAL, wx.NORMAL))
mainSizer.Add(errorTextCtrl, 0, wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, 5)
# try:
# errorTextCtrl.AppendText("OS version: \t" + str(platform.platform()))
# except:
# errorTextCtrl.AppendText("OS version: Unknown")
# errorTextCtrl.AppendText("\n")
#
# try:
# errorTextCtrl.AppendText("Python: \t" + '{}.{}.{}'.format(v.major, v.minor, v.micro))
# except:
# errorTextCtrl.AppendText("Python: Unknown")
# errorTextCtrl.AppendText("\n")
#
# try:
# errorTextCtrl.AppendText("wxPython: \t" + wx.VERSION_STRING)
# except:
# errorTextCtrl.AppendText("wxPython: Unknown")
# errorTextCtrl.AppendText("\n")
#
# errorTextCtrl.AppendText("SQLAlchemy: \t" + str(sqlalchemy_version))
# errorTextCtrl.AppendText("\n")
#
# errorTextCtrl.AppendText("Logbook: \t" + str(logbook_version))
# errorTextCtrl.AppendText("\n")
#
# try:
# errorTextCtrl.AppendText("pyfa version: {0} {1} - {2} {3}".format(config.version, config.tag, config.expansionName, config.expansionVersion))
# except:
# errorTextCtrl.AppendText("pyfa version: Unknown")
# errorTextCtrl.AppendText('\n')
#
# errorTextCtrl.AppendText("pyfa root: " + str(config.pyfaPath or "Unknown"))
# errorTextCtrl.AppendText('\n')
# errorTextCtrl.AppendText("save path: " + str(config.savePath or "Unknown"))
# errorTextCtrl.AppendText('\n')
# errorTextCtrl.AppendText("fs encoding: " + str(sys.getfilesystemencoding() or "Unknown"))
# errorTextCtrl.AppendText('\n\n')
errorTextCtrl.AppendText("EXCEPTION: " + str(exception or "Unknown"))
errorTextCtrl.AppendText('\n\n')
if tb:
for line in tb:
errorTextCtrl.AppendText(line)
errorTextCtrl.Layout()
self.errorTextCtrl = wx.TextCtrl(self, wx.ID_ANY, version_block.strip(), wx.DefaultPosition, (-1, 400), wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_RICH2 | wx.TE_DONTWRAP)
self.errorTextCtrl.SetFont(wx.Font(8, wx.FONTFAMILY_TELETYPE, wx.NORMAL, wx.NORMAL))
mainSizer.Add(self.errorTextCtrl, 0, wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, 5)
self.errorTextCtrl.AppendText("\n")
self.errorTextCtrl.Layout()
self.SetSizer(mainSizer)
mainSizer.Layout()
self.Layout()
self.Centre(wx.BOTH)
self.Bind(wx.EVT_CLOSE, self.OnClose)
self.Show()
def OnClose(self, evt):
self.Hide()
def addException(self, text):
self.errorTextCtrl.AppendText("\n{}\n\n{}".format("#" * 20, text))