Package lastfm :: Module group
[hide private]
[frames] | no frames]

Source Code for Module lastfm.group

  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.mixins import Cacheable 
  9  from lastfm.lazylist import lazylist 
10 11 -class Group(LastfmBase, Cacheable):
12 """A class representing a group on last.fm."""
13 - def init(self, 14 api, 15 name = None):
16 if not isinstance(api, Api): 17 raise InvalidParametersError("api reference must be supplied as an argument") 18 self._api = api 19 self._name = name
20 21 @property
22 - def name(self):
23 return self._name
24 25 @LastfmBase.cached_property
26 - def weekly_chart_list(self):
27 params = self._default_params({'method': 'group.getWeeklyChartList'}) 28 data = self._api._fetch_data(params).find('weeklychartlist') 29 return [ 30 WeeklyChart.create_from_data(self._api, self, c) 31 for c in data.findall('chart') 32 ]
33
34 - def get_weekly_album_chart(self, 35 start = None, 36 end = None):
37 params = self._default_params({'method': 'group.getWeeklyAlbumChart'}) 38 params = WeeklyChart._check_weekly_chart_params(params, start, end) 39 data = self._api._fetch_data(params).find('weeklyalbumchart') 40 return WeeklyAlbumChart.create_from_data(self._api, self, data)
41 42 @LastfmBase.cached_property
44 return self.get_weekly_album_chart()
45 46 @LastfmBase.cached_property
47 - def weekly_album_chart_list(self):
48 wcl = list(self.weekly_chart_list) 49 wcl.reverse() 50 @lazylist 51 def gen(lst): 52 for wc in wcl: 53 yield self.get_weekly_album_chart(wc.start, wc.end)
54 return gen()
55
56 - def get_weekly_artist_chart(self, 57 start = None, 58 end = None):
59 params = self._default_params({'method': 'group.getWeeklyArtistChart'}) 60 params = WeeklyChart._check_weekly_chart_params(params, start, end) 61 data = self._api._fetch_data(params).find('weeklyartistchart') 62 return WeeklyArtistChart.create_from_data(self._api, self, data)
63 64 @LastfmBase.cached_property
65 - def recent_weekly_artist_chart(self):
66 return self.get_weekly_artist_chart()
67 68 @LastfmBase.cached_property
69 - def weekly_artist_chart_list(self):
70 wcl = list(self.weekly_chart_list) 71 wcl.reverse() 72 @lazylist 73 def gen(lst): 74 for wc in wcl: 75 yield self.get_weekly_artist_chart(wc.start, wc.end)
76 return gen() 77
78 - def get_weekly_track_chart(self, 79 start = None, 80 end = None):
81 params = self._default_params({'method': 'group.getWeeklyTrackChart'}) 82 params = WeeklyChart._check_weekly_chart_params(params, start, end) 83 data = self._api._fetch_data(params).find('weeklytrackchart') 84 return WeeklyTrackChart.create_from_data(self._api, self, data)
85 86 @LastfmBase.cached_property
87 - def recent_weekly_track_chart(self):
88 return self.get_weekly_track_chart()
89 90 @LastfmBase.cached_property
91 - def weekly_track_chart_list(self):
92 wcl = list(self.weekly_chart_list) 93 wcl.reverse() 94 @lazylist 95 def gen(lst): 96 for wc in wcl: 97 yield self.get_weekly_track_chart(wc.start, wc.end)
98 return gen() 99 100 @LastfmBase.cached_property
101 - def members(self):
102 params = self._default_params({'method': 'group.getMembers'}) 103 104 @lazylist 105 def gen(lst): 106 data = self._api._fetch_data(params).find('members') 107 total_pages = int(data.attrib['totalPages']) 108 109 @lazylist 110 def gen2(lst, data): 111 for u in data.findall('user'): 112 yield User( 113 self._api, 114 name = u.findtext('name'), 115 real_name = u.findtext('realname'), 116 image = dict([(i.get('size'), i.text) for i in u.findall('image')]), 117 url = u.findtext('url') 118 )
119 120 for u in gen2(data): 121 yield u 122 123 for page in xrange(1, total_pages+1): 124 params.update({'page': page}) 125 data = self._api._fetch_data(params).find('members') 126 for u in gen2(data): 127 yield u 128 return gen() 129
130 - def _default_params(self, extra_params = {}):
131 if not self.name: 132 raise InvalidParametersError("group has to be provided.") 133 params = {'group': self.name} 134 params.update(extra_params) 135 return params
136 137 @staticmethod
138 - def _hash_func(*args, **kwds):
139 try: 140 return hash(kwds['name']) 141 except KeyError: 142 raise InvalidParametersError("name has to be provided for hashing")
143
144 - def __hash__(self):
145 return self.__class__._hash_func(name = self.name)
146
147 - def __eq__(self, other):
148 return self.name == other.name
149
150 - def __lt__(self, other):
151 return self.name < other.name
152
153 - def __repr__(self):
154 return "<lastfm.Group: %s>" % self.name
155 156 from lastfm.api import Api 157 from lastfm.error import InvalidParametersError 158 from lastfm.user import User 159 from lastfm.weeklychart import WeeklyChart, WeeklyAlbumChart, WeeklyArtistChart, WeeklyTrackChart 160