Example #1
0
	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') )
Example #2
0
    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
Example #3
0
 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()
Example #4
0
	def testBasic(self):
		f = ReleaseFilter(title='Under the Pink')
		params = f.createParameters()
		self.assert_( ('title', 'Under the Pink') in params )