Beispiel #1
0
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,
    )
Beispiel #2
0
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,
    )
Beispiel #3
0
 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)
Beispiel #5
0
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,
    )