Ejemplo n.º 1
0
def submit():
    raw_data = request.get_data()
    try:
        data = ujson.loads(raw_data.decode("utf-8"))
    except ValueError as e:
        raise BadRequest("Cannot parse JSON document: %s" % e)

    if not isinstance(data, list):
        raise BadRequest("submitted data must be a list")

    try:
        result = messybrainz.submit_listens_and_sing_me_a_sweet_song(data)
        return ujsonify(result)
    except messybrainz.exceptions.BadDataException as e:
        raise BadRequest(e)
Ejemplo n.º 2
0
def submit():
    raw_data = request.get_data()
    try:
        data = ujson.loads(raw_data.decode("utf-8"))
    except ValueError as e:
        raise BadRequest("Cannot parse JSON document: %s" % e)

    if not isinstance(data, list):
        raise BadRequest("submitted data must be a list")

    try:
        result = messybrainz.submit_listens_and_sing_me_a_sweet_song(data)
        return ujsonify(result)
    except messybrainz.exceptions.BadDataException as e:
        raise BadRequest(e)
Ejemplo n.º 3
0
def submit_listens(listens):
    return messybrainz.submit_listens_and_sing_me_a_sweet_song(listens)
Ejemplo n.º 4
0
def submit_listens(listens):
    return messybrainz.submit_listens_and_sing_me_a_sweet_song(listens)
Ejemplo n.º 5
0
def _messybrainz_lookup(listens):

    msb_listens = []
    for listen in listens:
        messy_dict = {
            'artist': listen['track_metadata']['artist_name'],
            'title': listen['track_metadata']['track_name'],
        }
        if 'release_name' in listen['track_metadata']:
            messy_dict['release'] = listen['track_metadata']['release_name']

        if 'additional_info' in listen['track_metadata']:
            ai = listen['track_metadata']['additional_info']
            if 'artist_mbids' in ai and type(ai['artist_mbids']) == list:
                messy_dict['artist_mbids'] = ai['artist_mbids'] 
            if 'release_mbid' in ai:
                messy_dict['release_mbid'] = ai['release_mbid'] 
            if 'recording_mbid' in ai:
                messy_dict['recording_mbid'] = ai['recording_mbid'] 
            if 'track_number' in ai:
                messy_dict['track_number'] = ai['track_number'] 
            if 'spotify_id' in ai:
                messy_dict['spotify_id'] = ai['spotify_id'] 
        msb_listens.append(messy_dict)

    try:
        msb_responses = messybrainz.submit_listens_and_sing_me_a_sweet_song(msb_listens)
    except messybrainz.exceptions.BadDataException as e:
        _log_and_raise_400(str(e))
    except messybrainz.exceptions.NoDataFoundException:
        return []
    except messybrainz.exceptions.ErrorAddingException as e:
        raise ServiceUnavailable(str(e)) 

    augmented_listens = []
    for listen, messybrainz_resp in zip(listens, msb_responses['payload']):
        messybrainz_resp = messybrainz_resp['ids']

        if 'additional_info' not in listen['track_metadata']:
            listen['track_metadata']['additional_info'] = {}

        try:
            listen['recording_msid'] = messybrainz_resp['recording_msid']
            listen['track_metadata']['additional_info']['artist_msid'] = messybrainz_resp['artist_msid']
        except KeyError:
            current_app.logger.error("MessyBrainz did not return a proper set of ids")
            raise InternalServerError

        try:
            listen['track_metadata']['additional_info']['release_msid'] = messybrainz_resp['release_msid']
        except KeyError:
            pass

        artist_mbids = messybrainz_resp.get('artist_mbids', [])
        release_mbid = messybrainz_resp.get('release_mbid', None)
        recording_mbid = messybrainz_resp.get('recording_mbid', None)

        if 'artist_mbids'    not in listen['track_metadata']['additional_info'] and \
           'release_mbid'   not in listen['track_metadata']['additional_info'] and \
           'recording_mbid' not in listen['track_metadata']['additional_info']:

            if len(artist_mbids) > 0 and release_mbid and recording_mbid:
                listen['track_metadata']['additional_info']['artist_id'] = artist_mbid
                listen['track_metadata']['additional_info']['release_mbid'] = release_mbid
                listen['track_metadata']['additional_info']['recording_mbid'] = recording_mbid

        augmented_listens.append(listen)

    return augmented_listens