Skip to content

Commit

Permalink
Merge pull request #32 from spellew/suppress-get-entities-exception
Browse files Browse the repository at this point in the history
Added flags to suppress exceptions from get_entities
  • Loading branch information
paramsingh authored Jul 31, 2019
2 parents c8fc605 + cb49419 commit 2ed35d8
Show file tree
Hide file tree
Showing 24 changed files with 296 additions and 60 deletions.
6 changes: 4 additions & 2 deletions brainzutils/musicbrainz_db/artist.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from brainzutils.musicbrainz_db.includes import check_includes


def get_artist_by_id(mbid, includes=None):
def get_artist_by_id(mbid, includes=None, unknown_entities_for_missing=False):
"""Get artist with MusicBrainz ID.
Args:
mbid (uuid): MBID(gid) of the artist.
Expand All @@ -21,10 +21,11 @@ def get_artist_by_id(mbid, includes=None):
return fetch_multiple_artists(
[mbid],
includes=includes,
unknown_entities_for_missing=unknown_entities_for_missing,
).get(mbid)


def fetch_multiple_artists(mbids, includes=None):
def fetch_multiple_artists(mbids, includes=None, unknown_entities_for_missing=False):
"""Get info related to multiple artists using their MusicBrainz IDs.
Args:
mbids (list): List of MBIDs of artists.
Expand All @@ -43,6 +44,7 @@ def fetch_multiple_artists(mbids, includes=None):
query=query,
entity_type='artist',
mbids=mbids,
unknown_entities_for_missing=unknown_entities_for_missing,
)
artist_ids = [artist.id for artist in artists.values()]

Expand Down
6 changes: 4 additions & 2 deletions brainzutils/musicbrainz_db/editor.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from brainzutils.musicbrainz_db.includes import check_includes


def get_editor_by_id(editor_id, includes=None):
def get_editor_by_id(editor_id, includes=None, unknown_entities_for_missing=False):
"""Get editor with editor ID.
Args:
editor_id (int): ID of the editor.
Expand All @@ -20,10 +20,11 @@ def get_editor_by_id(editor_id, includes=None):
return fetch_multiple_editors(
[editor_id],
includes=includes,
unknown_entities_for_missing=unknown_entities_for_missing,
).get(editor_id)


def fetch_multiple_editors(editor_ids, includes=None):
def fetch_multiple_editors(editor_ids, includes=None, unknown_entities_for_missing=False):
"""Get info related to multiple editors using their editor IDs.
Args:
editor_ids (list): List of IDs of editors.
Expand All @@ -42,6 +43,7 @@ def fetch_multiple_editors(editor_ids, includes=None):
query=query,
entity_type='editor',
ids=editor_ids,
unknown_entities_for_missing=unknown_entities_for_missing,
)
editor_ids = [editor.id for editor in editors.values()]
editors = {editor_id: serialize_editor(editors[editor_id], includes_data) for editor_id in editor_ids}
Expand Down
6 changes: 4 additions & 2 deletions brainzutils/musicbrainz_db/event.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from brainzutils.musicbrainz_db.helpers import get_relationship_info


def get_event_by_id(mbid, includes=None):
def get_event_by_id(mbid, includes=None, unknown_entities_for_missing=False):
"""Get event with the MusicBrainz ID.
Args:
Expand All @@ -21,10 +21,11 @@ def get_event_by_id(mbid, includes=None):
return fetch_multiple_events(
[mbid],
includes=includes,
unknown_entities_for_missing=unknown_entities_for_missing,
).get(mbid)


def fetch_multiple_events(mbids, includes=None):
def fetch_multiple_events(mbids, includes=None, unknown_entities_for_missing=False):
"""Get info related to multiple events using their MusicBrainz IDs.
Args:
Expand All @@ -44,6 +45,7 @@ def fetch_multiple_events(mbids, includes=None):
query=query,
entity_type='event',
mbids=mbids,
unknown_entities_for_missing=unknown_entities_for_missing,
)
event_ids = [event.id for event in events.values()]

Expand Down
5 changes: 5 additions & 0 deletions brainzutils/musicbrainz_db/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ class MBDatabaseException(Exception):
pass


class InvalidTypeError(MBDatabaseException):
"""Exception related to wrong type in present functions"""
pass


class InvalidIncludeError(MBDatabaseException):
"""Exception related to wrong includes in present functions"""
pass
Expand Down
2 changes: 1 addition & 1 deletion brainzutils/musicbrainz_db/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from mbdata.models import Tag
from sqlalchemy.orm import joinedload
from sqlalchemy import func
from brainzutils.musicbrainz_db.utils import ENTITY_MODELS
from brainzutils.musicbrainz_db.models import ENTITY_MODELS


def get_relationship_info(db, target_type, source_type, source_entity_ids, includes_data):
Expand Down
6 changes: 4 additions & 2 deletions brainzutils/musicbrainz_db/label.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from brainzutils.musicbrainz_db.helpers import get_relationship_info


def get_label_by_id(mbid, includes=None):
def get_label_by_id(mbid, includes=None, unknown_entities_for_missing=False):
"""Get label with the MusicBrainz ID.
Args:
Expand All @@ -22,10 +22,11 @@ def get_label_by_id(mbid, includes=None):
return fetch_multiple_labels(
[mbid],
includes=includes,
unknown_entities_for_missing=unknown_entities_for_missing,
).get(mbid)


def fetch_multiple_labels(mbids, includes=None):
def fetch_multiple_labels(mbids, includes=None, unknown_entities_for_missing=False):
"""Get info related to multiple labels using their MusicBrainz IDs.
Args:
Expand All @@ -46,6 +47,7 @@ def fetch_multiple_labels(mbids, includes=None):
query=query,
entity_type='label',
mbids=mbids,
unknown_entities_for_missing=unknown_entities_for_missing,
)
label_ids = [label.id for label in labels.values()]

Expand Down
30 changes: 30 additions & 0 deletions brainzutils/musicbrainz_db/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from mbdata import models


# Entity models
ENTITY_MODELS = {
'artist': models.Artist,
'place': models.Place,
'release_group': models.ReleaseGroup,
'release': models.Release,
'event': models.Event,
'label': models.Label,
'series': models.Series,
'url': models.URL,
'recording': models.Recording,
'work': models.Work,
'editor': models.Editor,
}


# Redirect models
REDIRECT_MODELS = {
'place': models.PlaceGIDRedirect,
'artist': models.ArtistGIDRedirect,
'release': models.ReleaseGIDRedirect,
'release_group': models.ReleaseGroupGIDRedirect,
'event': models.EventGIDRedirect,
'label': models.LabelGIDRedirect,
'recording': models.RecordingGIDRedirect,
'work': models.WorkGIDRedirect,
}
6 changes: 4 additions & 2 deletions brainzutils/musicbrainz_db/place.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from brainzutils.musicbrainz_db.utils import get_entities_by_gids


def get_place_by_id(mbid, includes=None):
def get_place_by_id(mbid, includes=None, unknown_entities_for_missing=False):
"""Get place with the MusicBrainz ID.
Args:
Expand All @@ -22,10 +22,11 @@ def get_place_by_id(mbid, includes=None):
return fetch_multiple_places(
[mbid],
includes=includes,
unknown_entities_for_missing=unknown_entities_for_missing,
).get(mbid)


def fetch_multiple_places(mbids, includes=None):
def fetch_multiple_places(mbids, includes=None, unknown_entities_for_missing=False):
"""Get info related to multiple places using their MusicBrainz IDs.
Args:
Expand All @@ -47,6 +48,7 @@ def fetch_multiple_places(mbids, includes=None):
query=query,
entity_type='place',
mbids=mbids,
unknown_entities_for_missing=unknown_entities_for_missing,
)
place_ids = [place.id for place in places.values()]

Expand Down
14 changes: 10 additions & 4 deletions brainzutils/musicbrainz_db/recording.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from sqlalchemy.orm import joinedload, subqueryload


def get_recording_by_mbid(mbid, includes=None):
def get_recording_by_mbid(mbid, includes=None, unknown_entities_for_missing=False):
""" Get recording with MusicBrainz ID.
Args:
Expand All @@ -23,10 +23,11 @@ def get_recording_by_mbid(mbid, includes=None):
return fetch_multiple_recordings(
[mbid],
includes=includes,
unknown_entities_for_missing=unknown_entities_for_missing,
).get(mbid)


def get_many_recordings_by_mbid(mbids, includes=None):
def get_many_recordings_by_mbid(mbids, includes=None, unknown_entities_for_missing=False):
""" Get multiple recordings with MusicBrainz IDs. It fetches recordings
using fetch_multiple_recordings.
Expand All @@ -40,10 +41,14 @@ def get_many_recordings_by_mbid(mbids, includes=None):
if includes is None:
includes = []

return fetch_multiple_recordings(mbids, includes)
return fetch_multiple_recordings(
mbids,
includes,
unknown_entities_for_missing=unknown_entities_for_missing,
)


def fetch_multiple_recordings(mbids, includes=None):
def fetch_multiple_recordings(mbids, includes=None, unknown_entities_for_missing=False):
""" Fetch multiple recordings with MusicBrainz IDs.
Args:
Expand Down Expand Up @@ -78,6 +83,7 @@ def fetch_multiple_recordings(mbids, includes=None):
query=query,
entity_type='recording',
mbids=mbids,
unknown_entities_for_missing=unknown_entities_for_missing,
)

recording_ids = [recording.id for recording in recordings.values()]
Expand Down
6 changes: 4 additions & 2 deletions brainzutils/musicbrainz_db/release.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from brainzutils.musicbrainz_db import recording


def get_release_by_id(mbid, includes=None):
def get_release_by_id(mbid, includes=None, unknown_entities_for_missing=False):
"""Get release with the MusicBrainz ID.
Args:
mbid (uuid): MBID(gid) of the release.
Expand All @@ -23,10 +23,11 @@ def get_release_by_id(mbid, includes=None):
return fetch_multiple_releases(
[mbid],
includes=includes,
unknown_entities_for_missing=unknown_entities_for_missing,
).get(mbid)


def fetch_multiple_releases(mbids, includes=None):
def fetch_multiple_releases(mbids, includes=None, unknown_entities_for_missing=False):
"""Get info related to multiple releases using their MusicBrainz IDs.
Args:
mbids (list): List of MBIDs of releases.
Expand All @@ -52,6 +53,7 @@ def fetch_multiple_releases(mbids, includes=None):
query=query,
entity_type='release',
mbids=mbids,
unknown_entities_for_missing=unknown_entities_for_missing,
)
release_ids = [release.id for release in releases.values()]

Expand Down
6 changes: 4 additions & 2 deletions brainzutils/musicbrainz_db/release_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from brainzutils.musicbrainz_db.helpers import get_relationship_info, get_tags


def get_release_group_by_id(mbid, includes=None):
def get_release_group_by_id(mbid, includes=None, unknown_entities_for_missing=False):
"""Get release group with the MusicBrainz ID.
Args:
mbid (uuid): MBID(gid) of the release group.
Expand All @@ -22,10 +22,11 @@ def get_release_group_by_id(mbid, includes=None):
return fetch_multiple_release_groups(
[mbid],
includes=includes,
unknown_entities_for_missing=unknown_entities_for_missing,
).get(mbid)


def fetch_multiple_release_groups(mbids, includes=None):
def fetch_multiple_release_groups(mbids, includes=None, unknown_entities_for_missing=False):
"""Get info related to multiple release groups using their MusicBrainz IDs.
Args:
mbids (list): List of MBIDs of releases groups.
Expand All @@ -52,6 +53,7 @@ def fetch_multiple_release_groups(mbids, includes=None):
query=query,
entity_type='release_group',
mbids=mbids,
unknown_entities_for_missing=unknown_entities_for_missing,
)
release_group_ids = [release_group.id for release_group in release_groups.values()]

Expand Down
2 changes: 1 addition & 1 deletion brainzutils/musicbrainz_db/serialize.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from brainzutils.musicbrainz_db.utils import ENTITY_MODELS
from brainzutils.musicbrainz_db.models import ENTITY_MODELS
from mbdata.utils.models import get_link_target
from sqlalchemy_dst import row2dict

Expand Down
10 changes: 10 additions & 0 deletions brainzutils/musicbrainz_db/tests/test_artist.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from unittest import TestCase
from mock import MagicMock
from brainzutils.musicbrainz_db.test_data import artist_linkin_park, artist_jay_z
from brainzutils.musicbrainz_db.unknown_entities import unknown_artist
from brainzutils.musicbrainz_db import artist as mb_artist


Expand Down Expand Up @@ -39,3 +40,12 @@ def test_fetch_multiple_artists(self):
"sort_name": "Linkin Park",
"type": "Group",
})

def test_fetch_multiple_artists_empty(self):
self.artist_query.return_value = []
artists = mb_artist.fetch_multiple_artists([
"f59c5520-5f46-4d2c-b2c4-822eabf53419",
"f82bcf78-5b69-4622-a5ef-73800768d9ac",
], unknown_entities_for_missing=True)
self.assertEqual(artists["f82bcf78-5b69-4622-a5ef-73800768d9ac"]["name"], unknown_artist.name)
self.assertEqual(artists["f59c5520-5f46-4d2c-b2c4-822eabf53419"]["name"], unknown_artist.name)
10 changes: 10 additions & 0 deletions brainzutils/musicbrainz_db/tests/test_editor.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from unittest import TestCase
from mock import MagicMock
from brainzutils.musicbrainz_db.test_data import editor_dt, editor_date, editor_1, editor_2
from brainzutils.musicbrainz_db.unknown_entities import unknown_editor
from brainzutils.musicbrainz_db import editor as mb_editor


Expand Down Expand Up @@ -54,3 +55,12 @@ def test_fetch_multiple_editors(self):
editors = mb_editor.fetch_multiple_editors([2323, 2324])
self.assertDictEqual(editors[2323], self.editor_1_dict)
self.assertDictEqual(editors[2324], self.editor_2_dict)

def test_fetch_multiple_editors_empty(self):
self.editor_query.return_value = []
editors = mb_editor.fetch_multiple_editors(
[2323, 2324],
unknown_entities_for_missing=True,
)
self.assertEqual(editors[2323]["name"], unknown_editor.name)
self.assertEqual(editors[2324]["name"], unknown_editor.name)
12 changes: 12 additions & 0 deletions brainzutils/musicbrainz_db/tests/test_event.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from mock import MagicMock
from brainzutils.musicbrainz_db import event as mb_event
from brainzutils.musicbrainz_db.test_data import taubertal_festival_2004, event_ra_hall_uk
from brainzutils.musicbrainz_db.unknown_entities import unknown_event


class EventTestCase(TestCase):
Expand All @@ -28,3 +29,14 @@ def test_fetch_multiple_events(self):
'Taubertal-Festival 2004, Day 1')
self.assertEqual(events['40e6153d-a042-4c95-a0a9-b0a47e3825ce']['name'],
'1996-04-17: Royal Albert Hall, London, England, UK')

def test_fetch_multiple_events_empty(self):
self.event_query.return_value = []
events = mb_event.fetch_multiple_events([
'ebe6ce0f-22c0-4fe7-bfd4-7a0397c9fe94',
'40e6153d-a042-4c95-a0a9-b0a47e3825ce'
], unknown_entities_for_missing=True)
self.assertEqual(events['ebe6ce0f-22c0-4fe7-bfd4-7a0397c9fe94']['name'],
unknown_event.name)
self.assertEqual(events['40e6153d-a042-4c95-a0a9-b0a47e3825ce']['name'],
unknown_event.name)
Loading

0 comments on commit 2ed35d8

Please sign in to comment.