def test_artist_cache(self, artist_fetch, cache_set, cache_get): mbid = "f59c5520-5f46-4d2c-b2c4-822eabf53419" expected_key = b"artist_f59c5520-5f46-4d2c-b2c4-822eabf53419" artist = { "id": "f59c5520-5f46-4d2c-b2c4-822eabf53419", "name": "Linkin Park", "sort_name": "Linkin Park", "type": "Group" } artist_fetch.return_value = {mbid: artist} cache_get.return_value = None get_artist_by_id(mbid) # Test that first time data is fetched database is queried cache_get.assert_called_with(expected_key) artist_fetch.assert_called_with([mbid], includes=['artist-rels', 'url-rels']) cache_set.assert_called_with(key=expected_key, val=artist, time=DEFAULT_CACHE_EXPIRATION) cache_get.return_value = artist cache_set.reset_mock() artist_fetch.reset_mock() get_artist_by_id(mbid) # Test that second time data is fetched from cache cache_get.assert_called_with(expected_key) artist_fetch.assert_not_called() cache_set.assert_not_called()
def test_get_by_id(self): self.artist_query.return_value = [artist_linkin_park] artist = mb_artist.get_artist_by_id("f59c5520-5f46-4d2c-b2c4-822eabf53419") self.assertDictEqual(artist, { "id": "f59c5520-5f46-4d2c-b2c4-822eabf53419", "name": "Linkin Park", "sort_name": "Linkin Park", "type": "Group" })
def entity(mbid): """Artist page. Displays release groups (split up into several sections depending on their type), artist information (type, members/member of, external links). """ try: artist = mb_artist.get_artist_by_id(str(mbid)) except mb_exceptions.NoDataFoundException: raise NotFound( gettext( "Sorry, we couldn't find an artist with that MusicBrainz ID.")) # Note that some artists might not have a list of members because they are not a band band_members = _get_band_members(artist) release_type = request.args.get('release_type', default='album') if release_type not in ['album', 'single', 'ep', 'broadcast', 'other']: # supported release types raise BadRequest("Unsupported release type.") page = int(request.args.get('page', default=1)) if page < 1: return redirect(url_for('.reviews')) limit = 20 offset = (page - 1) * limit release_groups, count = mb_release_group.browse_release_groups( artist_id=artist['id'], release_types=[release_type], limit=limit, offset=offset, ) for release_group in release_groups: # TODO(roman): Count reviews instead of fetching them. reviews, review_count = db_review.list_reviews( # pylint: disable=unused-variable entity_id=release_group['id'], entity_type='release_group', sort='published_on', limit=1, ) release_group['review_count'] = review_count return render_template( 'artist/entity.html', id=artist['id'], artist=artist, release_type=release_type, release_groups=release_groups, page=page, limit=limit, count=count, band_members=band_members, )
def entity(mbid): """Artist page. Displays release groups (split up into several sections depending on their type), artist information (type, members/member of, external links). """ try: artist = mb_artist.get_artist_by_id(str(mbid)) except mb_exceptions.NoDataFoundException: raise NotFound(gettext("Sorry, we couldn't find an artist with that MusicBrainz ID.")) # Note that some artists might not have a list of members because they are not a band band_members = _get_band_members(artist) release_type = request.args.get('release_type', default='album') if release_type not in ['album', 'single', 'ep', 'broadcast', 'other']: # supported release types raise BadRequest("Unsupported release type.") page = int(request.args.get('page', default=1)) if page < 1: return redirect(url_for('.reviews')) limit = 20 offset = (page - 1) * limit release_groups, count = mb_release_group.browse_release_groups( artist_id=artist['id'], release_types=[release_type], limit=limit, offset=offset, ) for release_group in release_groups: # TODO(roman): Count reviews instead of fetching them. reviews, review_count = db_review.list_reviews( # pylint: disable=unused-variable entity_id=release_group['id'], entity_type='release_group', sort='published_on', limit=1, ) release_group['review_count'] = review_count return render_template( 'artist/entity.html', id=artist['id'], artist=artist, release_type=release_type, release_groups=release_groups, page=page, limit=limit, count=count, band_members=band_members, )
def get_entity_by_id(id, type='release_group'): """A wrapper to call the correct get_*_by_id function.""" if type == 'release_group': entity = get_release_group_by_id(str(id)) elif type == 'artist': entity = get_artist_by_id(str(id)) elif type == 'label': entity = get_label_by_id(str(id)) elif type == 'place': entity = get_place_by_id(str(id)) elif type == 'event': entity = get_event_by_id(str(id)) elif type == 'work': entity = get_work_by_id(str(id)) return entity
def entity(id): """Artist page. Displays release groups (split up into several sections depending on their type), artist information (type, members/member of, external links). """ try: artist = mb_artist.get_artist_by_id(str(id)) except mb_exceptions.NoDataFoundException: raise NotFound( gettext( "Sorry, we couldn't find an artist with that MusicBrainz ID.")) # Note that some artists might not have a list of members because they are not a band band_members = _get_band_members(artist) artist_reviews_limit = ARTIST_REVIEWS_LIMIT if request.args.get('reviews') == "all": artist_reviews_limit = None my_review = None if current_user.is_authenticated: my_reviews, my_count = db_review.list_reviews( entity_id=artist['id'], entity_type='artist', user_id=current_user.id, ) my_review = my_reviews[0] if my_count else None reviews_offset = 0 reviews, reviews_count = db_review.list_reviews( entity_id=artist['id'], entity_type='artist', sort='popularity', limit=artist_reviews_limit, offset=reviews_offset, ) avg_rating = get_avg_rating(artist['id'], "artist") rating_form = RatingEditForm(entity_id=id, entity_type='artist') rating_form.rating.data = my_review['rating'] if my_review else None release_type = request.args.get('release_type', default='album') if release_type not in ['album', 'single', 'ep', 'broadcast', 'other']: # supported release types raise BadRequest("Unsupported release type.") page = int(request.args.get('page', default=1)) if page < 1: return redirect(url_for('.reviews')) release_groups_offset = (page - 1) * BROWSE_RELEASE_GROUPS_LIMIT release_groups, release_group_count = mb_release_group.browse_release_groups( artist_id=artist['id'], release_types=[release_type], limit=BROWSE_RELEASE_GROUPS_LIMIT, offset=release_groups_offset, ) for release_group in release_groups: # TODO(roman): Count reviews instead of fetching them. _, release_group_review_count = db_review.list_reviews( # pylint: disable=unused-variable entity_id=release_group['id'], entity_type='release_group', sort='published_on', limit=1, ) release_group['review_count'] = release_group_review_count return render_template( 'artist/entity.html', id=artist['id'], artist=artist, release_type=release_type, release_groups=release_groups, page=page, reviews=reviews, reviews_limit=artist_reviews_limit, reviews_count=reviews_count, avg_rating=avg_rating, rating_form=rating_form, release_groups_limit=BROWSE_RELEASE_GROUPS_LIMIT, release_group_count=release_group_count, band_members=band_members, )