From ee46a5150f4d97f03eaef509d098f739f3ae88ce Mon Sep 17 00:00:00 2001 From: Jakub Turski Date: Fri, 2 Jun 2017 15:48:05 +0100 Subject: [PATCH] Don't crash if non-canonical genre and prefer_specific: yes. Also, add a test for this. --- beetsplug/lastgenre/__init__.py | 1 + test/test_lastgenre.py | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/beetsplug/lastgenre/__init__.py b/beetsplug/lastgenre/__init__.py index 2756f452c..4374310ba 100644 --- a/beetsplug/lastgenre/__init__.py +++ b/beetsplug/lastgenre/__init__.py @@ -174,6 +174,7 @@ class LastGenrePlugin(plugins.BeetsPlugin): genre tree. """ depth_tag_pairs = [(self._get_depth(t), t) for t in tags] + depth_tag_pairs = [e for e in depth_tag_pairs if e[0] is not None] depth_tag_pairs.sort(reverse=True) return [p[1] for p in depth_tag_pairs] diff --git a/test/test_lastgenre.py b/test/test_lastgenre.py index f57471f1c..db2ea903e 100644 --- a/test/test_lastgenre.py +++ b/test/test_lastgenre.py @@ -213,6 +213,17 @@ class LastGenrePluginTest(unittest.TestCase, TestHelper): self.assertEqual(res, (config['lastgenre']['fallback'].get(), u'fallback')) + def test_sort_by_depth(self): + self._setup_config(canonical=True,count=99) + # Normal case. + tags = ('electronic', 'ambient', 'post-rock', 'downtempo') + res = self.plugin._sort_by_depth(tags) + self.assertEqual(res, ['post-rock', 'downtempo', 'ambient', 'electronic']) + # Non-canonical tag ('chillout') present. + tags = ('electronic', 'ambient', 'chillout') + res = self.plugin._sort_by_depth(tags) + self.assertEqual(res, ['ambient', 'electronic']) + def suite(): return unittest.TestLoader().loadTestsFromName(__name__)