Skip to content
Snippets Groups Projects
Commit c3e6c4c7 authored by Eliot Berriot's avatar Eliot Berriot
Browse files

Merge branch '193-import' into 'develop'

Resolve "ValueError: Cannot assign "(<Artist: Pearl Jam>, False)": "Album.artist" must be a "Artist" instance."

Closes #193

See merge request funkwhale/funkwhale!186
parents e31bed05 23d21b0f
Branches
Tags
No related merge requests found
...@@ -106,7 +106,7 @@ class Artist(APIModelMixin): ...@@ -106,7 +106,7 @@ class Artist(APIModelMixin):
kwargs.update({'name': name}) kwargs.update({'name': name})
return cls.objects.get_or_create( return cls.objects.get_or_create(
name__iexact=name, name__iexact=name,
defaults=kwargs)[0] defaults=kwargs)
def import_artist(v): def import_artist(v):
...@@ -196,7 +196,7 @@ class Album(APIModelMixin): ...@@ -196,7 +196,7 @@ class Album(APIModelMixin):
kwargs.update({'title': title}) kwargs.update({'title': title})
return cls.objects.get_or_create( return cls.objects.get_or_create(
title__iexact=title, title__iexact=title,
defaults=kwargs)[0] defaults=kwargs)
def import_tags(instance, cleaned_data, raw_data): def import_tags(instance, cleaned_data, raw_data):
...@@ -403,7 +403,7 @@ class Track(APIModelMixin): ...@@ -403,7 +403,7 @@ class Track(APIModelMixin):
kwargs.update({'title': title}) kwargs.update({'title': title})
return cls.objects.get_or_create( return cls.objects.get_or_create(
title__iexact=title, title__iexact=title,
defaults=kwargs)[0] defaults=kwargs)
class TrackFile(models.Model): class TrackFile(models.Model):
......
...@@ -39,7 +39,7 @@ def import_track_from_remote(library_track): ...@@ -39,7 +39,7 @@ def import_track_from_remote(library_track):
except (KeyError, AssertionError): except (KeyError, AssertionError):
pass pass
else: 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: try:
album_mbid = metadata['release']['musicbrainz_id'] album_mbid = metadata['release']['musicbrainz_id']
...@@ -47,9 +47,9 @@ def import_track_from_remote(library_track): ...@@ -47,9 +47,9 @@ def import_track_from_remote(library_track):
except (KeyError, AssertionError): except (KeyError, AssertionError):
pass pass
else: 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( 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: try:
artist_mbid = metadata['artist']['musicbrainz_id'] artist_mbid = metadata['artist']['musicbrainz_id']
...@@ -57,20 +57,20 @@ def import_track_from_remote(library_track): ...@@ -57,20 +57,20 @@ def import_track_from_remote(library_track):
except (KeyError, AssertionError): except (KeyError, AssertionError):
pass pass
else: else:
artist = models.Artist.get_or_create_from_api(mbid=artist_mbid) artist, _ = models.Artist.get_or_create_from_api(mbid=artist_mbid)
album = models.Album.get_or_create_from_title( album, _ = models.Album.get_or_create_from_title(
library_track.album_title, artist=artist) library_track.album_title, artist=artist)
return models.Track.get_or_create_from_title( 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 # worst case scenario, we have absolutely no way to link to a
# musicbrainz resource, we rely on the name/titles # 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) 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) library_track.album_title, artist=artist)
return models.Track.get_or_create_from_title( 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): def _do_import(import_job, replace=False, use_acoustid=True):
......
...@@ -66,7 +66,7 @@ def test_import_job_from_federation_musicbrainz_recording(factories, mocker): ...@@ -66,7 +66,7 @@ def test_import_job_from_federation_musicbrainz_recording(factories, mocker):
t = factories['music.Track']() t = factories['music.Track']()
track_from_api = mocker.patch( track_from_api = mocker.patch(
'funkwhale_api.music.models.Track.get_or_create_from_api', 'funkwhale_api.music.models.Track.get_or_create_from_api',
return_value=t) return_value=(t, True))
lt = factories['federation.LibraryTrack']( lt = factories['federation.LibraryTrack'](
metadata__recording__musicbrainz=True, metadata__recording__musicbrainz=True,
artist_name='Hello', artist_name='Hello',
...@@ -92,7 +92,7 @@ def test_import_job_from_federation_musicbrainz_release(factories, mocker): ...@@ -92,7 +92,7 @@ def test_import_job_from_federation_musicbrainz_release(factories, mocker):
a = factories['music.Album']() a = factories['music.Album']()
album_from_api = mocker.patch( album_from_api = mocker.patch(
'funkwhale_api.music.models.Album.get_or_create_from_api', 'funkwhale_api.music.models.Album.get_or_create_from_api',
return_value=a) return_value=(a, True))
lt = factories['federation.LibraryTrack']( lt = factories['federation.LibraryTrack'](
metadata__release__musicbrainz=True, metadata__release__musicbrainz=True,
artist_name='Hello', artist_name='Hello',
...@@ -121,7 +121,7 @@ def test_import_job_from_federation_musicbrainz_artist(factories, mocker): ...@@ -121,7 +121,7 @@ def test_import_job_from_federation_musicbrainz_artist(factories, mocker):
a = factories['music.Artist']() a = factories['music.Artist']()
artist_from_api = mocker.patch( artist_from_api = mocker.patch(
'funkwhale_api.music.models.Artist.get_or_create_from_api', 'funkwhale_api.music.models.Artist.get_or_create_from_api',
return_value=a) return_value=(a, True))
lt = factories['federation.LibraryTrack']( lt = factories['federation.LibraryTrack'](
metadata__artist__musicbrainz=True, metadata__artist__musicbrainz=True,
album_title='World', album_title='World',
......
Fix broken federated import (#193)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment