File 0004-Conver-the-CAA-response-data-to-unicode-before-loading-via-json.patch of Package python3-musicbrainzngs

From d90967eac38ffe66e455137077e09ee16aa04c79 Mon Sep 17 00:00:00 2001
From: Wieland Hoffmann <themineo@gmail.com>
Date: Thu, 15 Sep 2016 20:40:48 +0200
Subject: [PATCH] Convert the CAA response data to unicode before loading it
 via json

HTTPResponse.read() always returns bytes, but json.loads expects a
str (or unicode) object. On Python 2, this conversion happened
automatically, on Python 3, it didn't, so do it explicitly.

Fixes #208.

Signed-off-by: Wieland Hoffmann <themineo@gmail.com>
---
 musicbrainzngs/caa.py |  4 +++-
 test/_common.py       | 10 +++++++++-
 test/test_browse.py   |  2 +-
 test/test_caa.py      | 16 ++++++++--------
 4 files changed, 21 insertions(+), 11 deletions(-)

diff --git a/musicbrainzngs/caa.py b/musicbrainzngs/caa.py
index 12fa8d3..235c560 100644
--- a/musicbrainzngs/caa.py
+++ b/musicbrainzngs/caa.py
@@ -13,6 +13,7 @@
 
 from musicbrainzngs import compat
 from musicbrainzngs import musicbrainz
+from musicbrainzngs.util import _unicode
 
 hostname = "coverartarchive.org"
 
@@ -78,7 +79,8 @@ def _caa_request(mbid, imageid=None, size=None, entitytype="release"):
         return resp
     else:
         # Otherwise it's json
-        return json.loads(resp)
+        data = _unicode(resp)
+        return json.loads(data)
 
 
 def get_image_list(releaseid):
diff --git a/test/_common.py b/test/_common.py
index e8b7713..2d33839 100644
--- a/test/_common.py
+++ b/test/_common.py
@@ -2,12 +2,16 @@
 import time
 
 import musicbrainzngs
+from musicbrainzngs import compat
 from os.path import join
 
 try:
     from urllib2 import OpenerDirector
 except ImportError:
     from urllib.request import OpenerDirector
+
+from io import BytesIO
+
 try:
     import StringIO
 except ImportError:
@@ -26,10 +30,14 @@ def open(self, request, body=None):
         self.myurl = request.get_full_url()
         self.headers = request.header_items()
         self.request = request
+
         if self.exception:
             raise self.exception
-        else:
+
+        if isinstance(self.response, compat.unicode):
             return StringIO.StringIO(self.response)
+        else:
+            return BytesIO(self.response)
 
     def get_url(self):
         return self.myurl
diff --git a/test/test_browse.py b/test/test_browse.py
index 18ed2d6..a6bf3a1 100644
--- a/test/test_browse.py
+++ b/test/test_browse.py
@@ -10,7 +10,7 @@
 class BrowseTest(unittest.TestCase):
 
     def setUp(self):
-        self.opener = _common.FakeOpener("<response/>")
+        self.opener = _common.FakeOpener()
         musicbrainzngs.compat.build_opener = lambda *args: self.opener
 
         musicbrainzngs.set_useragent("a", "1")
diff --git a/test/test_caa.py b/test/test_caa.py
index 72f6c1d..99e2b04 100644
--- a/test/test_caa.py
+++ b/test/test_caa.py
@@ -13,7 +13,7 @@ class CaaTest(unittest.TestCase):
 
     def test_get_list(self):
         # check the url and response for a listing
-        resp = '{"images":[]}'
+        resp = b'{"images":[]}'
         self.opener = _common.FakeOpener(resp)
         musicbrainzngs.compat.build_opener = lambda *args: self.opener
         res = caa.get_image_list("8ec178f4-a8e8-4f22-bcba-1964466ef214")
@@ -23,7 +23,7 @@ def test_get_list(self):
 
     def test_get_release_group_list(self):
         # check the url and response for a listing
-        resp = '{"images":[], "release": "foo"}'
+        resp = b'{"images":[], "release": "foo"}'
         self.opener = _common.FakeOpener(resp)
         musicbrainzngs.compat.build_opener = lambda *args: self.opener
         res = caa.get_release_group_image_list("8ec178f4-a8e8-4f22-bcba-1964466ef214")
@@ -58,7 +58,7 @@ def test_set_useragent(self):
         """ When a useragent is set it is sent with the request """
         musicbrainzngs.set_useragent("caa-test", "0.1")
 
-        resp = '{"images":[]}'
+        resp = b'{"images":[]}'
         self.opener = _common.FakeOpener(resp)
         musicbrainzngs.compat.build_opener = lambda *args: self.opener
         res = caa.get_image_list("8ec178f4-a8e8-4f22-bcba-1964466ef214")
@@ -68,7 +68,7 @@ def test_set_useragent(self):
         self.assertEqual("caa-test/0.1 python-musicbrainzngs/%s" % _version, headers["User-agent"])
 
     def test_coverid(self):
-        resp = 'some_image'
+        resp = b'some_image'
         self.opener = _common.FakeOpener(resp)
         musicbrainzngs.compat.build_opener = lambda *args: self.opener
         res = caa.get_image("8ec178f4-a8e8-4f22-bcba-1964466ef214", "1234")
@@ -77,7 +77,7 @@ def test_coverid(self):
         self.assertEqual(resp, res)
 
     def test_get_size(self):
-        resp = 'some_image'
+        resp = b'some_image'
         self.opener = _common.FakeOpener(resp)
         musicbrainzngs.compat.build_opener = lambda *args: self.opener
         res = caa.get_image("8ec178f4-a8e8-4f22-bcba-1964466ef214", "1234", 250)
@@ -86,7 +86,7 @@ def test_get_size(self):
         self.assertEqual(resp, res)
 
     def test_front(self):
-        resp = 'front_image'
+        resp = b'front_image'
         self.opener = _common.FakeOpener(resp)
         musicbrainzngs.compat.build_opener = lambda *args: self.opener
         res = caa.get_image_front("8ec178f4-a8e8-4f22-bcba-1964466ef214")
@@ -95,7 +95,7 @@ def test_front(self):
         self.assertEqual(resp, res)
 
     def test_release_group_front(self):
-        resp = 'front_image'
+        resp = b'front_image'
         self.opener = _common.FakeOpener(resp)
         musicbrainzngs.compat.build_opener = lambda *args: self.opener
         res = caa.get_release_group_image_front("8ec178f4-a8e8-4f22-bcba-1964466ef214")
@@ -104,7 +104,7 @@ def test_release_group_front(self):
         self.assertEqual(resp, res)
 
     def test_back(self):
-        resp = 'back_image'
+        resp = b'back_image'
         self.opener = _common.FakeOpener(resp)
         musicbrainzngs.compat.build_opener = lambda *args: self.opener
         res = caa.get_image_back("8ec178f4-a8e8-4f22-bcba-1964466ef214")
openSUSE Build Service is sponsored by