From 3b7cb9c8c7d7f79f9a4b426416169f4a81b213c1 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade Date: Mon, 24 Jan 2022 19:04:38 +0200 Subject: [PATCH] Deprecate is_streamable and is_fulltrack_available --- src/pylast/__init__.py | 50 +++++++++++++++++++++++++++++------------- tests/test_artist.py | 3 ++- tests/test_track.py | 6 +++-- 3 files changed, 41 insertions(+), 18 deletions(-) diff --git a/src/pylast/__init__.py b/src/pylast/__init__.py index e32e849..d22bc3a 100644 --- a/src/pylast/__init__.py +++ b/src/pylast/__init__.py @@ -29,6 +29,7 @@ import shelve import ssl import tempfile import time +import warnings import xml.dom from http.client import HTTPSConnection from urllib.parse import quote_plus @@ -1783,13 +1784,18 @@ class Artist(_Taggable): return self.listener_count def is_streamable(self): - """Returns True if the artist is streamable.""" - - return bool( - _number( - _extract(self._request(self.ws_prefix + ".getInfo", True), "streamable") - ) + """Returns True if the artist is streamable: always False because Last.fm has + deprecated the Radio API.""" + warnings.warn( + "Always returns False. Last.fm has deprecated the Radio API and will " + "it at some point. is_streamable() will be removed in pylast 5.0.0. " + "See https://www.last.fm/api/radio and " + "https://support.last.fm/t/" + "is-the-streamable-attribute-broken-it-always-returns-0/39723/3", + DeprecationWarning, + stacklevel=2, ) + return False def get_bio(self, section, language=None): """ @@ -2130,18 +2136,32 @@ class Track(_Opus): return bool(loved) def is_streamable(self): - """Returns True if the track is available at Last.fm.""" - - doc = self._request(self.ws_prefix + ".getInfo", True) - return _extract(doc, "streamable") == "1" + """Returns True if the artist is streamable: always False because Last.fm has + deprecated the Radio API.""" + warnings.warn( + "Always returns False. Last.fm has deprecated the Radio API and will " + "it at some point. is_streamable() will be removed in pylast 5.0.0. " + "See https://www.last.fm/api/radio and " + "https://support.last.fm/t/" + "is-the-streamable-attribute-broken-it-always-returns-0/39723/3", + DeprecationWarning, + stacklevel=2, + ) + return False def is_fulltrack_available(self): - """Returns True if the full track is available for streaming.""" - - doc = self._request(self.ws_prefix + ".getInfo", True) - return ( - doc.getElementsByTagName("streamable")[0].getAttribute("fulltrack") == "1" + """Returns True if the full track is available for streaming: always False + because Last.fm has deprecated the Radio API.""" + warnings.warn( + "Always returns False. Last.fm has deprecated the Radio API and will " + "remove it at some point. is_fulltrack_available() will be removed in " + "pylast 5.0.0. See https://www.last.fm/api/radio and " + "https://support.last.fm/t/" + "is-the-streamable-attribute-broken-it-always-returns-0/39723/3", + DeprecationWarning, + stacklevel=2, ) + return False def get_album(self): """Returns the album object of this track.""" diff --git a/tests/test_artist.py b/tests/test_artist.py index a911882..463af69 100755 --- a/tests/test_artist.py +++ b/tests/test_artist.py @@ -229,7 +229,8 @@ class TestPyLastArtist(TestPyLastWithLastFm): mbid = artist1.get_mbid() playcount = artist1.get_playcount() - streamable = artist1.is_streamable() + with pytest.warns(DeprecationWarning): + streamable = artist1.is_streamable() name = artist1.get_name(properly_capitalized=False) name_cap = artist1.get_name(properly_capitalized=True) diff --git a/tests/test_track.py b/tests/test_track.py index b56c018..e7ea5e3 100755 --- a/tests/test_track.py +++ b/tests/test_track.py @@ -123,7 +123,8 @@ class TestPyLastTrack(TestPyLastWithLastFm): track = pylast.Track("Nirvana", "Lithium", self.network) # Act - streamable = track.is_streamable() + with pytest.warns(DeprecationWarning): + streamable = track.is_streamable() # Assert assert not streamable @@ -133,7 +134,8 @@ class TestPyLastTrack(TestPyLastWithLastFm): track = pylast.Track("Nirvana", "Lithium", self.network) # Act - fulltrack_available = track.is_fulltrack_available() + with pytest.warns(DeprecationWarning): + fulltrack_available = track.is_fulltrack_available() # Assert assert not fulltrack_available