Exception hook overwrite
This commit is contained in:
parent
263e125aa8
commit
6ffcc59b91
1 changed files with 54 additions and 10 deletions
|
@ -4,6 +4,7 @@ import os
|
||||||
import shutil
|
import shutil
|
||||||
import getopt
|
import getopt
|
||||||
import configparser
|
import configparser
|
||||||
|
import traceback
|
||||||
|
|
||||||
# Python 3
|
# Python 3
|
||||||
QString = str
|
QString = str
|
||||||
|
@ -28,10 +29,10 @@ if ('--help' in sys.argv[1:]) or ('-h' in sys.argv[1:]):
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
import logging.config
|
import logging.config
|
||||||
from datetime import timedelta
|
import datetime
|
||||||
import random
|
import random
|
||||||
import re
|
import re
|
||||||
from time import time
|
import time
|
||||||
try:
|
try:
|
||||||
import json
|
import json
|
||||||
except:
|
except:
|
||||||
|
@ -88,6 +89,8 @@ import ostools
|
||||||
_datadir = ostools.getDataDir()
|
_datadir = ostools.getDataDir()
|
||||||
if not os.path.isdir(_datadir):
|
if not os.path.isdir(_datadir):
|
||||||
os.makedirs(_datadir)
|
os.makedirs(_datadir)
|
||||||
|
if not os.path.isdir(os.path.join(_datadir, 'errorlogs')):
|
||||||
|
os.makedirs(os.path.join(_datadir, 'errorlogs'))
|
||||||
# See, what I've done here is that _datadir is '' if we're not on OSX, so the
|
# See, what I've done here is that _datadir is '' if we're not on OSX, so the
|
||||||
# concatination is the same as if it wasn't there.
|
# concatination is the same as if it wasn't there.
|
||||||
# UPDATE 2011-11-28 <Kiooeht>:
|
# UPDATE 2011-11-28 <Kiooeht>:
|
||||||
|
@ -255,7 +258,7 @@ import pytwmn
|
||||||
# "caligulasAquarium", "cuttlefishCuller", "carcinoGeneticist", "centaursTesticle", \
|
# "caligulasAquarium", "cuttlefishCuller", "carcinoGeneticist", "centaursTesticle", \
|
||||||
# "grimAuxiliatrix", "gallowsCalibrator", "gardenGnostic", "ectoBiologist", \
|
# "grimAuxiliatrix", "gallowsCalibrator", "gardenGnostic", "ectoBiologist", \
|
||||||
# "twinArmageddons", "terminallyCapricious", "turntechGodhead", "tentacleTherapist"]
|
# "twinArmageddons", "terminallyCapricious", "turntechGodhead", "tentacleTherapist"]
|
||||||
canon_handles = ["",]# Unused, kept to prevent unexpected calls causing a crash.
|
#canon_handles = ["",]# Unused, kept to prevent unexpected calls causing a crash.
|
||||||
CUSTOMBOTS = ["CALSPRITE", RANDNICK.upper()]
|
CUSTOMBOTS = ["CALSPRITE", RANDNICK.upper()]
|
||||||
BOTNAMES = ["NICKSERV", "CHANSERV", "MEMOSERV", "OPERSERV", "HELPSERV", "HOSTSERV", "BOTSERV"]
|
BOTNAMES = ["NICKSERV", "CHANSERV", "MEMOSERV", "OPERSERV", "HELPSERV", "HOSTSERV", "BOTSERV"]
|
||||||
BOTNAMES.extend(CUSTOMBOTS)
|
BOTNAMES.extend(CUSTOMBOTS)
|
||||||
|
@ -1487,7 +1490,7 @@ class PesterWindow(MovingWindow):
|
||||||
|
|
||||||
self.pingtimer = QtCore.QTimer()
|
self.pingtimer = QtCore.QTimer()
|
||||||
self.pingtimer.timeout.connect(self.checkPing)
|
self.pingtimer.timeout.connect(self.checkPing)
|
||||||
self.lastping = int(time())
|
self.lastping = int(time.time())
|
||||||
self.pingtimer.start(1000*90)
|
self.pingtimer.start(1000*90)
|
||||||
|
|
||||||
self.mychumhandleLabel.adjustSize() # Required so "CHUMHANDLE:" regardless of style-sheet.
|
self.mychumhandleLabel.adjustSize() # Required so "CHUMHANDLE:" regardless of style-sheet.
|
||||||
|
@ -1532,7 +1535,7 @@ class PesterWindow(MovingWindow):
|
||||||
|
|
||||||
@QtCore.pyqtSlot()
|
@QtCore.pyqtSlot()
|
||||||
def checkPing(self):
|
def checkPing(self):
|
||||||
curtime = int(time())
|
curtime = int(time.time())
|
||||||
if curtime - self.lastping > 600:
|
if curtime - self.lastping > 600:
|
||||||
self.pingServer.emit()
|
self.pingServer.emit()
|
||||||
|
|
||||||
|
@ -1650,7 +1653,7 @@ class PesterWindow(MovingWindow):
|
||||||
msg = str(msg)
|
msg = str(msg)
|
||||||
if handle not in memo.times:
|
if handle not in memo.times:
|
||||||
# new chum! time current
|
# new chum! time current
|
||||||
newtime = timedelta(0)
|
newtime = datetime.timedelta(0)
|
||||||
time = TimeTracker(newtime)
|
time = TimeTracker(newtime)
|
||||||
memo.times[handle] = time
|
memo.times[handle] = time
|
||||||
if not (msg.startswith("/me") or msg.startswith("PESTERCHUM:ME")):
|
if not (msg.startswith("/me") or msg.startswith("PESTERCHUM:ME")):
|
||||||
|
@ -3271,7 +3274,6 @@ class PesterWindow(MovingWindow):
|
||||||
msgbox.addButton(QtWidgets.QPushButton("Yes"), QtWidgets.QMessageBox.ButtonRole.YesRole)
|
msgbox.addButton(QtWidgets.QPushButton("Yes"), QtWidgets.QMessageBox.ButtonRole.YesRole)
|
||||||
msgbox.addButton(QtWidgets.QPushButton("No"), QtWidgets.QMessageBox.ButtonRole.NoRole)
|
msgbox.addButton(QtWidgets.QPushButton("No"), QtWidgets.QMessageBox.ButtonRole.NoRole)
|
||||||
msgbox.exec()
|
msgbox.exec()
|
||||||
reply = msgbox.buttonRole(msgbox.clickedButton())
|
|
||||||
|
|
||||||
if (reply==QtWidgets.QMessageBox.ButtonRole.YesRole):
|
if (reply==QtWidgets.QMessageBox.ButtonRole.YesRole):
|
||||||
with open(_datadir + "serverlist.json", "w") as server_file:
|
with open(_datadir + "serverlist.json", "w") as server_file:
|
||||||
|
@ -3577,12 +3579,15 @@ class MainProgram(QtCore.QObject):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(MainProgram, self).__init__()
|
super(MainProgram, self).__init__()
|
||||||
|
|
||||||
|
_oldhook = sys.excepthook
|
||||||
|
sys.excepthook = self.uncaughtException
|
||||||
|
|
||||||
if os.name.upper() == "NT":
|
if os.name.upper() == "NT":
|
||||||
# karxi: Before we do *anything* else, we have to make a special
|
# karxi: Before we do *anything* else, we have to make a special
|
||||||
# exception for Windows. Otherwise, the icon won't work properly.
|
# exception for Windows. Otherwise, the icon won't work properly.
|
||||||
# NOTE: This is presently being tested, since I don't have a
|
# NOTE: This is presently being tested, since I don't have a
|
||||||
# Windows computer at the moment. Hopefully it'll work.
|
# Windows computer at the moment. Hopefully it'll work.
|
||||||
# See http://stackoverflow.com/a/1552105 for more details.
|
# See https://stackoverflow.com/a/1552105 for more details.
|
||||||
from ctypes import windll
|
from ctypes import windll
|
||||||
# Note that this has to be unicode.
|
# Note that this has to be unicode.
|
||||||
wid = "mspa.homestuck.pesterchum.314"
|
wid = "mspa.homestuck.pesterchum.314"
|
||||||
|
@ -3927,6 +3932,39 @@ Click this message to never see this again.")
|
||||||
options["honk"] = False
|
options["honk"] = False
|
||||||
return options
|
return options
|
||||||
|
|
||||||
|
def uncaughtException(self, exc, value, tb):
|
||||||
|
# Show error to end user and log.
|
||||||
|
try:
|
||||||
|
# Log to log file
|
||||||
|
PchumLog.error(exc, value, tb)
|
||||||
|
|
||||||
|
# Try to write to separate logfile
|
||||||
|
try:
|
||||||
|
lt = time.localtime()
|
||||||
|
lt_str = time.strftime("%Y-%m-%d %H-%M", lt)
|
||||||
|
f = open(os.path.join(_datadir, 'errorlogs', ('pestererror %s.log' % lt_str)), 'a')
|
||||||
|
traceback.print_tb(tb, file=f)
|
||||||
|
f.close()
|
||||||
|
except Exception as e:
|
||||||
|
print(str(e))
|
||||||
|
|
||||||
|
# Show msgbox
|
||||||
|
msgbox = QtWidgets.QMessageBox()
|
||||||
|
msgbox.setIcon(QtWidgets.QMessageBox.Icon.Critical)
|
||||||
|
try:
|
||||||
|
msgbox.setStyleSheet("QMessageBox{" + self.widget.theme["main/defaultwindow/style"] + "}")
|
||||||
|
except Exception as e:
|
||||||
|
print(str(e))
|
||||||
|
msgbox.setStyleSheet("background-color: red; color: black; font-size: x-large;")
|
||||||
|
msgbox.setText("An uncaught exception occurred: %s \n%s \n%s "
|
||||||
|
% (exc,
|
||||||
|
value,
|
||||||
|
''.join(traceback.format_tb(tb))))
|
||||||
|
msgbox.exec()
|
||||||
|
except Exception as e:
|
||||||
|
print("failed to process uncaught except: " + str(e))
|
||||||
|
PchumLog.exception("app error")
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
#PchumLog.critical("mreowww") <--- debug thingy :3
|
#PchumLog.critical("mreowww") <--- debug thingy :3
|
||||||
sys.exit(self.app.exec())
|
sys.exit(self.app.exec())
|
||||||
|
@ -3942,5 +3980,11 @@ def _retrieveGlobals():
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
# We're being run as a script - not being imported.
|
# We're being run as a script - not being imported.
|
||||||
pesterchum = MainProgram()
|
try:
|
||||||
pesterchum.run()
|
pesterchum = MainProgram()
|
||||||
|
try:
|
||||||
|
pesterchum.run()
|
||||||
|
except SystemExit:
|
||||||
|
pass
|
||||||
|
except:
|
||||||
|
PchumLog.exception("app error: ")
|
||||||
|
|
Loading…
Reference in a new issue