From 1c1c73b06241ff8c8ca300e991addfa279f150a8 Mon Sep 17 00:00:00 2001 From: Adrian Sampson Date: Mon, 6 Jun 2016 11:01:10 -0700 Subject: [PATCH] Check for `convert` failures --- beets/art.py | 10 ++++++++-- test/test_embedart.py | 12 ++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/beets/art.py b/beets/art.py index 06b4f8455..2d6c25cb7 100644 --- a/beets/art.py +++ b/beets/art.py @@ -149,9 +149,15 @@ def check_art_similarity(log, item, imagepath, compare_threshold): convert_proc.stdout.close() stdout, stderr = compare_proc.communicate() + if convert_proc.returncode: + log.debug( + u'ImageMagick convert failed with status {}', + convert_proc.returncode, + ) + return if compare_proc.returncode: if compare_proc.returncode != 1: - log.debug(u'IM phashes compare failed for {0}, {1}', + log.debug(u'ImageMagick compare failed: {0}, {1}', displayable_path(imagepath), displayable_path(art)) return @@ -165,7 +171,7 @@ def check_art_similarity(log, item, imagepath, compare_threshold): log.debug(u'IM output is not a number: {0!r}', out_str) return - log.debug(u'compare PHASH score is {0}', phash_diff) + log.debug(u'ImageMagick copmare score: {0}', phash_diff) return phash_diff <= compare_threshold return True diff --git a/test/test_embedart.py b/test/test_embedart.py index 8c6871574..123bc4ff4 100644 --- a/test/test_embedart.py +++ b/test/test_embedart.py @@ -181,14 +181,14 @@ class ArtSimilarityTest(unittest.TestCase): popen.communicate.return_value = stdout, stderr return popen - def _mock_popens(self, mock_extract, mock_subprocess, convert_status=0, - convert_stdout="", convert_stderr=""): + def _mock_popens(self, mock_extract, mock_subprocess, compare_status=0, + compare_stdout="", compare_stderr="", convert_status=0): mock_extract.return_value = b'extracted_path' mock_subprocess.Popen.side_effect = [ # The `convert` call. - self._popen(), + self._popen(convert_status), # The `compare` call. - self._popen(convert_status, convert_stdout, convert_stderr), + self._popen(compare_status, compare_stdout, compare_stderr), ] def test_compare_success_similar(self, mock_extract, mock_subprocess): @@ -220,6 +220,10 @@ class ArtSimilarityTest(unittest.TestCase): self._mock_popens(mock_extract, mock_subprocess, 1, "foo", "bar") self.assertIsNone(self._similarity(20)) + def test_convert_failure(self, mock_extract, mock_subprocess): + self._mock_popens(mock_extract, mock_subprocess, convert_status=1) + self.assertIsNone(self._similarity(20)) + def suite(): return unittest.TestLoader().loadTestsFromName(__name__)