Merge pull request #262 from zinootje/master

Save image URLs to Album on Album.get_cover_image and AlbumSearch.get_next_page
This commit is contained in:
Hugo 2018-04-15 17:21:36 +03:00 committed by GitHub
commit cef02d0700
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 8 deletions

View file

@ -732,6 +732,7 @@ class _Request(object):
"""Representing an abstract web service operation.""" """Representing an abstract web service operation."""
def __init__(self, network, method_name, params=None): def __init__(self, network, method_name, params=None):
print(method_name)
if params is None: if params is None:
params = {} params = {}
@ -1369,7 +1370,8 @@ class _Opus(_BaseObject, _Taggable):
__hash__ = _BaseObject.__hash__ __hash__ = _BaseObject.__hash__
def __init__(self, artist, title, network, ws_prefix, username=None): def __init__(self, artist, title, network, ws_prefix, username=None,
images=None):
""" """
Create an opus instance. Create an opus instance.
# Parameters: # Parameters:
@ -1388,6 +1390,7 @@ class _Opus(_BaseObject, _Taggable):
self.title = title self.title = title
self.username = username self.username = username
self.images = images
def __repr__(self): def __repr__(self):
return "pylast.%s(%s, %s, %s)" % ( return "pylast.%s(%s, %s, %s)" % (
@ -1485,8 +1488,9 @@ class Album(_Opus):
__hash__ = _Opus.__hash__ __hash__ = _Opus.__hash__
def __init__(self, artist, title, network, username=None): def __init__(self, artist, title, network, username=None, images=None):
super(Album, self).__init__(artist, title, network, "album", username) super(Album, self).__init__(artist, title, network, "album", username,
images)
def get_cover_image(self, size=SIZE_EXTRA_LARGE): def get_cover_image(self, size=SIZE_EXTRA_LARGE):
""" """
@ -1497,10 +1501,11 @@ class Album(_Opus):
SIZE_MEDIUM SIZE_MEDIUM
SIZE_SMALL SIZE_SMALL
""" """
if not self.images:
return _extract_all( self.images = _extract_all(
self._request( self._request(self.ws_prefix + ".getInfo", cacheable=True),
self.ws_prefix + ".getInfo", cacheable=True), 'image')[size] 'image')
return self.images[size]
def get_tracks(self): def get_tracks(self):
"""Returns the list of Tracks on this album.""" """Returns the list of Tracks on this album."""
@ -2544,7 +2549,8 @@ class AlbumSearch(_Search):
seq.append(Album( seq.append(Album(
_extract(node, "artist"), _extract(node, "artist"),
_extract(node, "name"), _extract(node, "name"),
self.network)) self.network,
images=_extract_all(node, 'image')))
return seq return seq

View file

@ -315,6 +315,26 @@ class TestPyLastNetwork(PyLastTestCase):
self.assertIsInstance(results, list) self.assertIsInstance(results, list)
self.assertIsInstance(results[0], pylast.Album) self.assertIsInstance(results[0], pylast.Album)
def test_album_search_images(self):
# Arrange
album = "Nevermind"
search = self.network.search_for_album(album)
# Act
results = search.get_next_page()
images = results[0].images
# Assert
self.assertEqual(len(images), 4)
self.assertTrue(images[pylast.SIZE_SMALL].startswith("https://"))
self.assertTrue(images[pylast.SIZE_SMALL].endswith(".png"))
self.assertIn("/34s/", images[pylast.SIZE_SMALL])
self.assertTrue(images[pylast.SIZE_EXTRA_LARGE].startswith("https://"))
self.assertTrue(images[pylast.SIZE_EXTRA_LARGE].endswith(".png"))
self.assertIn("/300x300/", images[pylast.SIZE_EXTRA_LARGE])
def test_artist_search(self): def test_artist_search(self):
# Arrange # Arrange
artist = "Nirvana" artist = "Nirvana"