Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions python/scraper_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@ def _configure_default_rating(details, settings):
def _configure_tags(details, settings):
if not settings.getSettingBool('add_tags'):
del details['info']['tag']
elif settings.getSettingBool('enable_tag_whitelist'):
whitelist = set(tag.strip().lower() for tag in settings.getStringList('tag_whitelist'))
details['info']['tag'] = [tag for tag in details['info']['tag'] if tag.lower() in whitelist]
return details

# pylint: disable=invalid-name
Expand Down Expand Up @@ -102,6 +105,9 @@ def getSettingNumber(self, id):
def getSettingString(self, id):
return self._inner_get_setting(id, basestring, '')

def getStringList(self, id):
return self._inner_get_setting(id, list, [])

def _inner_get_setting(self, setting_id, setting_type, default):
value = self.data.get(setting_id)
if isinstance(value, setting_type):
Expand Down
8 changes: 8 additions & 0 deletions resources/language/resource.language.en_gb/strings.po
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,14 @@ msgctxt "#30015"
msgid "Maximum number of each artwork type - many artwork can cause an error scraping to MySQL database"
msgstr ""

msgctxt "#30016"
msgid "Only add whitelisted keywords as tags"
msgstr ""

msgctxt "#30017"
msgid "Tag whitelist"
msgstr ""

msgctxt "#30100"
msgid "Language for Fanart.tv artwork"
msgstr ""
Expand Down
8 changes: 8 additions & 0 deletions resources/language/resource.language.en_us/strings.po
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,14 @@ msgctxt "#30015"
msgid "Maximum number of each artwork type - many artwork can cause an error scraping to MySQL database"
msgstr ""

msgctxt "#30016"
msgid "Only add whitelisted keywords as tags"
msgstr ""

msgctxt "#30017"
msgid "Tag whitelist"
msgstr ""

msgctxt "#30100"
msgid "Language for Fanart.tv artwork"
msgstr ""
Expand Down
28 changes: 28 additions & 0 deletions resources/settings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,34 @@
<default>true</default>
<control type="toggle"/>
</setting>
<setting id="enable_tag_whitelist" parent="add_tags" type="boolean" label="30016" help="">
<level>0</level>
<default>false</default>
<control type="toggle"/>
<dependencies>
<dependency type="enable" setting="add_tags" operator="is">true</dependency>
</dependencies>
</setting>
<setting id="tag_whitelist" parent="add_tags" type="list[string]" label="30017" help="">
<level>0</level>
<default>aftercreditsstinger, duringcreditsstinger</default>
<constraints>
<options>
<option>aftercreditsstinger</option>
<option>duringcreditsstinger</option>
</options>
<delimiter>, </delimiter>
<allownewoption>true</allownewoption>
</constraints>
<dependencies>
<dependency type="enable" setting="add_tags" operator="is">true</dependency>
<dependency type="visible" setting="enable_tag_whitelist" operator="is">true</dependency>
</dependencies>
<control type="list" format="string">
<multiselect>true</multiselect>
<addbuttonlabel>15019</addbuttonlabel>
</control>
</setting>
<setting id="lastUpdated" type="string" help="">
<level>4</level>
<default>0</default>
Expand Down
21 changes: 18 additions & 3 deletions test/unittests/test_scraper_config.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# pylint: disable=invalid-name,protected-access,too-many-lines,unused-argument
import unittest
from unittest.mock import MagicMock
from unittest.mock import MagicMock, call

from python import scraper_config

Expand Down Expand Up @@ -201,14 +201,14 @@ def test_configure_tags__true(self):
tags = ["tag 1", "tag 2"]
input_details = {'info': {'tag': tags}}
input_settings = MagicMock(spec=['getSettingBool'])
input_settings.getSettingBool.return_value = True
input_settings.getSettingBool.side_effect = [True, False]

expected_output = {'info': {'tag': tags}}

actual_output = scraper_config._configure_tags(input_details, input_settings)

self.assertListEqual(expected_output['info']['tag'], actual_output['info']['tag'])
input_settings.getSettingBool.assert_called_once_with('add_tags')
input_settings.getSettingBool.assert_has_calls([call('add_tags'), call('enable_tag_whitelist')])

def test_configure_tags__false(self):
input_details = {'info': {'tag': ["tag 1", "tag 2"]}}
Expand All @@ -222,6 +222,21 @@ def test_configure_tags__false(self):
self.assertDictEqual(expected_output['info'], actual_output['info'])
input_settings.getSettingBool.assert_called_once_with('add_tags')

def test_configure_tags__whitelist(self):
tags = ["tag 1", "tag 2"]
input_details = {'info': {'tag': tags}}
input_settings = MagicMock(spec=['getSettingBool', 'getStringList'])
input_settings.getSettingBool.return_value = True
input_settings.getStringList.return_value = ["tag 1", "tag 3"]

expected_output = {'info': {'tag': ["tag 1"]}}

actual_output = scraper_config._configure_tags(input_details, input_settings)

self.assertListEqual(expected_output['info']['tag'], actual_output['info']['tag'])
input_settings.getSettingBool.assert_has_calls([call('add_tags'), call('enable_tag_whitelist')])
input_settings.getStringList.assert_called_once_with('tag_whitelist')


class TestPathSpecificSettings(unittest.TestCase):
def test_getSettingString(self):
Expand Down
Loading