Move share() up to _BaseObject, removing duplication in Artist, Event and Track
This commit is contained in:
parent
caea5e129a
commit
0747d5d20e
115
pylast.py
115
pylast.py
|
@ -1459,6 +1459,36 @@ class _BaseObject(object):
|
|||
|
||||
return seq
|
||||
|
||||
def share(self, users, message=None):
|
||||
"""
|
||||
Shares this (sends out recommendations).
|
||||
Parameters:
|
||||
* users [User|str,]: A list that can contain usernames, emails, User objects, or all of them.
|
||||
* message str: A message to include in the recommendation message.
|
||||
Only for Artist/Event/Track.
|
||||
"""
|
||||
|
||||
# Last.fm currently accepts a max of 10 recipient at a time
|
||||
while(len(users) > 10):
|
||||
section = users[0:9]
|
||||
users = users[9:]
|
||||
self.share(section, message)
|
||||
|
||||
nusers = []
|
||||
for user in users:
|
||||
if isinstance(user, User):
|
||||
nusers.append(user.get_name())
|
||||
else:
|
||||
nusers.append(user)
|
||||
|
||||
params = self._get_params()
|
||||
recipients = ','.join(nusers)
|
||||
params['recipient'] = recipients
|
||||
if message:
|
||||
params['message'] = message
|
||||
|
||||
self._request(self.ws_prefix + '.share', False, params)
|
||||
|
||||
|
||||
class _Taggable(object):
|
||||
"""Common functions for classes with tags."""
|
||||
|
@ -1999,35 +2029,6 @@ class Artist(_BaseObject, _Taggable):
|
|||
return self._get_things(
|
||||
"getTopTracks", "track", Track, params, cacheable)
|
||||
|
||||
def share(self, users, message=None):
|
||||
"""Shares this artist (sends out recommendations).
|
||||
# Parameters:
|
||||
* users [User|str,]: A list that can contain usernames, emails,
|
||||
User objects, or all of them.
|
||||
* message str: A message to include in the recommendation message.
|
||||
"""
|
||||
|
||||
# Last.fm currently accepts a max of 10 recipient at a time
|
||||
while(len(users) > 10):
|
||||
section = users[0:9]
|
||||
users = users[9:]
|
||||
self.share(section, message)
|
||||
|
||||
nusers = []
|
||||
for user in users:
|
||||
if isinstance(user, User):
|
||||
nusers.append(user.get_name())
|
||||
else:
|
||||
nusers.append(user)
|
||||
|
||||
params = self._get_params()
|
||||
recipients = ','.join(nusers)
|
||||
params['recipient'] = recipients
|
||||
if message:
|
||||
params['message'] = message
|
||||
|
||||
self._request('artist.share', False, params)
|
||||
|
||||
def get_url(self, domain_name=DOMAIN_ENGLISH):
|
||||
"""Returns the url of the artist page on the network.
|
||||
# Parameters:
|
||||
|
@ -2269,34 +2270,6 @@ class Event(_BaseObject):
|
|||
return self.network._get_url(
|
||||
domain_name, "event") % {'id': self.get_id()}
|
||||
|
||||
def share(self, users, message=None):
|
||||
"""Shares this event (sends out recommendations).
|
||||
* users: A list that can contain usernames, emails, User objects,
|
||||
or all of them.
|
||||
* message: A message to include in the recommendation message.
|
||||
"""
|
||||
|
||||
# Last.fm currently accepts a max of 10 recipient at a time
|
||||
while(len(users) > 10):
|
||||
section = users[0:9]
|
||||
users = users[9:]
|
||||
self.share(section, message)
|
||||
|
||||
nusers = []
|
||||
for user in users:
|
||||
if isinstance(user, User):
|
||||
nusers.append(user.get_name())
|
||||
else:
|
||||
nusers.append(user)
|
||||
|
||||
params = self._get_params()
|
||||
recipients = ','.join(nusers)
|
||||
params['recipient'] = recipients
|
||||
if message:
|
||||
params['message'] = message
|
||||
|
||||
self._request('event.share', False, params)
|
||||
|
||||
def get_shouts(self, limit=50, cacheable=False):
|
||||
"""
|
||||
Returns a sequqence of Shout objects
|
||||
|
@ -3210,34 +3183,6 @@ class Track(_BaseObject, _Taggable):
|
|||
|
||||
return seq
|
||||
|
||||
def share(self, users, message=None):
|
||||
"""Shares this track (sends out recommendations).
|
||||
* users: A list that can contain usernames, emails, User objects,
|
||||
or all of them.
|
||||
* message: A message to include in the recommendation message.
|
||||
"""
|
||||
|
||||
# Last.fm currently accepts a max of 10 recipient at a time
|
||||
while(len(users) > 10):
|
||||
section = users[0:9]
|
||||
users = users[9:]
|
||||
self.share(section, message)
|
||||
|
||||
nusers = []
|
||||
for user in users:
|
||||
if isinstance(user, User):
|
||||
nusers.append(user.get_name())
|
||||
else:
|
||||
nusers.append(user)
|
||||
|
||||
params = self._get_params()
|
||||
recipients = ','.join(nusers)
|
||||
params['recipient'] = recipients
|
||||
if message:
|
||||
params['message'] = message
|
||||
|
||||
self._request('track.share', False, params)
|
||||
|
||||
def get_url(self, domain_name=DOMAIN_ENGLISH):
|
||||
"""Returns the url of the track page on the network.
|
||||
* domain_name: The network's language domain. Possible values:
|
||||
|
|
|
@ -1205,6 +1205,23 @@ class TestPyLast(unittest.TestCase):
|
|||
# Assert
|
||||
self.helper_at_least_one_thing_in_top_list(fans, pylast.User)
|
||||
|
||||
# Commented out to avoid spamming
|
||||
# def test_share_spam(self):
|
||||
# # Arrange
|
||||
# users_to_spam = [TODO_ENTER_SPAMEES_HERE]
|
||||
# spam_message = "Dig the krazee sound!"
|
||||
# artist = self.network.get_top_artists(limit=1)[0].item
|
||||
# track = artist.get_top_tracks(limit=1)[0].item
|
||||
# event = artist.get_upcoming_events()[0]
|
||||
|
||||
# # Act
|
||||
# artist.share(users_to_spam, spam_message)
|
||||
# track.share(users_to_spam, spam_message)
|
||||
# event.share(users_to_spam, spam_message)
|
||||
|
||||
# Assert
|
||||
# Check inbox for spam!
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
|
|
Loading…
Reference in a new issue