diff --git a/config.py b/config.py index 7162f68d0..c9bd69842 100644 --- a/config.py +++ b/config.py @@ -47,7 +47,7 @@ def __createDirs(path): def getPyfaRoot(): base = getattr(sys.modules['__main__'], "__file__", sys.executable) if isFrozen() else sys.argv[0] root = os.path.dirname(os.path.realpath(os.path.abspath(base))) - root = str(root, sys.getfilesystemencoding()) + root = root return root diff --git a/eos/config.py b/eos/config.py index 2e34df838..2c1dd7e71 100644 --- a/eos/config.py +++ b/eos/config.py @@ -11,14 +11,14 @@ debug = False gamedataCache = True saveddataCache = True gamedata_version = "" -gamedata_connectionstring = 'sqlite:///' + str(realpath(join(dirname(abspath(__file__)), "..", "eve.db")), sys.getfilesystemencoding()) +gamedata_connectionstring = 'sqlite:///' + realpath(join(dirname(abspath(__file__)), "..", "eve.db")) pyfalog.debug("Gamedata connection string: {0}", gamedata_connectionstring) if istravis is True or hasattr(sys, '_called_from_test'): # Running in Travis. Run saveddata database in memory. saveddata_connectionstring = 'sqlite:///:memory:' else: - saveddata_connectionstring = 'sqlite:///' + str(realpath(join(dirname(abspath(__file__)), "..", "saveddata", "saveddata.db")), sys.getfilesystemencoding()) + saveddata_connectionstring = 'sqlite:///' + realpath(join(dirname(abspath(__file__)), "..", "saveddata", "saveddata.db")) pyfalog.debug("Saveddata connection string: {0}", saveddata_connectionstring) @@ -28,4 +28,4 @@ settings = { } # Autodetect path, only change if the autodetection bugs out. -path = dirname(str(__file__, sys.getfilesystemencoding())) +path = dirname(__file__) diff --git a/pyfa.py b/pyfa.py index fd205f6df..7f0b99140 100755 --- a/pyfa.py +++ b/pyfa.py @@ -31,11 +31,6 @@ from logbook import CRITICAL, DEBUG, ERROR, FingersCrossedHandler, INFO, Logger, import config -try: - import wxversion -except ImportError: - wxversion = None - try: import sqlalchemy except ImportError: @@ -59,108 +54,108 @@ class PassThroughOptionParser(OptionParser): pyfalog.error("Bad startup option passed.") largs.append(e.opt_str) - -class LoggerWriter(object): - def __init__(self, level): - # self.level is really like using log.debug(message) - # at least in my case - self.level = level - - def write(self, message): - # if statement reduces the amount of newlines that are - # printed to the logger - if message not in {'\n', ' '}: - self.level(message.replace("\n", "")) - - def flush(self): - # create a flush method so things can be flushed when - # the system wants to. Not sure if simply 'printing' - # sys.stderr is the correct way to do it, but it seemed - # to work properly for me. - self.level(sys.stderr) - - -class PreCheckException(Exception): - def __init__(self, msg): - try: - ln = sys.exc_info()[-1].tb_lineno - except AttributeError: - ln = inspect.currentframe().f_back.f_lineno - self.message = "{0.__name__} (line {1}): {2}".format(type(self), ln, msg) - self.args = self.message, - - -def handleGUIException(exc_type, exc_value, exc_traceback): - try: - # Try and import wx in case it's missing. - # noinspection PyPackageRequirements - import wx - from gui.errorDialog import ErrorFrame - except: - # noinspection PyShadowingNames - wx = None - # noinspection PyShadowingNames - ErrorFrame = None - - tb = traceback.format_tb(exc_traceback) - - try: - - # Try and output to our log handler - with logging_setup.threadbound(): - module_list = list(set(sys.modules) & set(globals())) - if module_list: - pyfalog.info("Imported Python Modules:") - for imported_module in module_list: - module_details = sys.modules[imported_module] - pyfalog.info("{0}: {1}", imported_module, getattr(module_details, '__version__', '')) - - pyfalog.critical("Exception in main thread: {0}", exc_value.message) - # Print the base level traceback - traceback.print_tb(exc_traceback) - - if wx and ErrorFrame: - pyfa_gui = wx.App(False) - if exc_type == PreCheckException: - msgbox = wx.MessageBox(exc_value.message, 'Error', wx.ICON_ERROR | wx.STAY_ON_TOP) - msgbox.ShowModal() - else: - ErrorFrame(exc_value, tb) - - pyfa_gui.MainLoop() - - pyfalog.info("Exiting.") - except: - # Most likely logging isn't available. Try and output to the console - module_list = list(set(sys.modules) & set(globals())) - if module_list: - pyfalog.info("Imported Python Modules:") - for imported_module in module_list: - module_details = sys.modules[imported_module] - print((str(imported_module) + ": " + str(getattr(module_details, '__version__', '')))) - - print(("Exception in main thread: " + str(exc_value.message))) - traceback.print_tb(exc_traceback) - - if wx and ErrorFrame: - pyfa_gui = wx.App(False) - if exc_type == PreCheckException: - msgbox = wx.MessageBox(exc_value.message, 'Error', wx.ICON_ERROR | wx.STAY_ON_TOP) - msgbox.ShowModal() - else: - ErrorFrame(exc_value, tb) - - pyfa_gui.MainLoop() - - print("Exiting.") - - finally: - # TODO: Add cleanup when exiting here. - sys.exit() - - -# Replace the uncaught exception handler with our own handler. -sys.excepthook = handleGUIException +# +# class LoggerWriter(object): +# def __init__(self, level): +# # self.level is really like using log.debug(message) +# # at least in my case +# self.level = level +# +# def write(self, message): +# # if statement reduces the amount of newlines that are +# # printed to the logger +# if message not in {'\n', ' '}: +# self.level(message.replace("\n", "")) +# +# def flush(self): +# # create a flush method so things can be flushed when +# # the system wants to. Not sure if simply 'printing' +# # sys.stderr is the correct way to do it, but it seemed +# # to work properly for me. +# self.level(sys.stderr) +# +# +# class PreCheckException(Exception): +# def __init__(self, msg): +# try: +# ln = sys.exc_info()[-1].tb_lineno +# except AttributeError: +# ln = inspect.currentframe().f_back.f_lineno +# self.message = "{0.__name__} (line {1}): {2}".format(type(self), ln, msg) +# self.args = self.message, +# +# +# def handleGUIException(exc_type, exc_value, exc_traceback): +# try: +# # Try and import wx in case it's missing. +# # noinspection PyPackageRequirements +# import wx +# from gui.errorDialog import ErrorFrame +# except: +# # noinspection PyShadowingNames +# wx = None +# # noinspection PyShadowingNames +# ErrorFrame = None +# +# tb = traceback.format_tb(exc_traceback) +# +# try: +# +# # Try and output to our log handler +# with logging_setup.threadbound(): +# module_list = list(set(sys.modules) & set(globals())) +# if module_list: +# pyfalog.info("Imported Python Modules:") +# for imported_module in module_list: +# module_details = sys.modules[imported_module] +# pyfalog.info("{0}: {1}", imported_module, getattr(module_details, '__version__', '')) +# +# pyfalog.critical("Exception in main thread: {0}", exc_value.message) +# # Print the base level traceback +# traceback.print_tb(exc_traceback) +# +# if wx and ErrorFrame: +# pyfa_gui = wx.App(False) +# if exc_type == PreCheckException: +# msgbox = wx.MessageBox(exc_value.message, 'Error', wx.ICON_ERROR | wx.STAY_ON_TOP) +# msgbox.ShowModal() +# else: +# ErrorFrame(exc_value, tb) +# +# pyfa_gui.MainLoop() +# +# pyfalog.info("Exiting.") +# except: +# # Most likely logging isn't available. Try and output to the console +# module_list = list(set(sys.modules) & set(globals())) +# if module_list: +# pyfalog.info("Imported Python Modules:") +# for imported_module in module_list: +# module_details = sys.modules[imported_module] +# print((str(imported_module) + ": " + str(getattr(module_details, '__version__', '')))) +# +# print(("Exception in main thread: " + str(exc_value.message))) +# traceback.print_tb(exc_traceback) +# +# if wx and ErrorFrame: +# pyfa_gui = wx.App(False) +# if exc_type == PreCheckException: +# msgbox = wx.MessageBox(exc_value.message, 'Error', wx.ICON_ERROR | wx.STAY_ON_TOP) +# msgbox.ShowModal() +# else: +# ErrorFrame(exc_value, tb) +# +# pyfa_gui.MainLoop() +# +# print("Exiting.") +# +# finally: +# # TODO: Add cleanup when exiting here. +# sys.exit() +# +# +# # Replace the uncaught exception handler with our own handler. +# sys.excepthook = handleGUIException # Parse command line options usage = "usage: %prog [--root]" @@ -173,19 +168,19 @@ parser.add_option("-s", "--savepath", action="store", dest="savepath", help="Set parser.add_option("-l", "--logginglevel", action="store", dest="logginglevel", help="Set desired logging level [Critical|Error|Warning|Info|Debug]", default="Error") (options, args) = parser.parse_args() - -if options.logginglevel == "Critical": - options.logginglevel = CRITICAL -elif options.logginglevel == "Error": - options.logginglevel = ERROR -elif options.logginglevel == "Warning": - options.logginglevel = WARNING -elif options.logginglevel == "Info": - options.logginglevel = INFO -elif options.logginglevel == "Debug": - options.logginglevel = DEBUG -else: - options.logginglevel = ERROR +# +# if options.logginglevel == "Critical": +# options.logginglevel = CRITICAL +# elif options.logginglevel == "Error": +# options.logginglevel = ERROR +# elif options.logginglevel == "Warning": +# options.logginglevel = WARNING +# elif options.logginglevel == "Info": +# options.logginglevel = INFO +# elif options.logginglevel == "Debug": +# options.logginglevel = DEBUG +# else: +# options.logginglevel = ERROR if __name__ == "__main__": # Configure paths @@ -284,55 +279,55 @@ if __name__ == "__main__": pyfalog.info("Writing log file to: {0}", config.logPath) # Output all stdout (print) messages as warnings - try: - sys.stdout = LoggerWriter(pyfalog.warning) - except: - pyfalog.critical("Cannot redirect. Continuing without writing stdout to log.") + # try: + # sys.stdout = LoggerWriter(pyfalog.warning) + # except: + # pyfalog.critical("Cannot redirect. Continuing without writing stdout to log.") # Output all stderr (stacktrace) messages as critical - try: - sys.stderr = LoggerWriter(pyfalog.critical) - except: - pyfalog.critical("Cannot redirect. Continuing without writing stderr to log.") + # try: + # sys.stderr = LoggerWriter(pyfalog.critical) + # except: + # pyfalog.critical("Cannot redirect. Continuing without writing stderr to log.") pyfalog.info("OS version: {0}", platform.platform()) pyfalog.info("Python version: {0}", sys.version) - if sys.version_info < (2, 7) or sys.version_info > (3, 0): - exit_message = "Pyfa requires python 2.x branch ( >= 2.7 )." - raise PreCheckException(exit_message) + # if sys.version_info < (2, 7) or sys.version_info > (3, 0): + # exit_message = "Pyfa requires python 2.x branch ( >= 2.7 )." + # raise PreCheckException(exit_message) if hasattr(sys, 'frozen'): pyfalog.info("Running in a frozen state.") else: pyfalog.info("Running in a thawed state.") - if not hasattr(sys, 'frozen') and wxversion: - try: - if options.force28 is True: - pyfalog.info("Selecting wx version: 2.8. (Forced)") - wxversion.select('2.8') - else: - pyfalog.info("Selecting wx versions: 3.0, 2.8") - wxversion.select(['3.0', '2.8']) - except: - pyfalog.warning("Unable to select wx version. Attempting to import wx without specifying the version.") - else: - if not wxversion: - pyfalog.warning("wxVersion not found. Attempting to import wx without specifying the version.") + # if not hasattr(sys, 'frozen') and wxversion: + # try: + # if options.force28 is True: + # pyfalog.info("Selecting wx version: 2.8. (Forced)") + # wxversion.select('2.8') + # else: + # pyfalog.info("Selecting wx versions: 3.0, 2.8") + # wxversion.select(['3.0', '2.8']) + # except: + # pyfalog.warning("Unable to select wx version. Attempting to import wx without specifying the version.") + # else: + # if not wxversion: + # pyfalog.warning("wxVersion not found. Attempting to import wx without specifying the version.") try: # noinspection PyPackageRequirements import wx except: exit_message = "Cannot import wxPython. You can download wxPython (2.8+) from http://www.wxpython.org/" - raise PreCheckException(exit_message) + # raise PreCheckException(exit_message) pyfalog.info("wxPython version: {0}.", str(wx.VERSION_STRING)) if sqlalchemy is None: exit_message = "\nCannot find sqlalchemy.\nYou can download sqlalchemy (0.6+) from http://www.sqlalchemy.org/" - raise PreCheckException(exit_message) + # raise PreCheckException(exit_message) else: saVersion = sqlalchemy.__version__ saMatch = re.match("([0-9]+).([0-9]+)([b\.])([0-9]+)", saVersion) @@ -352,15 +347,16 @@ if __name__ == "__main__": pyfalog.warning("Unknown sqlalchemy version string format, skipping check. Version: {0}", sqlalchemy.__version__) logVersion = logbook_version.split('.') - if int(logVersion[0]) == 0 and int(logVersion[1]) < 10: - raise PreCheckException("Logbook version >= 0.10.0 is required.") + # if int(logVersion[0]) == 0 and int(logVersion[1]) < 10: + # raise PreCheckException("Logbook version >= 0.10.0 is required.") if 'wxMac' not in wx.PlatformInfo or ('wxMac' in wx.PlatformInfo and wx.VERSION >= (3, 0)): try: import requests config.requestsVersion = requests.__version__ except ImportError: - raise PreCheckException("Cannot import requests. You can download requests from https://pypi.python.org/pypi/requests.") + pass + # raise PreCheckException("Cannot import requests. You can download requests from https://pypi.python.org/pypi/requests.") import eos.db