forked from openlp/openlp
Merge branch 'bibleversionapi' into 'master'
Bible version api See merge request openlp/openlp!220
This commit is contained in:
commit
8fe519cada
@ -85,3 +85,47 @@ def live_view(plugin):
|
||||
id = data.get('id', -1)
|
||||
live(plugin, id)
|
||||
return '', 204
|
||||
|
||||
|
||||
@plugins.route('/<plugin>/search-options', methods=['GET'])
|
||||
def search_options(plugin):
|
||||
"""
|
||||
Get the plugin's search options
|
||||
"""
|
||||
log.debug(f'{plugin}/search-options called')
|
||||
if plugin == 'bibles':
|
||||
bible_plugin = Registry().get('bible_plugin')
|
||||
bibles = list(bible_plugin.manager.get_bibles().keys())
|
||||
primary = Registry().get('settings').value('bibles/primary bible')
|
||||
return jsonify(primary=primary, bibles=bibles)
|
||||
else:
|
||||
return '', 501
|
||||
|
||||
|
||||
@plugins.route('/<plugin>/search-options', methods=['POST'])
|
||||
@login_required
|
||||
def set_search_option(plugin):
|
||||
"""
|
||||
Sets the plugin's search options
|
||||
"""
|
||||
log.debug(f'{plugin}/search-options-set called')
|
||||
data = request.json
|
||||
option = ''
|
||||
if not data:
|
||||
log.error('Missing request data')
|
||||
abort(400)
|
||||
elif type(data.get('option')) is not (str or int):
|
||||
abort(400)
|
||||
try:
|
||||
option = data.get('option')
|
||||
except ValueError:
|
||||
log.error('Invalid data passed: ' + option)
|
||||
abort(400)
|
||||
|
||||
if plugin == 'bibles':
|
||||
Registry().get('settings').setValue('bibles/primary bible', option)
|
||||
Registry().execute('populate_bible_combo_boxes')
|
||||
return '', 204
|
||||
else:
|
||||
log.error('Unimplemented method')
|
||||
return '', 501
|
||||
|
@ -110,6 +110,7 @@ class BibleMediaItem(MediaManagerItem):
|
||||
self.search_timer.setSingleShot(True)
|
||||
self.search_timer.timeout.connect(self.on_search_timer_timeout)
|
||||
super().__init__(*args, **kwargs)
|
||||
Registry().register_function('populate_bible_combo_boxes', self.populate_bible_combo_boxes)
|
||||
|
||||
def setup_item(self):
|
||||
"""
|
||||
@ -335,9 +336,11 @@ class BibleMediaItem(MediaManagerItem):
|
||||
bibles = self.plugin.manager.get_bibles()
|
||||
bibles = [(_f, bibles[_f]) for _f in bibles if _f]
|
||||
bibles.sort(key=lambda k: get_locale_key(k[0]))
|
||||
self.version_combo_box.blockSignals(True)
|
||||
for bible in bibles:
|
||||
self.version_combo_box.addItem(bible[0], bible[1])
|
||||
self.second_combo_box.addItem(bible[0], bible[1])
|
||||
self.version_combo_box.blockSignals(False)
|
||||
# set the default value
|
||||
bible = self.settings.value('bibles/primary bible')
|
||||
find_and_set_in_combo_box(self.version_combo_box, bible)
|
||||
|
60
tests/functional/openlp_core/api/v2/test_plugins.py
Normal file
60
tests/functional/openlp_core/api/v2/test_plugins.py
Normal file
@ -0,0 +1,60 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
##########################################################################
|
||||
# OpenLP - Open Source Lyrics Projection #
|
||||
# ---------------------------------------------------------------------- #
|
||||
# Copyright (c) 2008-2020 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/>. #
|
||||
##########################################################################
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
from openlp.core.common.registry import Registry
|
||||
|
||||
|
||||
# Search options tests
|
||||
def test_bibles_search_options_returns_bibles_list(flask_client, settings):
|
||||
Registry().register('bible_plugin', MagicMock())
|
||||
res = flask_client.get('/api/v2/plugins/bibles/search-options').get_json()
|
||||
assert res.get('primary') == ""
|
||||
assert type(res.get('bibles')) is list
|
||||
|
||||
|
||||
def test_bibles_set_search_options_sets_bible_version(flask_client, settings):
|
||||
Registry().register('bible_plugin', MagicMock())
|
||||
res = flask_client.post('/api/v2/plugins/bibles/search-options', json=dict(option='foo'))
|
||||
assert res.status_code == 204
|
||||
assert Registry().get('settings').value('bibles/primary bible') == 'foo'
|
||||
|
||||
|
||||
def test_plugin_set_search_option_aborts_if_no_option(flask_client, settings):
|
||||
res = flask_client.post('/api/v2/plugins/songs/search-options')
|
||||
assert res.status_code == 400
|
||||
|
||||
|
||||
def test_plugin_set_search_option_aborts_if_invalid_option(flask_client, settings):
|
||||
res1 = flask_client.post('/api/v2/plugins/songs/search-options', json=dict(option=['']))
|
||||
res2 = flask_client.post('/api/v2/plugins/songs/search-options', json=dict(option={1: '', 2: ''}))
|
||||
assert res1.status_code == 400
|
||||
assert res2.status_code == 400
|
||||
|
||||
|
||||
def test_plugin_search_options_returns_plugin_exception(flask_client, settings):
|
||||
res = flask_client.get('/api/v2/plugins/songs/search-options')
|
||||
assert res.status_code == 501
|
||||
|
||||
|
||||
def test_plugin_set_search_option_returns_plugin_exception(flask_client, settings):
|
||||
res = flask_client.post('/api/v2/plugins/songs/search-options', json=dict(option=''))
|
||||
assert res.status_code == 501
|
Loading…
Reference in New Issue
Block a user