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")