kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
54 wiersze
1.4 KiB
Python
54 wiersze
1.4 KiB
Python
![]() |
import os
|
||
|
import datetime
|
||
|
from django.core.files import File
|
||
|
|
||
|
from funkwhale_api.taskapp import celery
|
||
|
from funkwhale_api.music import models, metadata
|
||
|
|
||
|
|
||
|
@celery.app.task(name='audiofile.from_path')
|
||
|
def from_path(path):
|
||
|
data = metadata.Metadata(path)
|
||
|
artist = models.Artist.objects.get_or_create(
|
||
|
name__iexact=data.get('artist'),
|
||
![]() |
defaults={
|
||
|
'name': data.get('artist'),
|
||
|
'mbid': data.get('musicbrainz_artistid', None),
|
||
![]() |
|
||
![]() |
},
|
||
|
)[0]
|
||
![]() |
|
||
![]() |
release_date = data.get('date', default=None)
|
||
![]() |
album = models.Album.objects.get_or_create(
|
||
|
title__iexact=data.get('album'),
|
||
|
artist=artist,
|
||
|
defaults={
|
||
|
'title': data.get('album'),
|
||
|
'release_date': release_date,
|
||
![]() |
'mbid': data.get('musicbrainz_albumid', None),
|
||
![]() |
},
|
||
|
)[0]
|
||
|
|
||
![]() |
position = data.get('track_number', default=None)
|
||
![]() |
track = models.Track.objects.get_or_create(
|
||
|
title__iexact=data.get('title'),
|
||
|
album=album,
|
||
|
defaults={
|
||
|
'title': data.get('title'),
|
||
|
'position': position,
|
||
![]() |
'mbid': data.get('musicbrainz_recordingid', None),
|
||
![]() |
},
|
||
|
)[0]
|
||
|
|
||
|
if track.files.count() > 0:
|
||
|
raise ValueError('File already exists for track {}'.format(track.pk))
|
||
|
|
||
|
track_file = models.TrackFile(track=track)
|
||
|
track_file.audio_file.save(
|
||
|
os.path.basename(path),
|
||
|
File(open(path, 'rb'))
|
||
|
)
|
||
|
track_file.save()
|
||
|
|
||
|
return track_file
|