예제 #1
0
def entity(id):
    id = str(id)
    try:
        place = mb_place.get_place_by_id(id)
    except mb_exceptions.NoDataFoundException:
        raise NotFound(gettext("Sorry, we couldn't find a place with that MusicBrainz ID."))

    if current_user.is_authenticated:
        my_reviews, _ = db_review.list_reviews(
            entity_id=place['id'],
            entity_type='place',
            user_id=current_user.id
        )
        my_review = my_reviews[0] if my_reviews else None
    else:
        my_review = None

    rating_form = RatingEditForm(entity_id=id, entity_type='place')
    rating_form.rating.data = my_review['rating'] if my_review else None

    limit = int(request.args.get('limit', default=10))
    offset = int(request.args.get('offset', default=0))
    reviews, count = db_review.list_reviews(
        entity_id=place['id'],
        entity_type='place',
        sort='popularity',
        limit=limit,
        offset=offset,
    )
    avg_rating = get_avg_rating(place['id'], "place")

    return render_template('place/entity.html', id=place['id'], place=place, reviews=reviews,
                           rating_form=rating_form, my_review=my_review, limit=limit, offset=offset,
                           count=count, avg_rating=avg_rating, current_user=current_user)
예제 #2
0
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 == 'place':
        entity = get_place_by_id(str(id))
    elif type == 'event':
        entity = get_event_by_id(str(id))
    return entity
예제 #3
0
 def test_unknown_place(self):
     self.place_query.return_value = []
     mb_utils.reviewed_entities = MagicMock()
     mb_utils.reviewed_entities.return_value = [
         'd71ffe38-5eaf-426b-9a2e-e1f21bc846df'
     ]
     place = mb_place.get_place_by_id(
         'd71ffe38-5eaf-426b-9a2e-e1f21bc846df')
     self.assertEqual(place['name'], '[Unknown Place]')
예제 #4
0
    def test_place_cache(self, place_fetch, cache_set, cache_get):
        mbid = "d71ffe38-5eaf-426b-9a2e-e1f21bc84609"
        expected_key = b"place_d71ffe38-5eaf-426b-9a2e-e1f21bc84609"
        place = {
            "id": "d71ffe38-5eaf-426b-9a2e-e1f21bc84609",
            "name": "Suisto",
            "coordinates": {
                'latitude': 60.997758,
                'longitude': 24.477142
            },
            "area": {
                "id": "4479c385-74d8-4a2b-bdab-f48d1e6969ba",
                "name": "Hämeenlinna",
            }
        }
        place_fetch.return_value = {mbid: place}

        cache_get.return_value = None
        get_place_by_id(mbid)

        # Test that first time data is fetched database is queried
        cache_get.assert_called_with(expected_key)
        place_fetch.assert_called_with([mbid],
                                       includes=[
                                           'artist-rels', 'place-rels',
                                           'release-group-rels', 'url-rels'
                                       ],
                                       unknown_entities_for_missing=True)
        cache_set.assert_called_with(key=expected_key,
                                     val=place,
                                     time=DEFAULT_CACHE_EXPIRATION)

        cache_get.return_value = place
        cache_set.reset_mock()
        place_fetch.reset_mock()
        get_place_by_id(mbid)

        # Test that second time data is fetched from cache
        cache_get.assert_called_with(expected_key)
        place_fetch.assert_not_called()
        cache_set.assert_not_called()
예제 #5
0
 def test_get_by_id(self):
     self.place_query.return_value = [place_suisto]
     place = mb_place.get_place_by_id('d71ffe38-5eaf-426b-9a2e-e1f21bc84609')
     self.assertEqual(place['name'], 'Suisto')
     self.assertEqual(place['type'], 'Venue')
     self.assertDictEqual(place['coordinates'], {
         'latitude': 60.997758,
         'longitude': 24.477142
     })
     self.assertDictEqual(place['area'], {
         'id': '4479c385-74d8-4a2b-bdab-f48d1e6969ba',
         'name': 'Hämeenlinna',
     })
예제 #6
0
 def test_get_by_id(self):
     self.place_query.return_value = [place_suisto]
     place = mb_place.get_place_by_id(
         'd71ffe38-5eaf-426b-9a2e-e1f21bc84609')
     self.assertEqual(place['name'], 'Suisto')
     self.assertEqual(place['type'], 'Venue')
     self.assertDictEqual(place['coordinates'], {
         'latitude': 60.997758,
         'longitude': 24.477142
     })
     self.assertDictEqual(place['area'], {
         'id': '4479c385-74d8-4a2b-bdab-f48d1e6969ba',
         'name': 'Hämeenlinna',
     })
예제 #7
0
 def test_unknown_place(self):
     self.place_query.return_value = []
     mb_utils.reviewed_entities = MagicMock()
     mb_utils.reviewed_entities.return_value = ['d71ffe38-5eaf-426b-9a2e-e1f21bc846df']
     place = mb_place.get_place_by_id('d71ffe38-5eaf-426b-9a2e-e1f21bc846df')
     self.assertEqual(place['name'], '[Unknown Place]')