- added the mechanism to create an error log in the data path where to write debug data for the crashes of FlatCAM
This commit is contained in:
101
FlatCAM.py
101
FlatCAM.py
@@ -1,5 +1,7 @@
|
||||
import sys
|
||||
import os
|
||||
import traceback
|
||||
from datetime import datetime
|
||||
|
||||
from PyQt5 import QtWidgets
|
||||
from PyQt5.QtCore import QSettings, Qt
|
||||
@@ -12,10 +14,10 @@ from multiprocessing import freeze_support
|
||||
|
||||
if sys.platform == "win32":
|
||||
# cx_freeze 'module win32' workaround
|
||||
pass
|
||||
from win32comext.shell import shell, shellcon
|
||||
|
||||
MIN_VERSION_MAJOR = 3
|
||||
MIN_VERSION_MINOR = 5
|
||||
MIN_VERSION_MINOR = 6
|
||||
|
||||
|
||||
def debug_trace():
|
||||
@@ -35,24 +37,68 @@ if __name__ == '__main__':
|
||||
# NOTE: Never talk to the GUI from threads! This is why I commented the above.
|
||||
freeze_support()
|
||||
|
||||
portable = False
|
||||
# Folder for user settings.
|
||||
if sys.platform == 'win32':
|
||||
# #######################################################################################################
|
||||
# ####### CONFIG FILE WITH PARAMETERS REGARDING PORTABILITY #############################################
|
||||
# #######################################################################################################
|
||||
config_file = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) + '\\config\\configuration.txt'
|
||||
try:
|
||||
with open(config_file, 'r'):
|
||||
pass
|
||||
except FileNotFoundError:
|
||||
config_file = os.path.dirname(os.path.realpath(__file__)) + '\\config\\configuration.txt'
|
||||
|
||||
with open(config_file, 'r') as f:
|
||||
for line in f:
|
||||
param = str(line).replace('\n', '').rpartition('=')
|
||||
|
||||
if param[0] == 'portable':
|
||||
try:
|
||||
portable = eval(param[2])
|
||||
except NameError:
|
||||
portable = False
|
||||
|
||||
if portable is False:
|
||||
data_path = shell.SHGetFolderPath(0, shellcon.CSIDL_APPDATA, None, 0) + '\\FlatCAM'
|
||||
else:
|
||||
data_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) + '\\config'
|
||||
else:
|
||||
data_path = os.path.expanduser('~') + '/.FlatCAM'
|
||||
|
||||
if not os.path.exists(data_path):
|
||||
os.makedirs(data_path)
|
||||
|
||||
log_file_path = os.path.join(data_path, "log.txt")
|
||||
|
||||
major_v = sys.version_info.major
|
||||
minor_v = sys.version_info.minor
|
||||
# Supported Python version is >= 3.5
|
||||
if major_v >= MIN_VERSION_MAJOR:
|
||||
if minor_v >= MIN_VERSION_MINOR:
|
||||
pass
|
||||
else:
|
||||
print("FlatCAM BETA uses PYTHON 3 or later. The version minimum is %s.%s\n"
|
||||
"Your Python version is: %s.%s" % (MIN_VERSION_MAJOR, MIN_VERSION_MINOR, str(major_v), str(minor_v)))
|
||||
|
||||
if minor_v >= 8:
|
||||
os._exit(0)
|
||||
else:
|
||||
sys.exit(0)
|
||||
else:
|
||||
print("FlatCAM BETA uses PYTHON 3 or later. The version minimum is %s.%s\n"
|
||||
"Your Python version is: %s.%s" % (MIN_VERSION_MAJOR, MIN_VERSION_MINOR, str(major_v), str(minor_v)))
|
||||
sys.exit(0)
|
||||
v_msg = "FlatCAM Evo uses PYTHON 3 or later. The version minimum is %s.%s\n"\
|
||||
"Your Python version is: %s.%s" % (MIN_VERSION_MAJOR, MIN_VERSION_MINOR, str(major_v), str(minor_v))
|
||||
|
||||
# Supported Python version is >= 3.6
|
||||
if major_v < MIN_VERSION_MAJOR or (major_v >= MIN_VERSION_MAJOR and minor_v < MIN_VERSION_MINOR):
|
||||
print(v_msg)
|
||||
msg = '%s\n' % str(datetime.today())
|
||||
msg += v_msg
|
||||
|
||||
try:
|
||||
with open(log_file_path) as f:
|
||||
log_file = f.read()
|
||||
log_file += '\n' + msg
|
||||
|
||||
with open(log_file_path, 'w') as f:
|
||||
f.write(log_file)
|
||||
except IOError:
|
||||
with open(log_file_path, 'w') as f:
|
||||
f.write(msg)
|
||||
|
||||
if minor_v >= 8:
|
||||
os._exit(0)
|
||||
else:
|
||||
sys.exit(0)
|
||||
|
||||
debug_trace()
|
||||
VisPyPatches.apply_patches()
|
||||
@@ -82,6 +128,26 @@ if __name__ == '__main__':
|
||||
else:
|
||||
QtWidgets.QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, False)
|
||||
|
||||
|
||||
def excepthook(exc_type, exc_value, exc_tb):
|
||||
msg = '%s\n' % str(datetime.today())
|
||||
msg += "".join(traceback.format_exception(exc_type, exc_value, exc_tb))
|
||||
|
||||
try:
|
||||
with open(log_file_path) as f:
|
||||
log_file = f.read()
|
||||
log_file += '\n' + msg
|
||||
|
||||
with open(log_file_path, 'w') as f:
|
||||
f.write(log_file)
|
||||
except IOError:
|
||||
with open(log_file_path, 'w') as f:
|
||||
f.write(msg)
|
||||
QtWidgets.QApplication.quit()
|
||||
# or QtWidgets.QApplication.exit(0)
|
||||
|
||||
sys.excepthook = excepthook
|
||||
|
||||
app = QtWidgets.QApplication(sys.argv)
|
||||
app.setAttribute(Qt.AA_UseHighDpiPixmaps)
|
||||
|
||||
@@ -92,5 +158,6 @@ if __name__ == '__main__':
|
||||
app.setStyle(style)
|
||||
|
||||
fc = App(qapp=app)
|
||||
|
||||
sys.exit(app.exec_())
|
||||
# app.exec_()
|
||||
|
||||
Reference in New Issue
Block a user