From 37fce56b4118386a77e9b1150cd7ac01fe3d7318 Mon Sep 17 00:00:00 2001 From: Abhinav Sarkar Date: Fri, 3 Oct 2008 17:00:35 +0000 Subject: [PATCH] implemented methods in user and event modules. All methods from last.fm API are implemented now. --- src/api.py | 7 ++++- src/event.py | 10 ++++++++ src/user.py | 72 +++++++++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 84 insertions(+), 5 deletions(-) diff --git a/src/api.py b/src/api.py index 146326a..b3f7614 100644 --- a/src/api.py +++ b/src/api.py @@ -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 diff --git a/src/event.py b/src/event.py index 0da0c7b..649799f 100644 --- a/src/event.py +++ b/src/event.py @@ -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.") diff --git a/src/user.py b/src/user.py index 80a82b3..95e6335 100644 --- a/src/user.py +++ b/src/user.py @@ -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