Package lastfm :: Package mixins :: Module taggable
[hide private]
[frames] | no frames]

Source Code for Module lastfm.mixins.taggable

 1  #!/usr/bin/env python 
 2   
 3  __author__ = "Abhinav Sarkar <abhinav@abhinavsarkar.net>" 
 4  __version__ = "0.2" 
 5  __license__ = "GNU Lesser General Public License" 
 6   
 7  from lastfm.base import LastfmBase 
 8  from lastfm.safelist import SafeList 
9 10 -class Taggable(object):
11 - def init(self, api):
12 self._api = api
13 14 @LastfmBase.cached_property
15 - def tags(self):
16 from lastfm.tag import Tag 17 params = self._default_params({'method': '%s.getTags' % self.__class__.__name__.lower()}) 18 data = self._api._fetch_data(params, sign = True, session = True, no_cache = True).find('tags') 19 return SafeList([ 20 Tag( 21 self._api, 22 name = t.findtext('name'), 23 url = t.findtext('url') 24 ) 25 for t in data.findall('tag') 26 ], 27 self.add_tags, self.remove_tag)
28
29 - def add_tags(self, tags):
30 from lastfm.tag import Tag 31 while(len(tags) > 10): 32 section = tags[0:9] 33 tags = tags[9:] 34 self.add_tags(section) 35 36 if len(tags) == 0: return 37 38 tagnames = [] 39 for tag in tags: 40 if isinstance(tag, Tag): 41 tagnames.append(tag.name) 42 elif isinstance(tag, str): 43 tagnames.append(tag) 44 45 params = self._default_params({ 46 'method': '%s.addTags' % self.__class__.__name__.lower(), 47 'tags': ",".join(tagnames) 48 }) 49 self._api._post_data(params) 50 self._tags = None
51
52 - def remove_tag(self, tag):
53 from lastfm.tag import Tag 54 if isinstance(tag, Tag): 55 tag = tag.name 56 57 params = self._default_params({ 58 'method': '%s.removeTag' % self.__class__.__name__.lower(), 59 'tag': tag 60 }) 61 self._api._post_data(params) 62 self._tags = None
63
64 - def _default_params(self, extra_params = {}):
65 return extra_params
66