From e11687f80a377ce2de38fe38a22c45be28837a5d Mon Sep 17 00:00:00 2001 From: Adam Miller Date: Mon, 7 Dec 2020 22:04:05 -0500 Subject: [PATCH] keyfinder: Catch output from keyfinder-cli with no key --- beetsplug/keyfinder.py | 9 ++++++++- docs/changelog.rst | 2 ++ test/test_keyfinder.py | 10 ++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/beetsplug/keyfinder.py b/beetsplug/keyfinder.py index a75b8d972..7836b4c54 100644 --- a/beetsplug/keyfinder.py +++ b/beetsplug/keyfinder.py @@ -76,7 +76,14 @@ class KeyFinderPlugin(BeetsPlugin): item.path) continue - key_raw = output.rsplit(None, 1)[-1] + try: + key_raw = output.rsplit(None, 1)[-1] + except IndexError: + # Sometimes keyfinder-cli returns 0 but with no key, usually when + # the file is silent or corrupt, so we log and skip. + self._log.error(u'no key returned for path: {0}', item.path) + continue + try: key = util.text_string(key_raw) except UnicodeDecodeError: diff --git a/docs/changelog.rst b/docs/changelog.rst index 0de3b15a2..41221b1f8 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -282,6 +282,8 @@ Fixes: :bug:`3773` :bug:`3774` * Fix a bug causing PIL to generate poor quality JPEGs when resizing artwork. :bug:`3743` +* :doc:`plugins/keyfinder`: Catch output from ``keyfinder-cli`` that is missing key. + :bug:`2242` For plugin developers: diff --git a/test/test_keyfinder.py b/test/test_keyfinder.py index a9ac43a27..c8735e47f 100644 --- a/test/test_keyfinder.py +++ b/test/test_keyfinder.py @@ -76,6 +76,16 @@ class KeyFinderTest(unittest.TestCase, TestHelper): item.load() self.assertEqual(item['initial_key'], 'F') + def test_no_key(self, command_output): + item = Item(path='/file') + item.add(self.lib) + + command_output.return_value = util.CommandOutput(b"", b"") + self.run_command('keyfinder') + + item.load() + self.assertEqual(item['initial_key'], None) + def suite(): return unittest.TestLoader().loadTestsFromName(__name__)