diff --git a/picard/track.py b/picard/track.py index 32142556f..85612a33c 100644 --- a/picard/track.py +++ b/picard/track.py @@ -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): diff --git a/picard/ui/options/genres.py b/picard/ui/options/genres.py index 547455dac..fa742e2ab 100644 --- a/picard/ui/options/genres.py +++ b/picard/ui/options/genres.py @@ -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( diff --git a/test/test_taggenrefilter.py b/test/test_taggenrefilter.py index cb146f161..cbd6a02e2 100644 --- a/test/test_taggenrefilter.py +++ b/test/test_taggenrefilter.py @@ -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'))