Deprecate is_streamable and is_fulltrack_available

This commit is contained in:
Hugo van Kemenade 2022-01-24 19:04:38 +02:00
parent e14f51a32a
commit 3b7cb9c8c7
3 changed files with 41 additions and 18 deletions

View file

@ -29,6 +29,7 @@ import shelve
import ssl import ssl
import tempfile import tempfile
import time import time
import warnings
import xml.dom import xml.dom
from http.client import HTTPSConnection from http.client import HTTPSConnection
from urllib.parse import quote_plus from urllib.parse import quote_plus
@ -1783,13 +1784,18 @@ class Artist(_Taggable):
return self.listener_count return self.listener_count
def is_streamable(self): def is_streamable(self):
"""Returns True if the artist is streamable.""" """Returns True if the artist is streamable: always False because Last.fm has
deprecated the Radio API."""
return bool( warnings.warn(
_number( "Always returns False. Last.fm has deprecated the Radio API and will "
_extract(self._request(self.ws_prefix + ".getInfo", True), "streamable") "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): def get_bio(self, section, language=None):
""" """
@ -2130,18 +2136,32 @@ class Track(_Opus):
return bool(loved) return bool(loved)
def is_streamable(self): def is_streamable(self):
"""Returns True if the track is available at Last.fm.""" """Returns True if the artist is streamable: always False because Last.fm has
deprecated the Radio API."""
doc = self._request(self.ws_prefix + ".getInfo", True) warnings.warn(
return _extract(doc, "streamable") == "1" "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): def is_fulltrack_available(self):
"""Returns True if the full track is available for streaming.""" """Returns True if the full track is available for streaming: always False
because Last.fm has deprecated the Radio API."""
doc = self._request(self.ws_prefix + ".getInfo", True) warnings.warn(
return ( "Always returns False. Last.fm has deprecated the Radio API and will "
doc.getElementsByTagName("streamable")[0].getAttribute("fulltrack") == "1" "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): def get_album(self):
"""Returns the album object of this track.""" """Returns the album object of this track."""

View file

@ -229,7 +229,8 @@ class TestPyLastArtist(TestPyLastWithLastFm):
mbid = artist1.get_mbid() mbid = artist1.get_mbid()
playcount = artist1.get_playcount() playcount = artist1.get_playcount()
streamable = artist1.is_streamable() with pytest.warns(DeprecationWarning):
streamable = artist1.is_streamable()
name = artist1.get_name(properly_capitalized=False) name = artist1.get_name(properly_capitalized=False)
name_cap = artist1.get_name(properly_capitalized=True) name_cap = artist1.get_name(properly_capitalized=True)

View file

@ -123,7 +123,8 @@ class TestPyLastTrack(TestPyLastWithLastFm):
track = pylast.Track("Nirvana", "Lithium", self.network) track = pylast.Track("Nirvana", "Lithium", self.network)
# Act # Act
streamable = track.is_streamable() with pytest.warns(DeprecationWarning):
streamable = track.is_streamable()
# Assert # Assert
assert not streamable assert not streamable
@ -133,7 +134,8 @@ class TestPyLastTrack(TestPyLastWithLastFm):
track = pylast.Track("Nirvana", "Lithium", self.network) track = pylast.Track("Nirvana", "Lithium", self.network)
# Act # Act
fulltrack_available = track.is_fulltrack_available() with pytest.warns(DeprecationWarning):
fulltrack_available = track.is_fulltrack_available()
# Assert # Assert
assert not fulltrack_available assert not fulltrack_available