Make it possible to specify the portable path to use for OpenLP Data when in portable mode. This is very useful during development.

bzr-revno: 2863
This commit is contained in:
Tomas Groth 2019-05-02 21:56:42 +02:00
commit 18063af664
2 changed files with 36 additions and 2 deletions

View File

@ -30,6 +30,7 @@ import argparse
import logging import logging
import sys import sys
import time import time
import os
from datetime import datetime from datetime import datetime
from traceback import format_exception from traceback import format_exception
@ -40,7 +41,7 @@ from openlp.core.common import is_macosx, is_win
from openlp.core.common.applocation import AppLocation from openlp.core.common.applocation import AppLocation
from openlp.core.loader import loader from openlp.core.loader import loader
from openlp.core.common.i18n import LanguageManager, UiStrings, translate from openlp.core.common.i18n import LanguageManager, UiStrings, translate
from openlp.core.common.path import copytree, create_paths from openlp.core.common.path import copytree, create_paths, Path
from openlp.core.common.registry import Registry from openlp.core.common.registry import Registry
from openlp.core.common.settings import Settings from openlp.core.common.settings import Settings
from openlp.core.display.screens import ScreenList from openlp.core.display.screens import ScreenList
@ -301,6 +302,9 @@ def parse_options(args=None):
help='Set logging to LEVEL level. Valid values are "debug", "info", "warning".') help='Set logging to LEVEL level. Valid values are "debug", "info", "warning".')
parser.add_argument('-p', '--portable', dest='portable', action='store_true', parser.add_argument('-p', '--portable', dest='portable', action='store_true',
help='Specify if this should be run as a portable app, ') help='Specify if this should be run as a portable app, ')
parser.add_argument('-pp', '--portable-path', dest='portablepath', default=None,
help='Specify the path of the portable data, defaults to "{dir_name}".'.format(
dir_name=os.path.join('<AppDir>', '..', '..')))
parser.add_argument('-w', '--no-web-server', dest='no_web_server', action='store_true', parser.add_argument('-w', '--no-web-server', dest='no_web_server', action='store_true',
help='Turn off the Web and Socket Server ') help='Turn off the Web and Socket Server ')
parser.add_argument('rargs', nargs='?', default=[]) parser.add_argument('rargs', nargs='?', default=[])
@ -356,7 +360,14 @@ def main(args=None):
application.setApplicationName('OpenLPPortable') application.setApplicationName('OpenLPPortable')
Settings.setDefaultFormat(Settings.IniFormat) Settings.setDefaultFormat(Settings.IniFormat)
# Get location OpenLPPortable.ini # Get location OpenLPPortable.ini
portable_path = (AppLocation.get_directory(AppLocation.AppDir) / '..' / '..').resolve() if args.portablepath:
if os.path.isabs(args.portablepath):
portable_path = Path(args.portablepath)
else:
portable_path = AppLocation.get_directory(AppLocation.AppDir) / '..' / args.portablepath
else:
portable_path = AppLocation.get_directory(AppLocation.AppDir) / '..' / '..'
portable_path = portable_path.resolve()
data_path = portable_path / 'Data' data_path = portable_path / 'Data'
set_up_logging(portable_path / 'Other') set_up_logging(portable_path / 'Other')
log.info('Running portable') log.info('Running portable')

View File

@ -29,6 +29,7 @@ from PyQt5 import QtCore, QtWidgets
sys.modules['PyQt5.QtWebEngineWidgets'] = MagicMock() sys.modules['PyQt5.QtWebEngineWidgets'] = MagicMock()
from openlp.core.app import OpenLP, parse_options from openlp.core.app import OpenLP, parse_options
from openlp.core.common import is_win
from openlp.core.common.settings import Settings from openlp.core.common.settings import Settings
from tests.utils.constants import RESOURCE_PATH from tests.utils.constants import RESOURCE_PATH
@ -84,6 +85,28 @@ def test_parse_options_debug_and_portable():
assert args.rargs == [], 'The service file should be blank' assert args.rargs == [], 'The service file should be blank'
def test_parse_options_portable_and_portable_path():
"""
Test the parse options process works portable and portable-path
"""
# GIVEN: a a set of system arguments.
if is_win():
data_path = 'c:\\temp\\openlp-data'
else:
data_path = '/tmp/openlp-data'
sys.argv[1:] = ['--portable', '--portable-path', '{datapath}'.format(datapath=data_path)]
# WHEN: We we parse them to expand to options
args = parse_options()
# THEN: the following fields will have been extracted.
assert args.loglevel == 'warning', 'The log level should be set to warning'
assert args.no_error_form is False, 'The no_error_form should be set to False'
assert args.portable is True, 'The portable flag should be set to true'
assert args.portablepath == data_path, 'The portable path should be set as expected'
assert args.rargs == [], 'The service file should be blank'
def test_parse_options_all_no_file(): def test_parse_options_all_no_file():
""" """
Test the parse options process works with two options Test the parse options process works with two options