Merge pull request #101 from pylast/extend_get_recent_tracks

Add from/to parameters to get_recent_tracks()
This commit is contained in:
Hugo 2014-10-25 17:51:45 +03:00
commit 8670a2f2d1
2 changed files with 60 additions and 14 deletions

View file

@ -425,12 +425,18 @@ class _Network(object):
params = {} params = {}
if long: params["long"] = long if long:
if lat: params["lat"] = lat params["long"] = long
if location: params["location"] = location if lat:
if limit: params["limit"] = limit params["lat"] = lat
if distance: params["distance"] = distance if location:
if tag: params["tag"] = tag params["location"] = location
if limit:
params["limit"] = limit
if distance:
params["distance"] = distance
if tag:
params["tag"] = tag
if festivalsonly: if festivalsonly:
params["festivalsonly"] = 1 params["festivalsonly"] = 1
elif not festivalsonly: elif not festivalsonly:
@ -671,12 +677,18 @@ class _Network(object):
params = {"track": title, "artist": artist} params = {"track": title, "artist": artist}
if album: params["album"] = album if album:
if album_artist: params["albumArtist"] = album_artist params["album"] = album
if context: params["context"] = context if album_artist:
if track_number: params["trackNumber"] = track_number params["albumArtist"] = album_artist
if mbid: params["mbid"] = mbid if context:
if duration: params["duration"] = duration params["context"] = context
if track_number:
params["trackNumber"] = track_number
if mbid:
params["mbid"] = mbid
if duration:
params["duration"] = duration
_Request(self, "track.updateNowPlaying", params).execute() _Request(self, "track.updateNowPlaying", params).execute()
@ -3377,12 +3389,22 @@ class User(_BaseObject, _Chartable):
return Track(artist, title, self.network, self.name) return Track(artist, title, self.network, self.name)
def get_recent_tracks(self, limit=10, cacheable=True): def get_recent_tracks(self, limit=10, cacheable=True,
time_from=None, time_to=None):
""" """
Returns this user's played track as a sequence of PlayedTrack objects Returns this user's played track as a sequence of PlayedTrack objects
in reverse order of playtime, all the way back to the first track. in reverse order of playtime, all the way back to the first track.
If limit==None, it will try to pull all the available data. Parameters:
limit : If None, it will try to pull all the available data.
from (Optional) : Beginning timestamp of a range - only display
scrobbles after this time, in UNIX timestamp format (integer
number of seconds since 00:00:00, January 1st 1970 UTC). This
must be in the UTC time zone.
to (Optional) : End timestamp of a range - only display scrobbles
before this time, in UNIX timestamp format (integer number of
seconds since 00:00:00, January 1st 1970 UTC). This must be in
the UTC time zone.
This method uses caching. Enable caching only if you're pulling a This method uses caching. Enable caching only if you're pulling a
large amount of data. large amount of data.
@ -3394,6 +3416,10 @@ class User(_BaseObject, _Chartable):
params = self._get_params() params = self._get_params()
if limit: if limit:
params['limit'] = limit params['limit'] = limit
if time_from:
params['from'] = time_from
if time_to:
params['to'] = time_to
seq = [] seq = []
for track in _collect_nodes( for track in _collect_nodes(

View file

@ -1838,6 +1838,26 @@ class TestPyLast(unittest.TestCase):
# Assert # Assert
self.assertIsNone(band_members) self.assertIsNone(band_members)
def test_get_recent_tracks_from_to(self):
# Arrange
lastfm_user = self.network.get_user("RJ")
from datetime import datetime
start = datetime(2011, 7, 21, 15, 10)
end = datetime(2011, 7, 21, 15, 15)
import calendar
utc_start = calendar.timegm(start.utctimetuple())
utc_end = calendar.timegm(end.utctimetuple())
# Act
tracks = lastfm_user.get_recent_tracks(time_from=utc_start,
time_to=utc_end)
# Assert
self.assertEqual(len(tracks), 1)
self.assertEqual(str(tracks[0].track.artist), "Johnny Cash")
self.assertEqual(str(tracks[0].track.title), "Ring of Fire")
if __name__ == '__main__': if __name__ == '__main__':
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(