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 test_fetch_browse_release_groups(self): mb_release_group._browse_release_groups_query = MagicMock() mock_query = mb_release_group._browse_release_groups_query.return_value mock_query.count.return_value = 2 mock_query.order_by.return_value.limit.return_value.offset.\ return_value.all.return_value = [releasegroup_collision_course, releasegroup_numb_encore] release_groups = mb_release_group.browse_release_groups( artist_id='f59c5520-5f46-4d2c-b2c4-822eabf53419', release_types=['Single', 'EP'], ) self.assertListEqual(release_groups[0], [{ 'id': '8ef859e3-feb2-4dd1-93da-22b91280d768', 'title': 'Collision Course', 'first-release-year': 2004, }, { 'id': '7c1014eb-454c-3867-8854-3c95d265f8de', 'title': 'Numb/Encore', 'first-release-year': 2004, }]) self.assertEqual(release_groups[1], 2)
def test_fetch_browse_release_groups(self): mb_release_group._browse_release_groups_query = MagicMock() mock_query = mb_release_group._browse_release_groups_query.return_value mock_query.count.return_value = 2 mock_query.order_by.return_value.limit.return_value.offset.\ return_value.all.return_value = [releasegroup_collision_course, releasegroup_numb_encore] release_groups = mb_release_group.browse_release_groups( artist_id='f59c5520-5f46-4d2c-b2c4-822eabf53419', release_types=['Single', 'EP'], ) self.assertListEqual(release_groups[0], [ { 'id': '8ef859e3-feb2-4dd1-93da-22b91280d768', 'title': 'Collision Course', 'first-release-year': 2004, }, { 'id': '7c1014eb-454c-3867-8854-3c95d265f8de', 'title': 'Numb/Encore', 'first-release-year': 2004, } ]) self.assertEqual(release_groups[1], 2)
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, )