From 93b9e14f8ce883501c5d83b7f81ca1700b1e81e2 Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Fri, 27 Sep 2019 12:27:28 +0200
Subject: [PATCH] Fixed broken cover import when cover file is empty

---
 api/funkwhale_api/music/models.py | 11 +++++++----
 api/tests/music/test_music.py     |  8 ++++++++
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/api/funkwhale_api/music/models.py b/api/funkwhale_api/music/models.py
index 02c4f4434b..831289cda5 100644
--- a/api/funkwhale_api/music/models.py
+++ b/api/funkwhale_api/music/models.py
@@ -330,6 +330,7 @@ class Album(APIModelMixin):
         if data:
             extensions = {"image/jpeg": "jpg", "image/png": "png", "image/gif": "gif"}
             extension = extensions.get(data["mimetype"], "jpg")
+            f = None
             if data.get("content"):
                 # we have to cover itself
                 f = ContentFile(data["content"])
@@ -349,15 +350,17 @@ class Album(APIModelMixin):
                     return
                 else:
                     f = ContentFile(response.content)
-            self.cover.save("{}.{}".format(self.uuid, extension), f, save=False)
-            self.save(update_fields=["cover"])
-            return self.cover.file
+            if f:
+                self.cover.save("{}.{}".format(self.uuid, extension), f, save=False)
+                self.save(update_fields=["cover"])
+                return self.cover.file
         if self.mbid:
             image_data = musicbrainz.api.images.get_front(str(self.mbid))
             f = ContentFile(image_data)
             self.cover.save("{0}.jpg".format(self.mbid), f, save=False)
             self.save(update_fields=["cover"])
-        return self.cover.file
+        if self.cover:
+            return self.cover.file
 
     def __str__(self):
         return self.title
diff --git a/api/tests/music/test_music.py b/api/tests/music/test_music.py
index f20a28f3ae..727214af56 100644
--- a/api/tests/music/test_music.py
+++ b/api/tests/music/test_music.py
@@ -133,3 +133,11 @@ def test_can_download_image_file_for_album(binary_cover, mocker, factories):
     album.save()
 
     assert album.cover.file.read() == binary_cover
+
+
+def test_album_get_image_doesnt_crash_with_empty_data(mocker, factories):
+    album = factories["music.Album"](mbid=None, cover=None)
+    assert (
+        album.get_image(data={"content": "", "url": "", "mimetype": "image/png"})
+        is None
+    )
-- 
GitLab