def test_get_album(self): # results are in cache cache.get = MagicMock(return_value=self.all_albums) self.assertDictEqual(spotify.get_album("test-spotify-id"), self.all_albums) # results are not in cache cache.get = MagicMock(return_value=None) spotify._get = MagicMock(return_value=self.all_albums) self.assertDictEqual(spotify.get_album("test-spotify-id"), self.all_albums)
def test_get_album(self, cache_get, spotify_get): # results are in cache cache_get.return_value = self.all_albums self.assertDictEqual(spotify.get_album("test-spotify-id"), self.all_albums) # results are not in cache cache_get.reset_mock() cache_get.return_value = None spotify_get.return_value = self.all_albums self.assertDictEqual(spotify.get_album("test-spotify-id"), self.all_albums)
def spotify_confirm(): """Confirmation page for adding new Spotify mapping.""" release_group_id = request.args.get('release_group_id') if not release_group_id: raise BadRequest("Didn't provide `release_group_id`!") release_group = musicbrainz.get_release_group_by_id(release_group_id) if not release_group: flash(gettext("Only existing release groups can be mapped to Spotify!"), 'error') return redirect(url_for('search.index')) spotify_ref = request.args.get('spotify_ref', default=None) if not spotify_ref: flash(gettext("You need to select an album from Spotify!"), 'error') return redirect(url_for('.spotify', release_group_id=release_group_id)) spotify_id = parse_spotify_id(spotify_ref) if not spotify_id: flash(gettext("You need to specify a correct link to this album on Spotify!"), 'error') return redirect(url_for('.spotify', release_group_id=release_group_id)) album = spotify_api.get_album(spotify_id) if not album or album.get('error'): flash(gettext("You need to specify existing album from Spotify!"), 'error') return redirect(url_for('.spotify', release_group_id=release_group_id)) if request.method == 'POST': # TODO(roman): Check values that are returned by add_mapping (also take a look at related JS). mbspotify.add_mapping(release_group_id, 'spotify:album:%s' % spotify_id, current_user.id) flash(gettext("Spotify mapping has been added!"), 'success') return redirect(url_for('.spotify_list', release_group_id=release_group_id)) return render_template('mapping/confirm.html', release_group=release_group, spotify_album=album)
def spotify_report(): """Endpoint for reporting incorrect Spotify mappings. Shows confirmation page before submitting report to mbspotify. """ release_group_id = request.args.get('release_group_id') spotify_id = request.args.get('spotify_id') spotify_uri = "spotify:album:" + spotify_id # Checking if release group exists release_group = musicbrainz.get_release_group_by_id(release_group_id) if not release_group: flash(gettext("Can't find release group with that ID!"), 'error') return redirect(url_for('.spotify_list', release_group_id=release_group_id)) # Checking if release group is mapped to Spotify spotify_mappings = mbspotify.mappings(str(release_group_id)) if not (spotify_uri in spotify_mappings): flash(gettext("This album is not mapped to Spotify yet!"), 'error') return redirect(url_for('.spotify_list', release_group_id=release_group_id)) if request.method == 'POST': mbspotify.vote(release_group_id, spotify_uri, current_user.id) flash(gettext("Incorrect Spotify mapping has been reported. Thank you!"), 'success') return redirect(url_for('.spotify_list', release_group_id=release_group_id)) else: album = spotify_api.get_album(spotify_id) if not album or album.get('error'): flash(gettext("You need to specify existing album from Spotify!"), 'error') return redirect(url_for('.spotify_list', release_group_id=release_group_id)) return render_template('mapping/report.html', release_group=release_group, spotify_album=album)
def spotify_confirm(): """Confirmation page for adding new Spotify mapping.""" release_group_id = request.args.get('release_group_id') if not release_group_id: raise BadRequest("Didn't provide `release_group_id`!") try: release_group = mb_release_group.get_release_group_by_id( release_group_id) except mb_exceptions.NoDataFoundException: flash.error( gettext("Only existing release groups can be mapped to Spotify!")) return redirect(url_for('search.index')) spotify_ref = request.args.get('spotify_ref', default=None) if not spotify_ref: flash.error(gettext("You need to select an album from Spotify!")) return redirect( url_for('.spotify_add', release_group_id=release_group_id)) try: spotify_id = parse_spotify_id(spotify_ref) except UnsupportedSpotifyReferenceTypeException: flash.error( gettext( "You need to specify a correct link to this album on Spotify!") ) return redirect( url_for('.spotify_add', release_group_id=release_group_id)) except Exception: raise BadRequest("Could not parse Spotify ID!") try: album = spotify_api.get_album(spotify_id) except ExternalServiceException: flash.error( gettext("You need to specify existing album from Spotify!")) return redirect( url_for('.spotify_add', release_group_id=release_group_id)) if request.method == 'POST': # TODO(roman): Check values that are returned by add_mapping (also take a look at related JS). res, error = mbspotify.add_mapping(release_group_id, 'spotify:album:%s' % spotify_id, current_user.id) if res: flash.success(gettext("Spotify mapping has been added!")) else: flash.error(gettext("Could not add Spotify mapping!")) current_app.logger.error( "Failed to create new Spotify mapping! Error: {}".format( error)) return redirect( url_for('.spotify_list', release_group_id=release_group_id)) return render_template('mapping/confirm.html', release_group=release_group, spotify_album=album)
def spotify_report(): """Endpoint for reporting incorrect Spotify mappings. Shows confirmation page before submitting report to mbspotify. """ release_group_id = request.args.get('release_group_id') if not release_group_id: raise BadRequest("Didn't provide `release_group_id`!") spotify_id = request.args.get('spotify_id') if not spotify_id: raise BadRequest("Didn't provide `spotify_id`!") spotify_uri = "spotify:album:" + spotify_id # Checking if release group exists try: release_group = mb_release_group.get_release_group_by_id( release_group_id) except mb_exceptions.NoDataFoundException: raise NotFound("Can't find release group with a specified ID.") # Checking if release group is mapped to Spotify spotify_mappings = mbspotify.mappings(str(release_group_id)) if spotify_uri not in spotify_mappings: flash.error(gettext("This album is not mapped to Spotify yet!")) return redirect( url_for('.spotify_list', release_group_id=release_group_id)) if request.method == 'POST': res, error = mbspotify.vote(release_group_id, spotify_uri, current_user.id) if res: flash.success( gettext( "Incorrect Spotify mapping has been reported. Thank you!")) else: flash.error(gettext("Could not report incorrect Spotify mapping!")) current_app.logger.error( "Failed to report incorrect Spotify mapping! Error: {}".format( error)) return redirect( url_for('.spotify_list', release_group_id=release_group_id)) try: album = spotify_api.get_album(spotify_id) except ExternalServiceException: flash.error( gettext("You need to specify existing album from Spotify!")) return redirect( url_for('.spotify_list', release_group_id=release_group_id)) return render_template('mapping/report.html', release_group=release_group, spotify_album=album)
def spotify_report(): """Endpoint for reporting incorrect Spotify mappings. Shows confirmation page before submitting report to mbspotify. """ release_group_id = request.args.get('release_group_id') spotify_id = request.args.get('spotify_id') spotify_uri = "spotify:album:" + spotify_id # Checking if release group exists try: release_group = mb_release_group.get_release_group_by_id( release_group_id) except mb_exceptions.NoDataFoundException: flash.error(gettext("Can't find release group with that ID!")) return redirect( url_for('.spotify_list', release_group_id=release_group_id)) # Checking if release group is mapped to Spotify spotify_mappings = mbspotify.mappings(str(release_group_id)) if spotify_uri not in spotify_mappings: flash.error(gettext("This album is not mapped to Spotify yet!")) return redirect( url_for('.spotify_list', release_group_id=release_group_id)) if request.method == 'POST': mbspotify.vote(release_group_id, spotify_uri, current_user.id) flash.success( gettext("Incorrect Spotify mapping has been reported. Thank you!")) return redirect( url_for('.spotify_list', release_group_id=release_group_id)) try: album = spotify_api.get_album(spotify_id) except ExternalServiceException: flash.error( gettext("You need to specify existing album from Spotify!")) return redirect( url_for('.spotify_list', release_group_id=release_group_id)) return render_template('mapping/report.html', release_group=release_group, spotify_album=album)
def spotify_report(): """Endpoint for reporting incorrect Spotify mappings. Shows confirmation page before submitting report to mbspotify. """ release_group_id = request.args.get('release_group_id') if not release_group_id: raise BadRequest("Didn't provide `release_group_id`!") spotify_id = request.args.get('spotify_id') if not spotify_id: raise BadRequest("Didn't provide `spotify_id`!") spotify_uri = "spotify:album:" + spotify_id # Checking if release group exists try: release_group = mb_release_group.get_release_group_by_id(release_group_id) except mb_exceptions.NoDataFoundException: raise NotFound("Can't find release group with a specified ID.") # Checking if release group is mapped to Spotify spotify_mappings = mbspotify.mappings(str(release_group_id)) if spotify_uri not in spotify_mappings: flash.error(gettext("This album is not mapped to Spotify yet!")) return redirect(url_for('.spotify_list', release_group_id=release_group_id)) if request.method == 'POST': res, error = mbspotify.vote(release_group_id, spotify_uri, current_user.id) if res: flash.success(gettext("Incorrect Spotify mapping has been reported. Thank you!")) else: flash.error(gettext("Could not report incorrect Spotify mapping!")) current_app.logger.error("Failed to report incorrect Spotify mapping! Error: {}".format(error)) return redirect(url_for('.spotify_list', release_group_id=release_group_id)) try: album = spotify_api.get_album(spotify_id) except ExternalServiceException: flash.error(gettext("You need to specify existing album from Spotify!")) return redirect(url_for('.spotify_list', release_group_id=release_group_id)) return render_template('mapping/report.html', release_group=release_group, spotify_album=album)
def spotify_confirm(): """Confirmation page for adding new Spotify mapping.""" release_group_id = request.args.get('release_group_id') if not release_group_id: raise BadRequest("Didn't provide `release_group_id`!") release_group = musicbrainz.get_release_group_by_id(release_group_id) if not release_group: flash.error( gettext("Only existing release groups can be mapped to Spotify!")) return redirect(url_for('search.index')) spotify_ref = request.args.get('spotify_ref', default=None) if not spotify_ref: flash.error(gettext("You need to select an album from Spotify!")) return redirect(url_for('.spotify', release_group_id=release_group_id)) spotify_id = parse_spotify_id(spotify_ref) if not spotify_id: flash.error( gettext( "You need to specify a correct link to this album on Spotify!") ) return redirect(url_for('.spotify', release_group_id=release_group_id)) try: album = spotify_api.get_album(spotify_id) except ExternalServiceException: flash.error( gettext("You need to specify existing album from Spotify!")) return redirect(url_for('.spotify', release_group_id=release_group_id)) if request.method == 'POST': # TODO(roman): Check values that are returned by add_mapping (also take a look at related JS). mbspotify.add_mapping(release_group_id, 'spotify:album:%s' % spotify_id, current_user.id) flash.success(gettext("Spotify mapping has been added!")) return redirect( url_for('.spotify_list', release_group_id=release_group_id)) return render_template('mapping/confirm.html', release_group=release_group, spotify_album=album)
def spotify_report(): """Endpoint for reporting incorrect Spotify mappings. Shows confirmation page before submitting report to mbspotify. """ release_group_id = request.args.get('release_group_id') spotify_id = request.args.get('spotify_id') spotify_uri = "spotify:album:" + spotify_id # Checking if release group exists release_group = musicbrainz.get_release_group_by_id(release_group_id) if not release_group: flash(gettext("Can't find release group with that ID!"), 'error') return redirect( url_for('.spotify_list', release_group_id=release_group_id)) # Checking if release group is mapped to Spotify spotify_mappings = mbspotify.mappings(str(release_group_id)) if not (spotify_uri in spotify_mappings): flash(gettext("This album is not mapped to Spotify yet!"), 'error') return redirect( url_for('.spotify_list', release_group_id=release_group_id)) if request.method == 'POST': mbspotify.vote(release_group_id, spotify_uri, current_user.id) flash( gettext("Incorrect Spotify mapping has been reported. Thank you!"), 'success') return redirect( url_for('.spotify_list', release_group_id=release_group_id)) else: album = spotify_api.get_album(spotify_id) if not album or album.get('error'): flash(gettext("You need to specify existing album from Spotify!"), 'error') return redirect( url_for('.spotify_list', release_group_id=release_group_id)) return render_template('mapping/report.html', release_group=release_group, spotify_album=album)
def spotify_confirm(): """Confirmation page for adding new Spotify mapping.""" release_group_id = request.args.get('release_group_id') if not release_group_id: raise BadRequest("Didn't provide `release_group_id`!") try: release_group = mb_release_group.get_release_group_by_id(release_group_id) except mb_exceptions.NoDataFoundException: flash.error(gettext("Only existing release groups can be mapped to Spotify!")) return redirect(url_for('search.index')) spotify_ref = request.args.get('spotify_ref', default=None) if not spotify_ref: flash.error(gettext("You need to select an album from Spotify!")) return redirect(url_for('.spotify_add', release_group_id=release_group_id)) try: spotify_id = parse_spotify_id(spotify_ref) except UnsupportedSpotifyReferenceTypeException: flash.error(gettext("You need to specify a correct link to this album on Spotify!")) return redirect(url_for('.spotify_add', release_group_id=release_group_id)) except Exception: raise BadRequest("Could not parse Spotify ID!") try: album = spotify_api.get_album(spotify_id) except ExternalServiceException: flash.error(gettext("You need to specify existing album from Spotify!")) return redirect(url_for('.spotify_add', release_group_id=release_group_id)) if request.method == 'POST': # TODO(roman): Check values that are returned by add_mapping (also take a look at related JS). res, error = mbspotify.add_mapping(release_group_id, 'spotify:album:%s' % spotify_id, current_user.id) if res: flash.success(gettext("Spotify mapping has been added!")) else: flash.error(gettext("Could not add Spotify mapping!")) current_app.logger.error("Failed to create new Spotify mapping! Error: {}".format(error)) return redirect(url_for('.spotify_list', release_group_id=release_group_id)) return render_template('mapping/confirm.html', release_group=release_group, spotify_album=album)
def test_album(self): self.assertDictEqual( spotify.get_album('random-spotify-id'), dict(url="https://api.spotify.com/v1/albums/random-spotify-id"))