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:
@@ -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))
|
||||
Reference in New Issue
Block a user