From 23d21b0fdb1b6341eb286d0f7a31b6ce3cc92f28 Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Mon, 7 May 2018 19:22:09 +0200 Subject: [PATCH] Fix #193: broken federated import --- api/funkwhale_api/music/models.py | 6 +++--- api/funkwhale_api/music/tasks.py | 18 +++++++++--------- api/tests/music/test_import.py | 6 +++--- changes/changelog.d/193.bugfix | 1 + 4 files changed, 16 insertions(+), 15 deletions(-) create mode 100644 changes/changelog.d/193.bugfix diff --git a/api/funkwhale_api/music/models.py b/api/funkwhale_api/music/models.py index 655d38755..560e1c7f0 100644 --- a/api/funkwhale_api/music/models.py +++ b/api/funkwhale_api/music/models.py @@ -106,7 +106,7 @@ class Artist(APIModelMixin): kwargs.update({'name': name}) return cls.objects.get_or_create( name__iexact=name, - defaults=kwargs)[0] + defaults=kwargs) def import_artist(v): @@ -196,7 +196,7 @@ class Album(APIModelMixin): kwargs.update({'title': title}) return cls.objects.get_or_create( title__iexact=title, - defaults=kwargs)[0] + defaults=kwargs) def import_tags(instance, cleaned_data, raw_data): @@ -403,7 +403,7 @@ class Track(APIModelMixin): kwargs.update({'title': title}) return cls.objects.get_or_create( title__iexact=title, - defaults=kwargs)[0] + defaults=kwargs) class TrackFile(models.Model): diff --git a/api/funkwhale_api/music/tasks.py b/api/funkwhale_api/music/tasks.py index 4509c9a57..bad0006aa 100644 --- a/api/funkwhale_api/music/tasks.py +++ b/api/funkwhale_api/music/tasks.py @@ -39,7 +39,7 @@ def import_track_from_remote(library_track): except (KeyError, AssertionError): pass else: - return models.Track.get_or_create_from_api(mbid=track_mbid) + return models.Track.get_or_create_from_api(mbid=track_mbid)[0] try: album_mbid = metadata['release']['musicbrainz_id'] @@ -47,9 +47,9 @@ def import_track_from_remote(library_track): except (KeyError, AssertionError): pass else: - album = models.Album.get_or_create_from_api(mbid=album_mbid) + album, _ = models.Album.get_or_create_from_api(mbid=album_mbid) return models.Track.get_or_create_from_title( - library_track.title, artist=album.artist, album=album) + library_track.title, artist=album.artist, album=album)[0] try: artist_mbid = metadata['artist']['musicbrainz_id'] @@ -57,20 +57,20 @@ def import_track_from_remote(library_track): except (KeyError, AssertionError): pass else: - artist = models.Artist.get_or_create_from_api(mbid=artist_mbid) - album = models.Album.get_or_create_from_title( + artist, _ = models.Artist.get_or_create_from_api(mbid=artist_mbid) + album, _ = models.Album.get_or_create_from_title( library_track.album_title, artist=artist) return models.Track.get_or_create_from_title( - library_track.title, artist=artist, album=album) + library_track.title, artist=artist, album=album)[0] # worst case scenario, we have absolutely no way to link to a # musicbrainz resource, we rely on the name/titles - artist = models.Artist.get_or_create_from_name( + artist, _ = models.Artist.get_or_create_from_name( library_track.artist_name) - album = models.Album.get_or_create_from_title( + album, _ = models.Album.get_or_create_from_title( library_track.album_title, artist=artist) return models.Track.get_or_create_from_title( - library_track.title, artist=artist, album=album) + library_track.title, artist=artist, album=album)[0] def _do_import(import_job, replace=False, use_acoustid=True): diff --git a/api/tests/music/test_import.py b/api/tests/music/test_import.py index 000e6a8b6..c7b40fb16 100644 --- a/api/tests/music/test_import.py +++ b/api/tests/music/test_import.py @@ -66,7 +66,7 @@ def test_import_job_from_federation_musicbrainz_recording(factories, mocker): t = factories['music.Track']() track_from_api = mocker.patch( 'funkwhale_api.music.models.Track.get_or_create_from_api', - return_value=t) + return_value=(t, True)) lt = factories['federation.LibraryTrack']( metadata__recording__musicbrainz=True, artist_name='Hello', @@ -92,7 +92,7 @@ def test_import_job_from_federation_musicbrainz_release(factories, mocker): a = factories['music.Album']() album_from_api = mocker.patch( 'funkwhale_api.music.models.Album.get_or_create_from_api', - return_value=a) + return_value=(a, True)) lt = factories['federation.LibraryTrack']( metadata__release__musicbrainz=True, artist_name='Hello', @@ -121,7 +121,7 @@ def test_import_job_from_federation_musicbrainz_artist(factories, mocker): a = factories['music.Artist']() artist_from_api = mocker.patch( 'funkwhale_api.music.models.Artist.get_or_create_from_api', - return_value=a) + return_value=(a, True)) lt = factories['federation.LibraryTrack']( metadata__artist__musicbrainz=True, album_title='World', diff --git a/changes/changelog.d/193.bugfix b/changes/changelog.d/193.bugfix new file mode 100644 index 000000000..0c00a709b --- /dev/null +++ b/changes/changelog.d/193.bugfix @@ -0,0 +1 @@ +Fix broken federated import (#193)