implemented some methods in user.py

This commit is contained in:
Abhinav Sarkar 2008-08-18 16:12:46 +00:00
parent 291ec6846a
commit e21be6a3ed
2 changed files with 122 additions and 22 deletions

View File

@ -17,7 +17,9 @@ class Track(LastfmBase):
artist = None, artist = None,
image = None, image = None,
stats = None, stats = None,
fullTrack = None): fullTrack = None,
playedOn = None,
lovedOn = None):
if not isinstance(api, Api): if not isinstance(api, Api):
raise LastfmError("api reference must be supplied as an argument") raise LastfmError("api reference must be supplied as an argument")
self.__api = api self.__api = api
@ -35,6 +37,8 @@ class Track(LastfmBase):
listeners = stats.listeners, listeners = stats.listeners,
) )
self.__fullTrack = fullTrack self.__fullTrack = fullTrack
self.__playedOn = playedOn
self.__lovedOn = lovedOn
self.__similar = None self.__similar = None
self.__topFans = None self.__topFans = None
self.__topTags = None self.__topTags = None
@ -79,6 +83,16 @@ class Track(LastfmBase):
"""is the full track streamable""" """is the full track streamable"""
return self.__fullTrack return self.__fullTrack
@property
def playedOn(self):
"""datetime the track was last played"""
return self.__playedOn
@property
def lovedOn(self):
"""datetime the track was marked 'loved'"""
return self.__lovedOn
def __checkParams(self, def __checkParams(self,
params, params,
artist = None, artist = None,

View File

@ -13,7 +13,8 @@ class User(LastfmBase):
name = None, name = None,
url = None, url = None,
image = None, image = None,
stats = None): stats = None,
mostRecentTrack = None):
if not isinstance(api, Api): if not isinstance(api, Api):
raise LastfmError("api reference must be supplied as an argument") raise LastfmError("api reference must be supplied as an argument")
self.__api = api self.__api = api
@ -26,6 +27,10 @@ class User(LastfmBase):
weight = stats.weight weight = stats.weight
) )
self.__events = None self.__events = None
self.__pastEvents = None
self.__friends = None
self.__lovedTracks = None
self.__mostRecentTrack = mostRecentTrack
@property @property
def name(self): def name(self):
@ -61,17 +66,65 @@ class User(LastfmBase):
@property @property
def pastEvents(self): def pastEvents(self):
pass if self.__pastEvents is None:
params = {'method': 'user.getpastevents', 'user': self.name}
data = self.__api._fetchData(params).find('events')
self.__pastEvents = [
Event.createFromData(self.__api, e)
for e in data.findall('event')
]
return self.__pastEvents
def getFriends(self, def getFriends(self,
recentTracks = False, recentTrack = False,
limit = None): limit = None):
pass params = {'method': 'user.getfriends', 'user': self.name}
if recentTrack:
params.update({'recenttracks': 'true'})
if limit is not None:
params.update({'limit': limit})
data = self.__api._fetchData(params).find('friends')
if recentTrack:
return [
User(
self.__api,
name = u.findtext('name'),
image = dict([(i.get('size'), i.text) for i in u.findall('image')]),
url = u.findtext('url'),
mostRecentTrack = Track(
self.__api,
name = u.findtext('recenttrack/name'),
mbid = u.findtext('recenttrack/mbid'),
url = u.findtext('recenttrack/url'),
artist = Artist(
self.__api,
name = u.findtext('recenttrack/artist/name'),
mbid = u.findtext('recenttrack/artist/mbid'),
url = u.findtext('recenttrack/artist/url'),
),
),
)
for u in data.findall('user')
]
else:
return [
User(
self.__api,
name = u.findtext('name'),
image = dict([(i.get('size'), i.text) for i in u.findall('image')]),
url = u.findtext('url'),
)
for u in data.findall('user')
]
@property @property
def friends(self): def friends(self):
"""friends of the user""" """friends of the user"""
return self.getFriends() if self.__friends is None:
self.__friends = self.getFriends()
return self.__friends
def getNeighbours(self, limit = None): def getNeighbours(self, limit = None):
pass pass
@ -86,6 +139,34 @@ class User(LastfmBase):
"""playlists of the user""" """playlists of the user"""
pass pass
@property
def lovedTracks(self):
if self.__lovedTracks is None:
params = {'method': 'user.getlovedtracks', 'user': self.name}
data = self.__api._fetchData(params).find('lovedtracks')
self.__lovedTracks = [
Track(
self.__api,
name = t.findtext('name'),
artist = Artist(
self.__api,
name = t.findtext('artist/name'),
mbid = t.findtext('artist/mbid'),
url = t.findtext('artist/url'),
),
mbid = t.findtext('mbid'),
image = dict([(i.get('size'), i.text) for i in t.findall('image')]),
lovedOn = datetime(*(
time.strptime(
t.findtext('date').strip(),
'%d %b %Y, %H:%M'
)[0:6])
)
)
for t in data.findall('track')
]
return self.__lovedTracks
def getRecentTracks(self, limit = None): def getRecentTracks(self, limit = None):
pass pass
@ -201,7 +282,12 @@ class User(LastfmBase):
def __repr__(self): def __repr__(self):
return "<lastfm.User: %s>" % self.name return "<lastfm.User: %s>" % self.name
from datetime import datetime
import time
from api import Api from api import Api
from artist import Artist
from error import LastfmError from error import LastfmError
from event import Event from event import Event
from stats import Stats from stats import Stats
from track import Track