This commit is contained in:
parent
bdf12b8152
commit
2a51a20bb9
BIN
dist/lastfm-0.1-py2.5.egg
vendored
BIN
dist/lastfm-0.1-py2.5.egg
vendored
Binary file not shown.
BIN
dist/lastfm-0.1.tar.gz
vendored
BIN
dist/lastfm-0.1.tar.gz
vendored
Binary file not shown.
BIN
dist/lastfm-0.1.win32-py2.5.msi
vendored
BIN
dist/lastfm-0.1.win32-py2.5.msi
vendored
Binary file not shown.
BIN
dist/lastfm-0.1.zip
vendored
BIN
dist/lastfm-0.1.zip
vendored
Binary file not shown.
26
src/album.py
26
src/album.py
@ -63,13 +63,20 @@ class Album(LastfmBase):
|
||||
|
||||
def getTopTags(self):
|
||||
if self.__topTags is None:
|
||||
self.__topTags = Album.getInfo(
|
||||
self.__api,
|
||||
self.artist.name,
|
||||
self.name,
|
||||
self.mbid,
|
||||
bypassRegistry = True
|
||||
).topTags
|
||||
params = {'method': 'album.getinfo'}
|
||||
if self.artist and self.name:
|
||||
params.update({'artist': self.artist.name, 'album': self.name})
|
||||
elif self.mbid:
|
||||
params.update({'mbid': self.mbid})
|
||||
data = self.__api.fetchData(params).find('album')
|
||||
self.__topTags = [
|
||||
Tag(
|
||||
self.__api,
|
||||
name = t.findtext('name'),
|
||||
url = t.findtext('url')
|
||||
)
|
||||
for t in data.findall('toptags/tag')
|
||||
]
|
||||
return self.__topTags
|
||||
|
||||
name = property(getName, None, None, "Name's Docstring")
|
||||
@ -98,7 +105,7 @@ class Album(LastfmBase):
|
||||
def getInfo(api,
|
||||
artist = None,
|
||||
album = None,
|
||||
mbid = None, **kwds):
|
||||
mbid = None):
|
||||
params = {'method': 'album.getinfo'}
|
||||
if not ((artist and album) or mbid):
|
||||
raise LastfmError("either (artist and album) or mbid has to be given as argument.")
|
||||
@ -130,8 +137,7 @@ class Album(LastfmBase):
|
||||
url = t.findtext('url')
|
||||
)
|
||||
for t in data.findall('toptags/tag')
|
||||
],
|
||||
**kwds
|
||||
]
|
||||
)
|
||||
@staticmethod
|
||||
def hashFunc(*args, **kwds):
|
||||
|
@ -67,7 +67,8 @@ class Artist(LastfmBase):
|
||||
def getSimilar(self, limit = None):
|
||||
params = {
|
||||
'method': 'artist.getsimilar',
|
||||
'artist': self.__name}
|
||||
'artist': self.__name
|
||||
}
|
||||
if limit is not None:
|
||||
params.update({'limit': limit})
|
||||
data = self.__api.fetchData(params).find('similarartists')
|
||||
@ -85,10 +86,21 @@ class Artist(LastfmBase):
|
||||
return self.__similar
|
||||
|
||||
def getTopTags(self):
|
||||
if self.__topTags:
|
||||
return self.__topTags
|
||||
else:
|
||||
pass
|
||||
if self.__topTags is None or len(self.__topTags) < 6:
|
||||
params = {
|
||||
'method': 'artist.gettoptags',
|
||||
'artist': self.__name
|
||||
}
|
||||
data = self.__api.fetchData(params).find('toptags')
|
||||
self.__topTags = [
|
||||
Tag(
|
||||
self.__api,
|
||||
name = t.findtext('name'),
|
||||
url = t.findtext('url')
|
||||
)
|
||||
for t in data.findall('tag')
|
||||
]
|
||||
return self.__topTags
|
||||
|
||||
def getBio(self):
|
||||
return self.__bio
|
||||
@ -204,7 +216,25 @@ class Artist(LastfmBase):
|
||||
None, None, "docstring")
|
||||
|
||||
def getTopTracks(self):
|
||||
pass
|
||||
params = {'method': 'artist.gettoptracks', 'artist': self.name}
|
||||
data = self.__api.fetchData(params).find('toptracks')
|
||||
return [
|
||||
Track(
|
||||
self.__api,
|
||||
name = t.findtext('name'),
|
||||
artist = self,
|
||||
mbid = t.findtext('mbid'),
|
||||
playcount = int(t.findtext('playcount')),
|
||||
streamable = (t.findtext('streamable') == '1'),
|
||||
fullTrack = (t.find('streamable').attrib['fulltrack'] == '1'),
|
||||
image = dict([(i.get('size'), i.text) for i in t.findall('image')]),
|
||||
)
|
||||
for t in data.findall('track')
|
||||
]
|
||||
|
||||
topTracks = property(getTopTracks, None, None, "Docstring")
|
||||
topTrack = property(lambda self: len(self.topTracks) and self.topTracks[0],
|
||||
None, None, "docstring")
|
||||
|
||||
@staticmethod
|
||||
def search(api,
|
||||
@ -365,4 +395,5 @@ from error import LastfmError
|
||||
from event import Event
|
||||
from geo import Country, Location, Venue
|
||||
from tag import Tag
|
||||
from track import Track
|
||||
from user import User
|
||||
|
15
src/base.py
15
src/base.py
@ -10,16 +10,17 @@ class LastfmBase(object):
|
||||
registry = {}
|
||||
|
||||
def __new__(cls, *args, **kwds):
|
||||
key = cls.hashFunc(*args, **kwds)
|
||||
inst, alreadyRegistered = LastfmBase.register(object.__new__(cls), key)
|
||||
if not alreadyRegistered:
|
||||
inst.init(*args, **kwds)
|
||||
else:
|
||||
if 'bypassRegistry' in kwds:
|
||||
if 'bypassRegistry' in kwds:
|
||||
del kwds['bypassRegistry']
|
||||
inst = object.__new__(cls)
|
||||
inst.init(*args, **kwds)
|
||||
return inst
|
||||
return inst
|
||||
|
||||
key = cls.hashFunc(*args, **kwds)
|
||||
inst, alreadyRegistered = LastfmBase.register(object.__new__(cls), key)
|
||||
if not alreadyRegistered:
|
||||
inst.init(*args, **kwds)
|
||||
return inst
|
||||
|
||||
@staticmethod
|
||||
def register(ob, key):
|
||||
|
16
src/track.py
16
src/track.py
@ -16,7 +16,9 @@ class Track(LastfmBase):
|
||||
streamable = None,
|
||||
artist = None,
|
||||
image = None,
|
||||
match = None):
|
||||
match = None,
|
||||
playcount = None,
|
||||
fullTrack = None):
|
||||
if not isinstance(api, Api):
|
||||
raise LastfmError("api reference must be supplied as an argument")
|
||||
self.__api = api
|
||||
@ -27,6 +29,8 @@ class Track(LastfmBase):
|
||||
self.__artist = artist
|
||||
self.__image = image
|
||||
self.__match = match
|
||||
self.__playcount = playcount
|
||||
self.__fullTrack = fullTrack
|
||||
|
||||
def getName(self):
|
||||
return self.__name
|
||||
@ -48,6 +52,12 @@ class Track(LastfmBase):
|
||||
|
||||
def getMatch(self):
|
||||
return self.__match
|
||||
|
||||
def getPlaycount(self):
|
||||
return self.__playcount
|
||||
|
||||
def getFullTrack(self):
|
||||
return self.__fullTrack
|
||||
|
||||
name = property(getName, None, None, "Name's Docstring")
|
||||
|
||||
@ -63,6 +73,10 @@ class Track(LastfmBase):
|
||||
|
||||
match = property(getMatch, None, None, "Match's Docstring")
|
||||
|
||||
playcount = property(getPlaycount, None, None, "Match's Docstring")
|
||||
|
||||
fullTrack = property(getFullTrack, None, None, "Match's Docstring")
|
||||
|
||||
def __checkParams(self,
|
||||
params,
|
||||
artist = None,
|
||||
|
Loading…
Reference in New Issue
Block a user