gentlegiantJGC d7eedc1068 Fixed glob
Paths must be escaped first in case they contain special characters
2022-12-21 14:10:20 +00:00

96 lines
2.4 KiB
Python

#!/usr/bin/env python3
def _on_error(e):
"""Code to handle errors"""
err_list = []
try:
import traceback
err_list.append(traceback.format_exc())
except:
pass
if isinstance(e, ImportError):
err_list.append(
f"Failed to import requirements. Check that you extracted correctly."
)
err_list.append(str(e))
err = "\n".join(err_list)
print(err)
with open("./logs/crash.log", "w") as f:
f.write(err)
input("Press ENTER to continue.")
sys.exit(1)
try:
import sys
if sys.version_info[:2] < (3, 7):
raise Exception("Must be using Python 3.7+")
import logging
import os
import traceback
import glob
import time
import wx
if sys.platform == "linux" and wx.VERSION >= (4, 1, 1):
# bug 247
os.environ["PYOPENGL_PLATFORM"] = "egl"
except Exception as e:
_on_error(e)
def _init_log():
logs_path = os.path.join(".", "logs")
# set up handlers
os.makedirs(logs_path, exist_ok=True)
# remove all log files older than a week
for path in glob.glob(os.path.join(glob.escape(logs_path), "*.log")):
if (
os.path.isfile(path)
and os.path.getmtime(path) < time.time() - 3600 * 24 * 7
):
os.remove(path)
log = logging.getLogger()
log.setLevel(logging.DEBUG if "amulet-debug" in sys.argv else logging.INFO)
file_handler = logging.FileHandler(
os.path.join(logs_path, f"amulet_{os.getpid()}.log"), "w", encoding="utf-8"
)
file_handler.setFormatter(
logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
)
log.addHandler(file_handler)
console_handler = logging.StreamHandler()
console_handler.setFormatter(logging.Formatter("%(levelname)s - %(message)s"))
log.addHandler(console_handler)
def main():
try:
_init_log()
from amulet_map_editor.api.framework import AmuletApp
except Exception as e:
_on_error(e)
AmuletApp = None
try:
app = AmuletApp(0)
app.MainLoop()
except Exception as e:
log = logging.getLogger(__name__)
log.critical(
f"Amulet Crashed. Sorry about that. Please report it to a developer if you think this is an issue. \n{traceback.format_exc()}"
)
input("Press ENTER to continue.")
sys.exit(0)
if __name__ == "__main__":
main()