Move share() up to _BaseObject, removing duplication in Artist, Event and Track

This commit is contained in:
hugovk 2014-03-06 16:21:19 +02:00
parent caea5e129a
commit 0747d5d20e
2 changed files with 47 additions and 85 deletions

115
pylast.py
View file

@ -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:

View file

@ -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__':