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, Searchable, Taggable
9
10 -class Album(LastfmBase, Cacheable, Searchable, Taggable):
11 """A class representing an album."""
12 - def init(self,
13 api,
14 name = None,
15 artist = None,
16 id = None,
17 mbid = None,
18 url = None,
19 release_date = None,
20 image = None,
21 stats = None,
22 top_tags = None,
23 streamable = None):
44
45 @property
47 """name of the album"""
48 return self._name
49
50 @property
52 """artist of the album"""
53 return self._artist
54
55 @property
57 """id of the album"""
58 if self._id is None:
59 self._fill_info()
60 return self._id
61
62 @property
64 """mbid of the album"""
65 if self._mbid is None:
66 self._fill_info()
67 return self._mbid
68
69 @property
71 """url of the album's page"""
72 if self._url is None:
73 self._fill_info()
74 return self._url
75
76 @property
78 """release date of the album"""
79 if self._release_date is None:
80 self._fill_info()
81 return self._release_date
82
83 @property
85 """cover images of the album"""
86 if self._image is None:
87 self._fill_info()
88 return self._image
89
90 @property
92 """stats related to the album"""
93 if self._stats is None:
94 self._fill_info()
95 return self._stats
96
97 @property
99 """is the album streamable"""
100 return self._streamable
101
102 @LastfmBase.cached_property
120
121 @LastfmBase.top_property("top_tags")
123 """top tag for the album"""
124 pass
125
126 @LastfmBase.cached_property
128 """playlist for the album"""
129 return Playlist.fetch(self._api, "lastfm://playlist/album/%s" % self.id)
130
131 @staticmethod
132 - def get_info(api,
133 artist = None,
134 album = None,
135 mbid = None):
147
154
155 @staticmethod
156 - def _fetch_data(api,
157 artist = None,
158 album = None,
159 mbid = None):
168
170 data = Album._fetch_data(self._api, self.artist.name, self.name)
171 self._id = int(data.findtext('id'))
172 self._mbid = data.findtext('mbid')
173 self._url = data.findtext('url')
174 self._release_date = data.findtext('releasedate') and data.findtext('releasedate').strip() and \
175 datetime(*(time.strptime(data.findtext('releasedate').strip(), '%d %b %Y, 00:00')[0:6]))
176 self._image = dict([(i.get('size'), i.text) for i in data.findall('image')])
177 if not self._stats:
178 self._stats = Stats(
179 subject = self,
180 listeners = int(data.findtext('listeners')),
181 playcount = int(data.findtext('playcount')),
182 )
183 self._top_tags = [
184 Tag(
185 self._api,
186 subject = self,
187 name = t.findtext('name'),
188 url = t.findtext('url')
189 )
190 for t in data.findall('toptags/tag')
191 ]
192
193 @staticmethod
207
208 @staticmethod
210 try:
211 return hash("%s%s" % (kwds['name'], hash(kwds['artist'])))
212 except KeyError:
213 raise InvalidParametersError("name and artist have to be provided for hashing")
214
217
228
231
233 return "<lastfm.Album: '%s' by %s>" % (self.name, self.artist.name)
234
235
236 from datetime import datetime
237 import time
238
239 from lastfm.api import Api
240 from lastfm.artist import Artist
241 from lastfm.error import InvalidParametersError
242 from lastfm.playlist import Playlist
243 from lastfm.stats import Stats
244 from lastfm.tag import Tag
245