Remove dead Last.fm playlist methods

This commit is contained in:
Hugo 2017-09-25 18:11:48 +03:00
parent f419c39ef0
commit 56e193d149
2 changed files with 0 additions and 299 deletions

View file

@ -296,24 +296,6 @@ class _Network(object):
self.last_call_time = now
def create_new_playlist(self, title, description):
"""
Creates a playlist for the authenticated user and returns it
title: The title of the new playlist.
description: The description of the new playlist.
"""
params = {}
params['title'] = title
params['description'] = description
doc = _Request(self, 'playlist.create', params).execute(False)
e_id = doc.getElementsByTagName("id")[0].firstChild.data
user = doc.getElementsByTagName('playlists')[0].getAttribute('user')
return Playlist(user, e_id, self)
def get_top_artists(self, limit=None, cacheable=True):
"""Returns the most played artists as a sequence of TopItem objects."""
@ -815,7 +797,6 @@ class LastFMNetwork(_Network):
"artist": "music/%(artist)s",
"event": "event/%(id)s",
"country": "place/%(country_name)s",
"playlist": "user/%(user)s/library/playlists/%(appendix)s",
"tag": "tag/%(name)s",
"track": "music/%(artist)s/_/%(title)s",
"group": "group/%(name)s",
@ -880,7 +861,6 @@ class LibreFMNetwork(_Network):
"artist": "artist/%(artist)s",
"event": "event/%(id)s",
"country": "place/%(country_name)s",
"playlist": "user/%(user)s/library/playlists/%(appendix)s",
"tag": "tag/%(name)s",
"track": "music/%(artist)s/_/%(title)s",
"group": "group/%(name)s",
@ -2458,148 +2438,6 @@ class Library(_BaseObject):
return seq
class Playlist(_BaseObject):
"""A Last.fm user playlist."""
id = None
user = None
__hash__ = _BaseObject.__hash__
def __init__(self, user, playlist_id, network):
_BaseObject.__init__(self, network, "playlist")
if isinstance(user, User):
self.user = user
else:
self.user = User(user, self.network)
self.id = playlist_id
@_string_output
def __str__(self):
return repr(self.user) + "'s playlist # " + repr(self.id)
def _get_info_node(self):
"""
Returns the node from user.getPlaylists where this playlist's info is.
"""
doc = self._request("user.getPlaylists", True)
for node in doc.getElementsByTagName("playlist"):
if _extract(node, "id") == str(self.get_id()):
return node
def _get_params(self):
return {'user': self.user.get_name(), 'playlistID': self.get_id()}
def get_id(self):
"""Returns the playlist ID."""
return self.id
def get_user(self):
"""Returns the owner user of this playlist."""
return self.user
def get_tracks(self):
"""Returns a list of the tracks on this user playlist."""
uri = _unicode('lastfm://playlist/%s') % self.get_id()
return XSPF(uri, self.network).get_tracks()
def add_track(self, track):
"""Adds a Track to this Playlist."""
params = self._get_params()
params['artist'] = track.get_artist().get_name()
params['track'] = track.get_title()
self._request('playlist.addTrack', False, params)
def get_title(self):
"""Returns the title of this playlist."""
return _extract(self._get_info_node(), "title")
def get_creation_date(self):
"""Returns the creation date of this playlist."""
return _extract(self._get_info_node(), "date")
def get_size(self):
"""Returns the number of tracks in this playlist."""
return _number(_extract(self._get_info_node(), "size"))
def get_description(self):
"""Returns the description of this playlist."""
return _extract(self._get_info_node(), "description")
def get_duration(self):
"""Returns the duration of this playlist in milliseconds."""
return _number(_extract(self._get_info_node(), "duration"))
def is_streamable(self):
"""
Returns True if the playlist is streamable.
For a playlist to be streamable, it needs at least 45 tracks by 15
different artists."""
if _extract(self._get_info_node(), "streamable") == '1':
return True
else:
return False
def has_track(self, track):
"""Checks to see if track is already in the playlist.
* track: Any Track object.
"""
return track in self.get_tracks()
def get_cover_image(self, size=COVER_EXTRA_LARGE):
"""
Returns a uri to the cover image
size can be one of:
COVER_MEGA
COVER_EXTRA_LARGE
COVER_LARGE
COVER_MEDIUM
COVER_SMALL
"""
return _extract(self._get_info_node(), "image")[size]
def get_url(self, domain_name=DOMAIN_ENGLISH):
"""Returns the url of the playlist on the network.
* domain_name: The network's language domain. Possible values:
o DOMAIN_ENGLISH
o DOMAIN_GERMAN
o DOMAIN_SPANISH
o DOMAIN_FRENCH
o DOMAIN_ITALIAN
o DOMAIN_POLISH
o DOMAIN_PORTUGUESE
o DOMAIN_SWEDISH
o DOMAIN_TURKISH
o DOMAIN_RUSSIAN
o DOMAIN_JAPANESE
o DOMAIN_CHINESE
"""
english_url = _extract(self._get_info_node(), "url")
appendix = english_url[english_url.rfind("/") + 1:]
return self.network._get_url(domain_name, "playlist") % {
'appendix': appendix, "user": self.get_user().get_name()}
class Tag(_BaseObject, _Chartable):
"""A Last.fm object tag."""
@ -2895,51 +2733,6 @@ class Group(_BaseObject, _Chartable):
return users
class XSPF(_BaseObject):
"A Last.fm XSPF playlist."""
uri = None
__hash__ = _BaseObject.__hash__
def __init__(self, uri, network):
_BaseObject.__init__(self, network, None)
self.uri = uri
def _get_params(self):
return {'playlistURL': self.get_uri()}
@_string_output
def __str__(self):
return self.get_uri()
def __eq__(self, other):
return self.get_uri() == other.get_uri()
def __ne__(self, other):
return self.get_uri() != other.get_uri()
def get_uri(self):
"""Returns the Last.fm playlist URI. """
return self.uri
def get_tracks(self):
"""Returns the tracks on this playlist."""
doc = self._request('playlist.fetch', True)
seq = []
for node in doc.getElementsByTagName('track'):
title = _extract(node, 'title')
artist = _extract(node, 'creator')
seq.append(Track(artist, title, self.network))
return seq
class User(_BaseObject, _Chartable):
"""A Last.fm user."""
@ -3101,18 +2894,6 @@ class User(_BaseObject, _Chartable):
return seq
def get_playlists(self):
"""Returns a list of Playlists that this user owns."""
doc = self._request(self.ws_prefix + ".getPlaylists", True)
playlists = []
for playlist_id in _extract_all(doc, "id"):
playlists.append(
Playlist(self.get_name(), playlist_id, self.network))
return playlists
def get_now_playing(self):
"""
Returns the currently playing track, or None if nothing is playing.

View file

@ -5,7 +5,6 @@ Integration (not unit) tests for pylast.py
from flaky import flaky
import os
import pytest
from random import choice
import time
import unittest
@ -302,14 +301,6 @@ class TestPyLast(unittest.TestCase):
# Act/Assert
self.helper_is_thing_hashable(library)
def test_playlist_is_hashable(self):
# Arrange
playlist = pylast.Playlist(
user="RJ", playlist_id="1k1qp_doglist", network=self.network)
# Act/Assert
self.helper_is_thing_hashable(playlist)
def test_tag_is_hashable(self):
# Arrange
tag = self.network.get_top_tags(limit=1)[0]
@ -341,14 +332,6 @@ class TestPyLast(unittest.TestCase):
# Act/Assert
self.helper_is_thing_hashable(venue)
def test_xspf_is_hashable(self):
# Arrange
xspf = pylast.XSPF(
uri="lastfm://playlist/1k1qp_doglist", network=self.network)
# Act/Assert
self.helper_is_thing_hashable(xspf)
def test_invalid_xml(self):
# Arrange
# Currently causes PCDATA invalid Char value 25
@ -1356,69 +1339,6 @@ class TestPyLast(unittest.TestCase):
self.network.disable_caching()
self.assertFalse(self.network.is_caching_enabled())
def test_create_playlist(self):
# Arrange
title = "Test playlist"
description = "Testing"
lastfm_user = self.network.get_user(self.username)
# Act
playlist = self.network.create_new_playlist(title, description)
# Assert
self.assertIsInstance(playlist, pylast.Playlist)
self.assertEqual(playlist.get_title(), "Test playlist")
self.assertEqual(playlist.get_description(), "Testing")
self.assertEqual(playlist.get_user(), lastfm_user)
def test_empty_playlist_unstreamable(self):
# Arrange
title = "Empty playlist"
description = "Unstreamable"
# Act
playlist = self.network.create_new_playlist(title, description)
# Assert
self.assertEqual(playlist.get_size(), 0)
self.assertEqual(playlist.get_duration(), 0)
self.assertFalse(playlist.is_streamable())
def test_big_playlist_is_streamable(self):
# Arrange
# Find a big playlist on Last.fm, eg "top 100 classick rock songs"
user = "kaxior"
id = 10417943
playlist = pylast.Playlist(user, id, self.network)
self.assertEqual(
playlist.get_url(),
"https://www.last.fm/user/kaxior/library/"
"playlists/67ajb_top_100_classick_rock_songs")
# Act
# Nothing
# Assert
self.assertIsInstance(playlist, pylast.Playlist)
self.assertGreaterEqual(playlist.get_size(), 45)
self.assertGreater(playlist.get_duration(), 0)
self.assertTrue(playlist.is_streamable())
def test_add_track_to_playlist(self):
# Arrange
title = "One track playlist"
description = "Testing"
playlist = self.network.create_new_playlist(title, description)
track = pylast.Track("Test Artist", "test title", self.network)
# Act
playlist.add_track(track)
# Assert
self.assertEqual(playlist.get_size(), 1)
self.assertEqual(len(playlist.get_tracks()), 1)
self.assertTrue(playlist.has_track(track))
def test_album_mbid(self):
# Arrange
mbid = "a6a265bf-9f81-4055-8224-f7ac0aa6b937"