From ea9f896310eacb24cfdd539c904fb263ef15df2c Mon Sep 17 00:00:00 2001 From: Patrick Speiser Date: Sun, 9 Sep 2012 07:02:59 +0200 Subject: [PATCH] Added paging to get_all_releases, this will ensure that any future (however unlikely) release groups containing over 100 releases will be read correctly --- headphones/mb.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/headphones/mb.py b/headphones/mb.py index b9a629ac..dd161633 100644 --- a/headphones/mb.py +++ b/headphones/mb.py @@ -368,19 +368,26 @@ def getRelease(releaseid, include_artist_info=True): return release def get_all_releases(rgid): - results = None + results = [] q, sleepytime = startmb() try: - results = musicbrainzngs.browse_releases(release_group=rgid,includes=['artist-credits','labels','recordings','release-groups','media']) + limit = 100 + newResults = None + while newResults == None or len(newResults) >= limit: + newResults = musicbrainzngs.browse_releases(release_group=rgid,includes=['artist-credits','labels','recordings','release-groups','media'],limit=limit,offset=len(results)) + if 'release-list' not in newResults: + break #may want to raise an exception here instead ? + newResults = newResults['release-list'] + results += newResults + except WebServiceError, e: logger.warn('Attempt to retrieve information from MusicBrainz for release group "%s" failed (%s)' % (rgid, str(e))) time.sleep(5) return False - if not results or 'release-list' not in results: + if not results or len(results) == 0: return False - results = results['release-list'] releases = [] for releasedata in results: