def testReleaseTypes(self): f = ReleaseFilter(artistName='Tori Amos', releaseTypes=( Release.TYPE_ALBUM, Release.TYPE_OFFICIAL)) params = f.createParameters() self.assertEquals(len(params), 2) self.assert_( ('artist', 'Tori Amos') ) self.assert_( ('releasetypes', 'Album Official') )
def getReleases(self, artistResult): q = Query() offset = 0 limit = 100 releaseResults = set() while True: try: f = ReleaseFilter(artistId=artistResult.getKey( MusicbrainzSource._sourceName), offset=offset, limit=limit) results = q.getReleases(f) except WebServiceError, e: raise SourceError count = len(results) results = filter(lambda res: res.getScore() == 100, results) for r in results: rr = ReleaseResult( title=r.getRelease().getTitle(), date=r.getRelease().getEarliestReleaseDate(), tracksCount=r.getRelease().getTracksCount()) rr.setKey(MusicbrainzSource._sourceName, r.getRelease().getId()) releaseResults.add(rr) if count < limit: break offset += count
def populate_album_set(self): """ Find and create models for all albums released by this artist. Only albums with an Amazon ASIN are imported, to try and stop the database getting clogged up with b-sides, remixes, and bonus material. """ # We can't do anything without the MusicBrainz and Last.fm libraries. try: ReleaseFilter except NameError: return False # Find any official album release held by MusicBrainz for this artist. filter = ReleaseFilter(artistName=self.name, releaseTypes=(Release.TYPE_ALBUM, Release.TYPE_OFFICIAL)) query = Query() releases = query.getReleases(filter) for release in releases: album = release.release # Only import albums with an Amazon ASIN. That allows for some # quality-control as Music Brainz lists every B-side and bonus # material you can think of. if album.asin: # First try and find an already-existing album with this ASIN # As an ASIN is unique it means we'll find it even if the fields # have been changed since creation. try: db_album = Album.objects.get(asin=album.asin) except Album.DoesNotExist: db_album = Album(artist=self, title=album.title, asin=album.asin, mbid=album.id.rsplit("/", 1)[1]) # MusicBrainz stores releases dates for as many countries as # it can. I'm only interested in Britain though, so look # for that first. As a fallback, us the world wide release # date (XE) or the US release date. release_dates = dict( (r.country, r.date) for r in album.releaseEvents) if release_dates: # GB = United Kingdom, XE = world, US = United States. for country in ('GB', 'XE', 'US'): if release_dates.has_key(country): db_album.released_in = country # The release date can be in the format "2010", # "2010-02", or "2010-02-18", so make up the # missing month and/or day so a proper release # date object can be created. release_date = release_dates[country] date_list = map(int, release_date.split('-')) try: db_album.release_date = datetime.date( *date_list + [1] * (3 - len(date_list))) except ValueError: pass # Date couldn't be parsed. break db_album.save()
def testBasic(self): f = ReleaseFilter(title='Under the Pink') params = f.createParameters() self.assert_( ('title', 'Under the Pink') in params )