Newer
Older
from django.db import transaction
Eliot Berriot
committed
Eliot Berriot
committed
def import_track_data_from_path(path):
Eliot Berriot
committed
data = metadata.Metadata(path)
album = None
track_mbid = data.get("musicbrainz_recordingid", None)
album_mbid = data.get("musicbrainz_albumid", None)
Eliot Berriot
committed
if album_mbid and track_mbid:
# to gain performance and avoid additional mb lookups,
# we import from the release data, which is already cached
return models.Track.get_or_create_from_release(album_mbid, track_mbid)[0]
elif track_mbid:
return models.Track.get_or_create_from_api(track_mbid)[0]
elif album_mbid:
album = models.Album.get_or_create_from_api(album_mbid)[0]
Eliot Berriot
committed
artist = album.artist if album else None
if not artist:
if artist_mbid:
artist = models.Artist.get_or_create_from_api(artist_mbid)[0]
else:
artist = models.Artist.objects.get_or_create(
name__iexact=data.get("artist"), defaults={"name": data.get("artist")}
)[0]
if not album:
album = models.Album.objects.get_or_create(
artist=artist,
defaults={"title": data.get("album"), "release_date": release_date},
)[0]
Eliot Berriot
committed
track = models.Track.objects.get_or_create(
Eliot Berriot
committed
album=album,
defaults={"title": data.get("title"), "position": position},
Eliot Berriot
committed
)[0]
return track