openlp/openlp/__main__.py

80 lines
3.0 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
2019-04-13 13:00:22 +00:00
##########################################################################
# OpenLP - Open Source Lyrics Projection #
# ---------------------------------------------------------------------- #
2024-01-05 17:18:59 +00:00
# Copyright (c) 2008-2024 OpenLP Developers #
2019-04-13 13:00:22 +00:00
# ---------------------------------------------------------------------- #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
##########################################################################
2017-09-09 05:19:22 +00:00
"""
The entrypoint for OpenLP
"""
import atexit
2017-09-09 05:19:22 +00:00
import faulthandler
import logging
import multiprocessing
2010-07-30 22:48:09 +00:00
# from OpenGL import GL # noqa
2017-10-10 07:08:44 +00:00
from openlp.core.app import main
from openlp.core.common.applocation import AppLocation
2017-10-07 07:05:07 +00:00
from openlp.core.common.path import create_paths
from openlp.core.common.platform import is_win
2017-10-07 07:05:07 +00:00
log = logging.getLogger(__name__)
error_log_file = None
def tear_down_fault_handling():
"""
When Python exits, close the file we were using for the faulthandler
"""
global error_log_file
error_log_file.close()
2017-10-07 07:05:07 +00:00
def set_up_fault_handling():
"""
Set up the Python fault handler
"""
global error_log_file
2017-10-07 07:05:07 +00:00
# Create the cache directory if it doesn't exist, and enable the fault handler to log to an error log file
try:
create_paths(AppLocation.get_directory(AppLocation.CacheDir))
error_log_file = (AppLocation.get_directory(AppLocation.CacheDir) / 'error.log').open('wb')
atexit.register(tear_down_fault_handling)
faulthandler.enable(error_log_file)
except OSError:
log.exception('An exception occurred when enabling the fault handler')
atexit.unregister(tear_down_fault_handling)
if error_log_file:
error_log_file.close()
def start():
"""
Instantiate and run the application.
"""
2017-10-07 07:05:07 +00:00
set_up_fault_handling()
# Add support for using multiprocessing from frozen Windows executable (built using PyInstaller),
# see https://docs.python.org/3/library/multiprocessing.html#multiprocessing.freeze_support
if is_win():
multiprocessing.freeze_support()
2011-04-30 07:42:20 +00:00
main()
2018-10-16 07:29:58 +00:00
if __name__ == '__main__':
start() # pragma: nocover