get_upcoming_events() no longer returns events with venue IDs. Also fixed/tested other events functions, and removed duplication. Closes #78.
This commit is contained in:
parent
40ea12a22f
commit
c15923e4cd
36
pylast.py
36
pylast.py
|
@ -1040,6 +1040,12 @@ class _BaseObject(object):
|
|||
return hash(self.network) + \
|
||||
hash(str(type(self)) + "".join(list(self._get_params().keys()) + list(values)).lower())
|
||||
|
||||
def _get_events_from_doc(self, doc):
|
||||
events = []
|
||||
for node in doc.getElementsByTagName("event"):
|
||||
events.append(Event(_extract(node, "id"), self.network))
|
||||
return events
|
||||
|
||||
class _Taggable(object):
|
||||
"""Common functions for classes with tags."""
|
||||
|
||||
|
@ -1508,13 +1514,7 @@ class Artist(_BaseObject, _Taggable):
|
|||
|
||||
doc = self._request('artist.getEvents', True)
|
||||
|
||||
ids = _extract_all(doc, 'id')
|
||||
|
||||
events = []
|
||||
for e_id in ids:
|
||||
events.append(Event(e_id, self.network))
|
||||
|
||||
return events
|
||||
return self._get_events_from_doc(doc)
|
||||
|
||||
def get_similar(self, limit = None):
|
||||
"""Returns the similar artists on the network."""
|
||||
|
@ -2955,17 +2955,11 @@ class User(_BaseObject):
|
|||
return self.name
|
||||
|
||||
def get_upcoming_events(self):
|
||||
"""Returns all the upcoming events for this user. """
|
||||
"""Returns all the upcoming events for this user."""
|
||||
|
||||
doc = self._request('user.getEvents', True)
|
||||
|
||||
ids = _extract_all(doc, 'id')
|
||||
events = []
|
||||
|
||||
for e_id in ids:
|
||||
events.append(Event(e_id, self.network))
|
||||
|
||||
return events
|
||||
return self._get_events_from_doc(doc)
|
||||
|
||||
def get_artist_tracks(self, artist):
|
||||
"""Get a list of tracks by a given artist scrobbled by this user, including scrobble time."""
|
||||
|
@ -3677,22 +3671,14 @@ class Venue(_BaseObject):
|
|||
|
||||
doc = self._request("venue.getEvents", True)
|
||||
|
||||
seq = []
|
||||
for node in doc.getElementsByTagName("event"):
|
||||
seq.append(Event(_extract(node, "id"), self.network))
|
||||
|
||||
return seq
|
||||
return self._get_events_from_doc(doc)
|
||||
|
||||
def get_past_events(self):
|
||||
"""Returns the past events held in this venue."""
|
||||
|
||||
doc = self._request("venue.getEvents", True)
|
||||
|
||||
seq = []
|
||||
for node in doc.getElementsByTagName("event"):
|
||||
seq.append(Event(_extract(node, "id"), self.network))
|
||||
|
||||
return seq
|
||||
return self._get_events_from_doc(doc)
|
||||
|
||||
def md5(text):
|
||||
"""Returns the md5 hash of a string."""
|
||||
|
|
|
@ -159,7 +159,7 @@ class TestPyLast(unittest.TestCase):
|
|||
def test_get_venue(self):
|
||||
# Arrange
|
||||
venue_name = "Last.fm Office"
|
||||
country_name = "United Kingom"
|
||||
country_name = "United Kingdom"
|
||||
|
||||
# Act
|
||||
venue_search = self.network.search_for_venue(venue_name, country_name)
|
||||
|
@ -571,6 +571,97 @@ class TestPyLast(unittest.TestCase):
|
|||
self.assertFalse(self.network.is_rate_limited())
|
||||
|
||||
|
||||
# Commented out because (a) it'll take a long time and
|
||||
# (b) it strangely fails due Last.fm's complaining of hitting the rate limit,
|
||||
# even when limited to one call per second. The ToS allows 5 calls per second.
|
||||
# def test_get_all_scrobbles(self):
|
||||
# # Arrange
|
||||
# lastfm_user = self.network.get_user("RJ")
|
||||
# self.network.enable_rate_limit() # this is going to be slow...
|
||||
|
||||
# # Act
|
||||
# tracks = lastfm_user.get_recent_tracks(limit = None)
|
||||
|
||||
# # Assert
|
||||
# self.assertGreaterEqual(len(tracks), 0)
|
||||
|
||||
|
||||
def helper_past_events_have_valid_ids(self, thing):
|
||||
# Act
|
||||
events = thing.get_past_events()
|
||||
|
||||
# Assert
|
||||
self.helper_assert_events_have_valid_ids(events)
|
||||
|
||||
|
||||
def helper_upcoming_events_have_valid_ids(self, thing):
|
||||
# Act
|
||||
events = thing.get_upcoming_events()
|
||||
|
||||
# Assert
|
||||
self.helper_assert_events_have_valid_ids(events)
|
||||
|
||||
|
||||
def helper_assert_events_have_valid_ids(self, events):
|
||||
# Assert
|
||||
self.assertGreaterEqual(len(events), 1) # if fails, add past/future event for user/Test Artist
|
||||
for event in events[:2]: # checking first two should be enough
|
||||
self.assertIsInstance(event.get_headliner(), pylast.Artist)
|
||||
|
||||
|
||||
def test_artist_upcoming_events_returns_valid_ids(self):
|
||||
# Arrange
|
||||
artist = pylast.Artist("Test Artist", self.network)
|
||||
|
||||
# Act/Assert
|
||||
self.helper_upcoming_events_have_valid_ids(artist)
|
||||
|
||||
|
||||
def test_user_past_events_returns_valid_ids(self):
|
||||
# Arrange
|
||||
lastfm_user = self.network.get_user(self.username)
|
||||
|
||||
# Act/Assert
|
||||
self.helper_past_events_have_valid_ids(lastfm_user)
|
||||
|
||||
|
||||
def test_user_recommended_events_returns_valid_ids(self):
|
||||
# Arrange
|
||||
lastfm_user = self.network.get_user(self.username)
|
||||
|
||||
# Act
|
||||
events = lastfm_user.get_upcoming_events()
|
||||
|
||||
# Assert
|
||||
self.helper_assert_events_have_valid_ids(events)
|
||||
|
||||
|
||||
def test_user_upcoming_events_returns_valid_ids(self):
|
||||
# Arrange
|
||||
lastfm_user = self.network.get_user(self.username)
|
||||
|
||||
# Act/Assert
|
||||
self.helper_upcoming_events_have_valid_ids(lastfm_user)
|
||||
|
||||
|
||||
def test_venue_past_events_returns_valid_ids(self):
|
||||
# Arrange
|
||||
venue_id = "8778225" # Last.fm office
|
||||
venue = pylast.Venue(venue_id, self.network)
|
||||
|
||||
# Act/Assert
|
||||
self.helper_past_events_have_valid_ids(venue)
|
||||
|
||||
|
||||
def test_venue_upcoming_events_returns_valid_ids(self):
|
||||
# Arrange
|
||||
venue_id = "8778225" # Last.fm office
|
||||
venue = pylast.Venue(venue_id, self.network)
|
||||
|
||||
# Act/Assert
|
||||
self.helper_upcoming_events_have_valid_ids(venue)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
# For quick testing of a single case (eg. test = "test_scrobble")
|
||||
|
|
Loading…
Reference in a new issue