diff --git a/openlp/__main__.py b/openlp/__main__.py new file mode 100644 index 000000000..7f820c240 --- /dev/null +++ b/openlp/__main__.py @@ -0,0 +1,86 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4 + +########################################################################## +# OpenLP - Open Source Lyrics Projection # +# ---------------------------------------------------------------------- # +# Copyright (c) 2008-2019 OpenLP Developers # +# ---------------------------------------------------------------------- # +# 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 . # +########################################################################## +""" +The entrypoint for OpenLP +""" +import atexit +import faulthandler +import logging +import multiprocessing +import sys + +# from OpenGL import GL + +from openlp.core.app import main +from openlp.core.common import is_macosx, is_win +from openlp.core.common.applocation import AppLocation +from openlp.core.common.path import create_paths + +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() + + +def set_up_fault_handling(): + """ + Set up the Python fault handler + """ + global error_log_file + # 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. + """ + 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() + # Mac OS X passes arguments like '-psn_XXXX' to the application. This argument is actually a process serial number. + # However, this causes a conflict with other OpenLP arguments. Since we do not use this argument we can delete it + # to avoid any potential conflicts. + if is_macosx(): + sys.argv = [x for x in sys.argv if not x.startswith('-psn')] + main() + + +if __name__ == '__main__': + start() diff --git a/run_openlp.py b/run_openlp.py index b686c8491..b75e3a6b6 100755 --- a/run_openlp.py +++ b/run_openlp.py @@ -21,67 +21,9 @@ # along with this program. If not, see . # ########################################################################## """ -The entrypoint for OpenLP +A compatibility entrypoint for OpenLP """ -import atexit -import faulthandler -import logging -import multiprocessing -import sys - -# from OpenGL import GL - -from openlp.core.app import main -from openlp.core.common import is_macosx, is_win -from openlp.core.common.applocation import AppLocation -from openlp.core.common.path import create_paths - -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() - - -def set_up_fault_handling(): - """ - Set up the Python fault handler - """ - global error_log_file - # 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. - """ - 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() - # Mac OS X passes arguments like '-psn_XXXX' to the application. This argument is actually a process serial number. - # However, this causes a conflict with other OpenLP arguments. Since we do not use this argument we can delete it - # to avoid any potential conflicts. - if is_macosx(): - sys.argv = [x for x in sys.argv if not x.startswith('-psn')] - main() - +from openlp import __main__ if __name__ == '__main__': - start() + __main__.start() diff --git a/setup.py b/setup.py index d88b94755..51caf0fe3 100644 --- a/setup.py +++ b/setup.py @@ -161,7 +161,6 @@ using a computer and a data projector.""", url='https://openlp.org/', license='GPL-3.0-or-later', packages=find_packages(exclude=['ez_setup', 'tests*']), - py_modules=['run_openlp'], include_package_data=True, zip_safe=False, python_requires='>=3.6', @@ -209,5 +208,5 @@ using a computer and a data projector.""", 'python-xlib; platform_system=="Linux"' ], setup_requires=['pytest-runner'], - entry_points={'gui_scripts': ['openlp = run_openlp:start']} + entry_points={'gui_scripts': ['openlp = openlp.__main__:start']} )