* Taggable.add_tags(), Taggable.set_tags() and Taggable.remove_tags()
now only accept a list of tags [API BREAKAGE]. (Closes Issue #52)
This commit is contained in:
parent
a3649bd1cb
commit
bebf474aa9
82
pylast.py
82
pylast.py
|
@ -160,7 +160,7 @@ class Network(object):
|
|||
sk_gen = SessionKeyGenerator(self)
|
||||
self.session_key = sk_gen.get_session_key(self.username, self.password_hash)
|
||||
|
||||
def __repr__(self):
|
||||
"""def __repr__(self):
|
||||
attributes = ("name", "homepage", "ws_server", "api_key", "api_secret", "session_key", "submission_server",
|
||||
"username", "password_hash", "domain_names", "urls")
|
||||
|
||||
|
@ -170,6 +170,7 @@ class Network(object):
|
|||
args.append("=".join((attr, repr(getattr(self, attr)))))
|
||||
|
||||
return text % ", ".join(args)
|
||||
"""
|
||||
|
||||
def __str__(self):
|
||||
return "The %s Network" %self.name
|
||||
|
@ -813,17 +814,17 @@ class _Taggable(object):
|
|||
def __init__(self, ws_prefix):
|
||||
self.ws_prefix = ws_prefix
|
||||
|
||||
def add_tags(self, *tags):
|
||||
def add_tags(self, tags):
|
||||
"""Adds one or several tags.
|
||||
* *tags: Any number of tag names or Tag objects.
|
||||
* tags: A sequence of tag names or Tag objects.
|
||||
"""
|
||||
|
||||
for tag in tags:
|
||||
self._add_tag(tag)
|
||||
|
||||
def _add_tag(self, tag):
|
||||
"""Adds one or several tags.
|
||||
* tag: one tag name or a Tag object.
|
||||
"""Adds one tag.
|
||||
* tag: a tag name or a Tag object.
|
||||
"""
|
||||
|
||||
if isinstance(tag, Tag):
|
||||
|
@ -834,10 +835,10 @@ class _Taggable(object):
|
|||
|
||||
self._request(self.ws_prefix + '.addTags', False, params)
|
||||
|
||||
def _remove_tag(self, single_tag):
|
||||
def _remove_tag(self, tag):
|
||||
"""Remove a user's tag from this object."""
|
||||
|
||||
if isinstance(single_tag, Tag):
|
||||
if isinstance(tag, Tag):
|
||||
single_tag = single_tag.get_name()
|
||||
|
||||
params = self._get_params()
|
||||
|
@ -859,9 +860,9 @@ class _Taggable(object):
|
|||
|
||||
return tags
|
||||
|
||||
def remove_tags(self, *tags):
|
||||
def remove_tags(self, tags):
|
||||
"""Removes one or several tags from this object.
|
||||
* *tags: Any number of tag names or Tag objects.
|
||||
* tags: a sequence of tag names or Tag objects.
|
||||
"""
|
||||
|
||||
for tag in tags:
|
||||
|
@ -872,9 +873,9 @@ class _Taggable(object):
|
|||
|
||||
self.remove_tags(*(self.get_tags()))
|
||||
|
||||
def set_tags(self, *tags):
|
||||
def set_tags(self, tags):
|
||||
"""Sets this object's tags to only those tags.
|
||||
* *tags: any number of tag names.
|
||||
* tags: a sequence of tag names or Tag objects.
|
||||
"""
|
||||
|
||||
c_old_tags = []
|
||||
|
@ -903,8 +904,8 @@ class _Taggable(object):
|
|||
if not c_new_tags[i] in c_old_tags:
|
||||
to_add.append(new_tags[i])
|
||||
|
||||
self.remove_tags(*to_remove)
|
||||
self.add_tags(*to_add)
|
||||
self.remove_tags(to_remove)
|
||||
self.add_tags(to_add)
|
||||
|
||||
def get_top_tags(self, limit = None):
|
||||
"""Returns a list of the most frequently used Tags on this object."""
|
||||
|
@ -979,6 +980,9 @@ class Album(_BaseObject, _Taggable):
|
|||
|
||||
self.title = title
|
||||
|
||||
def __repr__(self):
|
||||
return "pylast.Album(%s, %s, %s)" %(repr(self.artist.name), repr(self.title), repr(self.network))
|
||||
|
||||
@_string_output
|
||||
def __str__(self):
|
||||
return _unicode("%s - %s") %(self.get_artist().get_name(), self.get_title())
|
||||
|
@ -1139,6 +1143,9 @@ class Artist(_BaseObject, _Taggable):
|
|||
|
||||
self.name = name
|
||||
|
||||
def __repr__(self):
|
||||
return "pylast.Artist(%s, %s)" %(repr(self.get_name()), repr(self.network))
|
||||
|
||||
@_string_output
|
||||
def __str__(self):
|
||||
return self.get_name()
|
||||
|
@ -1355,7 +1362,9 @@ class Artist(_BaseObject, _Taggable):
|
|||
"""
|
||||
Returns a sequence of Image objects
|
||||
if limit is None it will return all
|
||||
order can be IMAGES_ORDER_POPULARITY or IMAGES_ORDER_DATE
|
||||
order can be IMAGES_ORDER_POPULARITY or IMAGES_ORDER_DATE.
|
||||
|
||||
If limit==None, it will try to pull all the available data.
|
||||
"""
|
||||
|
||||
images = []
|
||||
|
@ -1417,6 +1426,9 @@ class Event(_BaseObject):
|
|||
|
||||
self.id = _unicode(event_id)
|
||||
|
||||
def __repr__(self):
|
||||
return "pylast.Event(%s, %s)" %(repr(self.id), repr(self.network))
|
||||
|
||||
@_string_output
|
||||
def __str__(self):
|
||||
return "Event #" + self.get_id()
|
||||
|
@ -1620,6 +1632,9 @@ class Country(_BaseObject):
|
|||
|
||||
self.name = name
|
||||
|
||||
def __repr__(self):
|
||||
return "pylast.Country(%s, %s)" %(repr(self.name), repr(self.network))
|
||||
|
||||
@_string_output
|
||||
def __str__(self):
|
||||
return self.get_name()
|
||||
|
@ -1713,6 +1728,9 @@ class Library(_BaseObject):
|
|||
self._artists_index = 0
|
||||
self._tracks_index = 0
|
||||
|
||||
def __repr__(self):
|
||||
return "pylast.Library(%s, %s)" %(repr(self.user), repr(self.network))
|
||||
|
||||
@_string_output
|
||||
def __str__(self):
|
||||
return repr(self.get_user()) + "'s Library"
|
||||
|
@ -1949,8 +1967,8 @@ class Tag(_BaseObject):
|
|||
|
||||
self.name = name
|
||||
|
||||
def _get_params(self):
|
||||
return {'tag': self.get_name()}
|
||||
def __repr__(self):
|
||||
return "pylast.Tag(%s, %s)" %(repr(self.name), repr(self.network))
|
||||
|
||||
@_string_output
|
||||
def __str__(self):
|
||||
|
@ -1962,6 +1980,9 @@ class Tag(_BaseObject):
|
|||
def __ne__(self, other):
|
||||
return self.get_name().lower() != other.get_name().lower()
|
||||
|
||||
def _get_params(self):
|
||||
return {'tag': self.get_name()}
|
||||
|
||||
def get_name(self, properly_capitalized=False):
|
||||
"""Returns the name of the tag. """
|
||||
|
||||
|
@ -2095,6 +2116,9 @@ class Track(_BaseObject, _Taggable):
|
|||
|
||||
self.title = title
|
||||
|
||||
def __repr__(self):
|
||||
return "pylast.Track(%s, %s, %s)" %(repr(self.artist.name), repr(self.title), repr(self.network))
|
||||
|
||||
@_string_output
|
||||
def __str__(self):
|
||||
return self.get_artist().get_name() + ' - ' + self.get_title()
|
||||
|
@ -2352,6 +2376,9 @@ class Group(_BaseObject):
|
|||
|
||||
self.name = group_name
|
||||
|
||||
def __repr__(self):
|
||||
return "pylast.Group(%s, %s)" %(repr(self.name), repr(self.network))
|
||||
|
||||
@_string_output
|
||||
def __str__(self):
|
||||
return self.get_name()
|
||||
|
@ -2526,6 +2553,9 @@ class User(_BaseObject):
|
|||
self._recommended_events_index = 0
|
||||
self._recommended_artists_index = 0
|
||||
|
||||
def __repr__(self):
|
||||
return "pylast.User(%s, %s)" %(repr(self.name), repr(self.network))
|
||||
|
||||
@_string_output
|
||||
def __str__(self):
|
||||
return self.get_name()
|
||||
|
@ -3172,6 +3202,9 @@ class Venue(_BaseObject):
|
|||
|
||||
self.id = _number(id)
|
||||
|
||||
def __repr__(self):
|
||||
return "pylast.Venue(%s, %s)" %(repr(self.id), repr(self.network))
|
||||
|
||||
@_string_output
|
||||
def __str__(self):
|
||||
return "Venue #" + str(self.id)
|
||||
|
@ -3213,23 +3246,22 @@ def md5(text):
|
|||
"""Returns the md5 hash of a string."""
|
||||
|
||||
h = hashlib.md5()
|
||||
h.update(_string(text))
|
||||
h.update(_unicode(text).encode("utf-8"))
|
||||
|
||||
return h.hexdigest()
|
||||
|
||||
def _unicode(text):
|
||||
|
||||
if sys.version_info.major == 3:
|
||||
if type(text) in (bytes, bytearray):
|
||||
return str(text, "utf-8")
|
||||
else:
|
||||
return str(text)
|
||||
|
||||
elif sys.version_info.major ==2:
|
||||
if type(text) == unicode:
|
||||
return text
|
||||
|
||||
if type(text) == int:
|
||||
return unicode(text)
|
||||
|
||||
if type(text) in (str,):
|
||||
return unicode(text, "utf-8")
|
||||
else:
|
||||
return unicode(text)
|
||||
|
||||
def _string(text):
|
||||
"""For Python2 routines that can only process str type."""
|
||||
|
@ -3261,7 +3293,7 @@ def _collect_nodes(limit, sender, method_name, cacheable, params=None):
|
|||
page = 1
|
||||
end_of_pages = False
|
||||
|
||||
while len(nodes) < limit and not end_of_pages:
|
||||
while not end_of_pages and (not limit or (limit and len(nodes) < limit)):
|
||||
params["page"] = str(page)
|
||||
doc = sender._request(method_name, cacheable, params)
|
||||
|
||||
|
|
Loading…
Reference in a new issue