From df47f19e86d2f6434fe20d37e2a98f96f2382ba7 Mon Sep 17 00:00:00 2001 From: Fabrice Laporte Date: Sat, 28 Jun 2014 10:31:12 +0200 Subject: [PATCH] lastgenre: remove duplicate genres --- beetsplug/lastgenre/__init__.py | 9 +++++++++ test/test_lastgenre.py | 7 +++++++ 2 files changed, 16 insertions(+) diff --git a/beetsplug/lastgenre/__init__.py b/beetsplug/lastgenre/__init__.py index 364766f16..3981a4a3c 100644 --- a/beetsplug/lastgenre/__init__.py +++ b/beetsplug/lastgenre/__init__.py @@ -197,6 +197,15 @@ class LastGenrePlugin(plugins.BeetsPlugin): if len(tags_all) >= count: break tags = tags_all + + def remove_duplicates(seq): + """Remove duplicates from sequence wile preserving order""" + seen = set() + seen_add = seen.add + return [ x for x in seq if x not in seen and not seen_add(x)] + + tags = remove_duplicates(tags) + # c14n only adds allowed genres but we may have had forbidden genres in # the original tags list tags = [x.title() for x in tags if self._is_allowed(x)] diff --git a/test/test_lastgenre.py b/test/test_lastgenre.py index 8fa5dc217..74ef402c7 100644 --- a/test/test_lastgenre.py +++ b/test/test_lastgenre.py @@ -129,6 +129,13 @@ class LastGenrePluginTest(unittest.TestCase, TestHelper): self.assertEqual(self.plugin._resolve_genres(['iota blues']), '') + def test_no_duplicate(self): + """Remove duplicated genres. + """ + self._setup_config(count=99) + self.assertEqual(self.plugin._resolve_genres(['blues', 'blues']), + 'Blues') + def suite(): return unittest.TestLoader().loadTestsFromName(__name__)