implemented methods in user and event modules. All methods from last.fm API are implemented now.

master
Abhinav Sarkar 2008-10-03 17:00:35 +00:00
parent 302f943805
commit 37fce56b41
3 changed files with 84 additions and 5 deletions

View File

@ -165,6 +165,11 @@ class Api(object):
except LastfmError, e:
raise e
return user
def getAuthenticatedUser(self):
if self.sessionKey is not None:
return User.getAuthenticatedUser(self)
return None
def _BuildUrl(self, url, path_elements=None, extra_params=None):
# Break url into consituent parts
@ -340,7 +345,7 @@ class Api(object):
keys.sort()
sig = unicode()
for name in keys:
sig += (name + params[name])
sig += ("%s%s" % (name, params[name]))
sig += self.secret
hashed_sig = md5.new(sig).hexdigest()
return hashed_sig

View File

@ -9,6 +9,10 @@ from sharable import Sharable
class Event(LastfmBase, Sharable):
"""A class representing an event."""
STATUS_ATTENDING = 0
STATUS_MAYBE = 1
STATUS_NOT = 2
def init(self,
api,
id = None,
@ -98,6 +102,12 @@ class Event(LastfmBase, Sharable):
"""tags for the event"""
return self.__tag
def attend(self, status = STATUS_ATTENDING):
if status not in [Event.STATUS_ATTENDING, Event.STATUS_MAYBE, Event.STATUS_NOT]:
LastfmInvalidParametersError("status has to be 0, 1 or 2")
params = self._defaultParams({'method': 'event.attend', 'status': status})
self.__api._postData(params)
def _defaultParams(self, extraParams = None):
if not self.id:
raise LastfmInvalidParametersError("id has to be provided.")

View File

@ -15,7 +15,12 @@ class User(LastfmBase):
name = None,
url = None,
image = None,
stats = None):
stats = None,
language = None,
country = None,
age = None,
gender = None,
subscriber = None):
if not isinstance(api, Api):
raise LastfmInvalidParametersError("api reference must be supplied as an argument")
self.__api = api
@ -25,9 +30,15 @@ class User(LastfmBase):
self.__stats = stats and Stats(
subject = self,
match = stats.match,
weight = stats.weight
weight = stats.weight,
playcount = stats.playcount
)
self.__lirary = User.Library(api, self)
self.__library = User.Library(api, self)
self.__language = language
self.__country = country
self.__age = age
self.__gender = gender
self.__subscriber = subscriber
@property
def name(self):
@ -48,6 +59,31 @@ class User(LastfmBase):
def stats(self):
"""stats for the user"""
return self.__stats
@property
def language(self):
"""lang for the user"""
return self.__language
@property
def country(self):
"""country for the user"""
return self.__country
@property
def age(self):
"""age for the user"""
return self.__age
@property
def gender(self):
"""stats for the user"""
return self.__gender
@property
def subscriber(self):
"""is the user a subscriber"""
return self.__subscriber
@LastfmBase.cachedProperty
def events(self):
@ -476,7 +512,25 @@ class User(LastfmBase):
limit)
@property
def library(self):
return self.__lirary
return self.__library
@staticmethod
def getAuthenticatedUser(api):
data = api._fetchData({'method': 'user.getInfo'}, sign = True, session = True).find('user')
return User(
api,
name = data.findtext('name'),
url = data.findtext('url'),
language = data.findtext('lang'),
country = Country(api, name = data.findtext('country')),
age = int(data.findtext('age')),
gender = data.findtext('gender'),
subscriber = (data.findtext('subscriber') == '1'),
stats = Stats(
subject = data.findtext('name'),
playcount = data.findtext('playcount')
)
)
@staticmethod
def hashFunc(*args, **kwds):
@ -527,6 +581,15 @@ class User(LastfmBase):
def creator(self):
return self.__creator
def addTrack(self, track):
params = {'method': 'playlist.addTrack', 'playlistID': self.id}
if not isinstance(track, Track):
track = self.__api.searchTrack(track)[0]
params['artist'] = track.artist.name
params['track'] = track.name
self.__api._postData(params)
@staticmethod
def hashFunc(*args, **kwds):
try:
@ -723,6 +786,7 @@ from artist import Artist
from album import Album
from error import LastfmError, LastfmInvalidParametersError
from event import Event
from geo import Country
from stats import Stats
from tag import Tag
from tasteometer import Tasteometer