Source code for rkviewer.main

# pylint: disable=maybe-no-member
import wx
import sys
import logging
import logging.config
import traceback
from rkviewer.view import RKView
from rkviewer.controller import Controller
import os
from pathlib import Path


[docs]class ExceptionDialog(wx.MessageDialog): def __init__(self, msg): """Constructor""" super().__init__(None, msg, "Unknown Exception", wx.OK | wx.ICON_ERROR)
# for monkey-patching exceptions
[docs]def create_excepthook(old_excepthook): dlg = None # whether we've already displayed the dialog once, since wx might take some time to die over = False def custom_excepthook(etype, value, tb): nonlocal over, dlg if over: return over = True err_msg = ''.join(traceback.format_exception(etype, value, tb)) logging.error(err_msg) #old_excepthook(etype, value, traceback) if dlg is None: dlg = ExceptionDialog(err_msg) dlg.ShowModal() wx.GetApp().GetTopWindow().Destroy() dlg.Destroy() dlg = None return custom_excepthook
[docs]def setup_logging(): d = { 'version': 1, 'formatters': { 'detailed': { 'class': 'logging.Formatter', 'format': '%(asctime)s %(name)-15s %(levelname)-8s %(message)s' }, 'plugins': { 'class': 'logging.Formatter', 'format': '%(asctime)s %(filename)-15s %(levelname)-8s %(message)s', }, }, 'handlers': { 'console': { 'class': 'logging.StreamHandler', 'level': 'INFO', 'stream': 'ext://sys.stdout', }, 'debug': { 'class': 'logging.FileHandler', 'filename': 'rkviewer.log', 'mode': 'w', 'level': 'DEBUG', 'formatter': 'detailed', }, # 'errors': { # 'class': 'logging.FileHandler', # 'filename': 'rkviewer-errors.log', # 'mode': 'w', # 'level': 'ERROR', # 'formatter': 'detailed', # }, 'plugin-debug': { 'class': 'logging.FileHandler', 'filename': 'rkviewer-plugins.log', 'mode': 'w', 'level': 'DEBUG', 'formatter': 'plugins', } }, 'loggers': { 'controller': { 'handlers': ['debug'] }, 'canvas': { 'handlers': ['debug'] }, 'plugin': { 'handlers': ['plugin-debug'] }, }, 'root': { 'level': 'DEBUG', 'handlers': ['console', 'debug'] }, } logging.config.dictConfig(d)
[docs]def main(): setup_logging() # global old_excepthook # old_excepthook = sys.excepthook sys.excepthook = create_excepthook(sys.excepthook) logging.info('Initializing RKViewer...') view = RKView() controller = Controller(view) view.bind_controller(controller) view.init() view.main_loop()
if __name__ == '__main__': main()