Skip to content

Commit

Permalink
Merge branch 'master' into merge-branch
Browse files Browse the repository at this point in the history
  • Loading branch information
paramsingh committed May 27, 2019
2 parents 3406f3c + deca95b commit d8233ac
Show file tree
Hide file tree
Showing 10 changed files with 68 additions and 11 deletions.
5 changes: 3 additions & 2 deletions critiquebrainz/frontend/external/musicbrainz_db/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,20 +59,21 @@ def _relationship_link_helper(relation, query, source_attr, target_attr, target_
setdefault(relation_type, []).append(link)


def get_tags(*, db, entity_model, tag_model, entity_ids):
def get_tags(*, db, entity_model, tag_model, foreign_tag_id, entity_ids):
"""Get tags associated with entities.
Args:
db (Session object): Session object.
entity_model (mbdata.models): Model of the entity.
tag_model (mbdata.models): Tag of the model.
foreign_tag_id (tag_model.foreign_key): Foreign ID that joins the tag model and entity model
entity_ids (list): IDs of the entity whose tags are to be fetched
Returns:
List of tuples containing the entity_ids and the list of associated tags.
"""
tags = db.query(entity_model.id, func.array_agg(Tag.name)).\
join(tag_model).\
join(tag_model, entity_model.id == foreign_tag_id).\
join(Tag).\
filter(entity_model.id.in_(entity_ids)).\
group_by(entity_model.id).\
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ def fetch_multiple_release_groups(mbids, *, includes=None):
db=db,
entity_model=models.ReleaseGroup,
tag_model=models.ReleaseGroupTag,
foreign_tag_id=models.ReleaseGroupTag.release_group_id,
entity_ids=release_group_ids,
)
for release_group_id, tags in release_group_tags:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,44 @@
from collections import defaultdict
from unittest import TestCase
from unittest.mock import MagicMock
from mbdata import models
from critiquebrainz.frontend.external.musicbrainz_db.serialize import to_dict_relationships
from critiquebrainz.frontend.external.musicbrainz_db.helpers import get_relationship_info
import critiquebrainz.frontend.external.musicbrainz_db as mb
from critiquebrainz.frontend.external.musicbrainz_db.test_data import linkplaceurl_1, linkplaceurl_2, place_suisto
from critiquebrainz.frontend.external.musicbrainz_db.helpers import get_tags


class HelpersTestCase(TestCase):

def setUp(self):
mb.mb_session = MagicMock()
self.mock_db = mb.mb_session.return_value.__enter__.return_value
self.tags_query = self.mock_db.query.return_value.join.return_value.\
join.return_value.filter.return_value.group_by.return_value.all
self.relationships_query = self.mock_db.query.return_value.options.return_value.\
options.return_value.filter.return_value.options

def test_get_tags(self):
data = defaultdict(dict)
self.tags_query.return_value = [(1820974, ['hip hop', 'hip-hop/rap'])]
release_group_tags = get_tags(
db=self.mock_db,
entity_model=models.ReleaseGroup,
tag_model=models.ReleaseGroupTag,
foreign_tag_id=models.ReleaseGroupTag.release_group_id,
entity_ids=['1820974'],
)
for release_group_id, tags in release_group_tags:
data[release_group_id]['tags'] = tags
expected_data = {
1820974: {
'tags': ['hip hop', 'hip-hop/rap']
}
}
data = dict(data)
self.assertDictEqual(data, expected_data)

def test_get_relationship_info(self):
data = {}
self.relationships_query.return_value = [linkplaceurl_1, linkplaceurl_2]
Expand Down
9 changes: 8 additions & 1 deletion critiquebrainz/frontend/templates/event/entity.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{% extends 'base.html' %}
{% from 'macros.html' import show_avg_rating, entity_rate_form with context %}
{% from 'macros.html' import show_avg_rating, entity_rate_form, show_external_reviews with context %}

{% block title %}{{ event.name }} - CritiqueBrainz{% endblock %}

Expand Down Expand Up @@ -128,6 +128,13 @@ <h4>{{ _('Event information') }}</h4>
{% endfor %}
{% endif %}

{% if external_reviews %}
<b>{{ _('External reviews') }}</b>
<ul class="list-unstyled external-links">
{{ show_external_reviews(external_reviews) }}
</ul>
{% endif %}

<div class="external-links">
<hr>
<div class="favicon-container"><img src="{{ get_static_path('favicons/musicbrainz-16.svg') }}" /></div>
Expand Down
10 changes: 10 additions & 0 deletions critiquebrainz/frontend/templates/macros.html
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,16 @@
</div>
{%- endmacro %}

{% macro show_external_reviews(reviews) %}
{% if reviews %}
{% for review in reviews %}
<li class="clearfix">
<a href="{{ review.url.url }}">{{ review.url.url }}</a>
</li>
{% endfor %}
{% endif %}
{% endmacro %}

{% macro show_tags(tags) %}
{% if tags %}
{% for tag in tags %}
Expand Down
8 changes: 7 additions & 1 deletion critiquebrainz/frontend/templates/release_group/entity.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{% extends 'base.html' %}
{% from 'macros.html' import cover_art, show_embedded_player, show_tags, show_avg_rating, entity_rate_form with context %}
{% from 'macros.html' import cover_art, show_embedded_player, show_tags, show_avg_rating, entity_rate_form, show_external_reviews with context %}

{% block title %}
{{ _('Release group "%(title)s" by %(artist)s', title=release_group.title, artist=release_group['artist-credit-phrase']) }}
Expand Down Expand Up @@ -148,6 +148,12 @@ <h4>{{ _('Release group information') }}</h4>
<p>
{% if release_group['first-release-date'] %}{{ _('First release in %(year)s', year=release_group['first-release-date'][:4]) }}{% endif %}
</p>
{% if external_reviews %}
<b>{{ _('External reviews') }}</b>
<ul class="list-unstyled external-links">
{{ show_external_reviews(external_reviews) }}
</ul>
{% endif %}
{% if release_group['external-urls'] %}
<b>{{ _('External links') }}</b>
<ul class="list-unstyled external-links">
Expand Down
9 changes: 7 additions & 2 deletions critiquebrainz/frontend/views/event.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@ def entity(id):
except mb_exceptions.NoDataFoundException:
raise NotFound(gettext("Sorry, we couldn't find an event with that MusicBrainz ID."))

if 'url-rels' in event:
external_reviews = list(filter(lambda rel: rel['type'] == 'review', event['url-rels']))
else:
external_reviews = []

if 'artist-rels' in event and event['artist-rels']:
artists_sorted = sorted(event['artist-rels'], key=itemgetter('type'))
event['artists_grouped'] = groupby(artists_sorted, itemgetter('type'))
Expand Down Expand Up @@ -69,5 +74,5 @@ def entity(id):
avg_rating = get_avg_rating(event['id'], "event")

return render_template('event/entity.html', id=event['id'], event=event, reviews=reviews,
rating_form=rating_form, my_review=my_review, limit=limit, offset=offset,
count=count, avg_rating=avg_rating, current_user=current_user)
rating_form=rating_form, my_review=my_review, external_reviews=external_reviews,
limit=limit, offset=offset, count=count, avg_rating=avg_rating, current_user=current_user)
8 changes: 6 additions & 2 deletions critiquebrainz/frontend/views/release_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ def entity(id):
except mb_exceptions.NoDataFoundException:
raise NotFound(gettext("Sorry, we couldn't find a release group with that MusicBrainz ID."))

if 'url-rels' in release_group:
external_reviews = list(filter(lambda rel: rel['type'] == 'review', release_group['url-rels']))
else:
external_reviews = []
if 'tag-list' in release_group:
tags = release_group['tag-list']
else:
Expand Down Expand Up @@ -79,5 +83,5 @@ def entity(id):

return render_template('release_group/entity.html', id=release_group['id'], release_group=release_group, reviews=reviews,
release=release, my_review=my_review, spotify_mappings=spotify_mappings, tags=tags,
soundcloud_url=soundcloud_url, limit=limit, offset=offset, count=count, avg_rating=avg_rating,
rating_form=rating_form, current_user=current_user)
soundcloud_url=soundcloud_url, external_reviews=external_reviews, limit=limit, offset=offset,
count=count, avg_rating=avg_rating, rating_form=rating_form, current_user=current_user)
2 changes: 1 addition & 1 deletion docker/docker-compose.dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ services:
image: redis:4.0-alpine

musicbrainz_db:
image: metabrainz/musicbrainz-test-database:schema-change-2017-q2
image: metabrainz/musicbrainz-test-database:beta
volumes:
- ../data/mbdata:/var/lib/postgresql/data/pgdata:z
environment:
Expand Down
3 changes: 1 addition & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
git+https://github.com/metabrainz/brainzutils-python.git@v1.9.0
git+https://github.com/metabrainz/brainzutils-python.git@v1.10.1
beautifulsoup4==4.6.0
coverage==4.4.1
click==6.7
Expand All @@ -8,7 +8,6 @@ Flask-SQLAlchemy==2.2
Flask-Testing==0.6.2
Flask-WTF==0.14.2
Markdown==2.6.8
mbdata==2017.6.2
musicbrainzngs==0.6
pytest==3.2.0
pytest-cov==2.5.1
Expand Down

0 comments on commit d8233ac

Please sign in to comment.