Use start script __main__.py which enables 'python -m openlp'

bzr-revno: 2899
This commit is contained in:
Bastian Germann 2019-09-11 21:08:27 -07:00 committed by Raoul Snyman
commit 22ae2d66b5
3 changed files with 90 additions and 63 deletions

86
openlp/__main__.py Normal file
View File

@ -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 <https://www.gnu.org/licenses/>. #
##########################################################################
"""
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()

View File

@ -21,67 +21,9 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>. # # along with this program. If not, see <https://www.gnu.org/licenses/>. #
########################################################################## ##########################################################################
""" """
The entrypoint for OpenLP A compatibility entrypoint for OpenLP
""" """
import atexit from openlp import __main__
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__': if __name__ == '__main__':
start() __main__.start()

View File

@ -161,7 +161,6 @@ using a computer and a data projector.""",
url='https://openlp.org/', url='https://openlp.org/',
license='GPL-3.0-or-later', license='GPL-3.0-or-later',
packages=find_packages(exclude=['ez_setup', 'tests*']), packages=find_packages(exclude=['ez_setup', 'tests*']),
py_modules=['run_openlp'],
include_package_data=True, include_package_data=True,
zip_safe=False, zip_safe=False,
python_requires='>=3.6', python_requires='>=3.6',
@ -209,5 +208,5 @@ using a computer and a data projector.""",
'python-xlib; platform_system=="Linux"' 'python-xlib; platform_system=="Linux"'
], ],
setup_requires=['pytest-runner'], setup_requires=['pytest-runner'],
entry_points={'gui_scripts': ['openlp = run_openlp:start']} entry_points={'gui_scripts': ['openlp = openlp.__main__:start']}
) )