1
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 from lastfm.decorators import cached_property, top_property
11
12 -class Group(LastfmBase, Cacheable):
13 """A class representing a group on last.fm."""
14 - def init(self,
15 api,
16 name = None,
17 **kwargs):
22
23 @property
26
27 @cached_property
35
43
44 @cached_property
47
48 @cached_property
56 return gen()
57
65
66 @cached_property
69
70 @cached_property
78 return gen()
79
87
88 @cached_property
91
92 @cached_property
100 return gen()
101
102 @cached_property
104 params = self._default_params({'method': 'group.getMembers'})
105
106 @lazylist
107 def gen(lst):
108 data = self._api._fetch_data(params).find('members')
109 total_pages = int(data.attrib['totalPages'])
110
111 @lazylist
112 def gen2(lst, data):
113 for u in data.findall('user'):
114 yield User(
115 self._api,
116 name = u.findtext('name'),
117 real_name = u.findtext('realname'),
118 image = dict([(i.get('size'), i.text) for i in u.findall('image')]),
119 url = u.findtext('url')
120 )
121
122 for u in gen2(data):
123 yield u
124
125 for page in xrange(1, total_pages+1):
126 params.update({'page': page})
127 data = self._api._fetch_data(params).find('members')
128 for u in gen2(data):
129 yield u
130 return gen()
131
133 if not self.name:
134 raise InvalidParametersError("group has to be provided.")
135 params = {'group': self.name}
136 params.update(extra_params)
137 return params
138
139 @staticmethod
141 try:
142 return hash(kwds['name'])
143 except KeyError:
144 raise InvalidParametersError("name has to be provided for hashing")
145
148
151
154
156 return "<lastfm.Group: %s>" % self.name
157
158 from lastfm.api import Api
159 from lastfm.error import InvalidParametersError
160 from lastfm.user import User
161 from lastfm.weeklychart import WeeklyChart, WeeklyAlbumChart, WeeklyArtistChart, WeeklyTrackChart
162