-
-
Notifications
You must be signed in to change notification settings - Fork 61
/
place.py
50 lines (41 loc) · 2.03 KB
/
place.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from mbdata import models
from mbdata.utils import get_something_by_gid
from critiquebrainz.frontend.external.musicbrainz_db import mb_session
from critiquebrainz.frontend.external.musicbrainz_db.includes import check_includes
import critiquebrainz.frontend.external.musicbrainz_db.exceptions as mb_exceptions
from critiquebrainz.frontend.external.musicbrainz_db.serialize import to_dict_places
from critiquebrainz.frontend.external.musicbrainz_db.helpers import entity_relation_helper
from brainzutils import cache
DEFAULT_CACHE_EXPIRATION = 12 * 60 * 60 # seconds (12 hours)
THREAD_POOL_PROCESSES = 10
def get_place_by_id(mbid):
"""Get place with the MusicBrainz ID.
Args:
mbid (uuid): MBID(gid) of the place.
Returns:
Dictionary containing the place information.
"""
key = cache.gen_key(mbid)
place = cache.get(key)
if not place:
place = _get_place_by_id(
mbid, includes=['artist-rels', 'place-rels', 'release-group-rels', 'url-rels'],
)
cache.set(key=key, val=place, time=DEFAULT_CACHE_EXPIRATION)
return place
def _get_place_by_id(place_id, includes=[]):
includes_data = {}
check_includes('place', includes)
with mb_session() as db:
query = db.query(models.Place)
place = get_something_by_gid(query, models.PlaceGIDRedirect, place_id)
if not place:
raise mb_exceptions.NoDataFoundException("Couldn't find a place with id: {place_id}".format(place_id=place_id))
if 'artist-rels' in includes:
includes_data.setdefault('relationship_objs', {})['artist-rels'] = entity_relation_helper(db, 'artist', 'place', place.id)
if 'place-rels' in includes:
includes_data.setdefault('relationship_objs', {})['place-rels'] = entity_relation_helper(db, 'place', 'place', place.id)
if 'url-rels' in includes:
includes_data.setdefault('relationship_objs', {})['url-rels'] = entity_relation_helper(db, 'url', 'place', place.id)
place = to_dict_places(place, includes_data)
return place