Pass filters directly instead of passing config.setting

Suggested by phw
This commit is contained in:
Laurent Monin
2019-05-28 20:34:01 +02:00
parent cb6c2b8825
commit 1aee66ccff
3 changed files with 38 additions and 57 deletions

View File

@@ -68,14 +68,10 @@ _TRANSLATE_TAGS = {
class TagGenreFilter:
def __init__(self, setting=None):
if setting is None:
setting = config.setting
self.genres_filter = setting['genres_filter']
def __init__(self, filters):
self.errors = dict()
self.match_regexes = defaultdict(list)
for lineno, line in enumerate(self.genres_filter.splitlines()):
for lineno, line in enumerate(filters.splitlines()):
line = line.strip()
if line and line[0] in ('+', '-'):
_list = line[0]
@@ -280,7 +276,7 @@ class Track(DataObject, Item):
# And generate the genre metadata tag
maxtags = config.setting['max_genres']
minusage = config.setting['min_genre_usage']
tag_filter = TagGenreFilter()
tag_filter = TagGenreFilter(config.setting['genres_filter'])
genre = []
for usage, name in taglist[:maxtags]:
if tag_filter.skip(name):

View File

@@ -138,9 +138,8 @@ class GenresOptionsPage(OptionsPage):
def update_test_genres_filter(self):
test_text = self.ui.test_genres_filter.toPlainText()
setting = dict()
setting["genres_filter"] = self.ui.genres_filter.toPlainText()
tagfilter = TagGenreFilter(setting=setting)
filters = self.ui.genres_filter.toPlainText()
tagfilter = TagGenreFilter(filters)
#FIXME: very simple error reporting, improve
self.ui.label_test_genres_filter_error.setText(

View File

@@ -8,69 +8,58 @@ from picard.track import TagGenreFilter
class TagGenreFilterTest(PicardTestCase):
def test_no_filter(self):
setting = {
'genres_filter': """
# comment
"""
}
tag_filter = TagGenreFilter(setting=setting)
filters = "# comment"
tag_filter = TagGenreFilter(filters)
self.assertFalse(tag_filter.skip('jazz'))
def test_strict_filter(self):
setting = {
'genres_filter': """
-jazz
"""
}
tag_filter = TagGenreFilter(setting=setting)
filters = "-jazz"
tag_filter = TagGenreFilter(filters)
self.assertTrue(tag_filter.skip('jazz'))
def test_strict_filter_whitelist(self):
setting = {
'genres_filter': """
filters = """
+jazz
-jazz
"""
}
tag_filter = TagGenreFilter(setting=setting)
"""
tag_filter = TagGenreFilter(filters)
self.assertFalse(tag_filter.skip('jazz'))
def test_strict_filter_whitelist_reverseorder(self):
setting = {
'genres_filter': """
filters = """
-jazz
+jazz
"""
}
tag_filter = TagGenreFilter(setting=setting)
"""
tag_filter = TagGenreFilter(filters)
self.assertFalse(tag_filter.skip('jazz'))
def test_wildcard_filter_all_but(self):
setting = {
'genres_filter': """
filters = """
-*
+blues
"""
}
tag_filter = TagGenreFilter(setting=setting)
"""
tag_filter = TagGenreFilter(filters)
self.assertTrue(tag_filter.skip('jazz'))
self.assertTrue(tag_filter.skip('rock'))
self.assertFalse(tag_filter.skip('blues'))
def test_wildcard_filter(self):
setting = {
'genres_filter': """
filters = """
-jazz*
-*rock
-*disco*
-a*b
"""
}
tag_filter = TagGenreFilter(setting=setting)
"""
tag_filter = TagGenreFilter(filters)
self.assertTrue(tag_filter.skip('jazz'))
self.assertTrue(tag_filter.skip('jazz blues'))
@@ -90,16 +79,15 @@ class TagGenreFilterTest(PicardTestCase):
self.assertFalse(tag_filter.skip('xab'))
def test_regex_filter(self):
setting = {
'genres_filter': """
filters = """
-/^j.zz/
-/r[io]ck$/
-/disco+/
+/discoooo/
+/*/
"""
}
tag_filter = TagGenreFilter(setting=setting)
"""
tag_filter = TagGenreFilter(filters)
self.assertTrue(tag_filter.skip('jazz'))
self.assertTrue(tag_filter.skip('jizz'))
@@ -117,14 +105,13 @@ class TagGenreFilterTest(PicardTestCase):
self.assertFalse(tag_filter.skip('xdiscoooox'))
def test_uppercased_filter(self):
setting = {
'genres_filter': """
filters = """
-JAZZ*
-ROCK
-/^DISCO$/
"""
}
tag_filter = TagGenreFilter(setting=setting)
"""
tag_filter = TagGenreFilter(filters)
self.assertTrue(tag_filter.skip('jazz blues'))
self.assertTrue(tag_filter.skip('JAZZ BLUES'))
@@ -134,14 +121,13 @@ class TagGenreFilterTest(PicardTestCase):
self.assertTrue(tag_filter.skip('DISCO'))
def test_whitespaces_filter(self):
setting = {
'genres_filter': """
filters = """
- jazz b*
- * ro ck
- /^di sco$/
"""
}
tag_filter = TagGenreFilter(setting=setting)
"""
tag_filter = TagGenreFilter(filters)
self.assertTrue(tag_filter.skip('jazz blues'))
self.assertTrue(tag_filter.skip('blues ro ck'))