def get_basic_artist(mbid): """ Make sure basic artist document is present and contains required data. @param mbid: a string containing a MusicBrainz ID of an artist @return: a CachedArtist object containing required minimal data set """ #TODO: handle Various Artists' artist (VARIOUS_ARTISTS_ID) try: artist = CachedArtist.get(mbid) mmda_logger('db','present',artist._doc_type, artist.get_id) except ResourceNotFound: artist = _create_mb_artist(mbid) return artist
@param mbid: a string containing a MusicBrainz ID of an artist @return: a CachedArtist object with basic MusicBrainz data """ try: t = mmda_logger('mb','request','artist',mbid) mb_artist = mb_query.getArtistById(mbid, MB_ARTIST_INCLUDES) mmda_logger('mb','result', 'artist',mb_artist.name,t) except WebServiceError, e: # TODO: hard error page here # TODO: 404 not found redirect to different page? conditional? # TODO: HTTP Error 503: Service Temporarily Unavailable -> special case: please wait few seconds and hit F5 mmda_logger('mb-artist','ERROR',e) raise e else: artist = CachedArtist.get_or_create(mbid) artist = _populate_artist_mb(artist, mb_artist) artist.cache_state['mb'] = [1,datetime.utcnow()] artist.save() mmda_logger('db','store',artist) # since we have some basic release data fetched with artist, store it _create_shallow_releases_mb(mb_artist) # TODO: think about genres and origin - fetch from freebase(?) # freebase.mqlread({"type":"/music/artist", "limit": 1, "key": [{"namespace" : '/authority/musicbrainz',"value" : '579ef111-19dd-4ae8-ad50-d5fa435472b9'}], "genre":[], "origin":None} ) return artist def _populate_artist_mb(artist, mb_artist): """ Process data from MusicBrainz and store it in dedicated structures of CachedArtist.