updated import_task to support in place import
This commit is contained in:
parent
de754b835e
commit
58fced2640
|
@ -43,6 +43,7 @@ class TrackFactory(factory.django.DjangoModelFactory):
|
||||||
artist = factory.SelfAttribute('album.artist')
|
artist = factory.SelfAttribute('album.artist')
|
||||||
position = 1
|
position = 1
|
||||||
tags = ManyToManyFromList('tags')
|
tags = ManyToManyFromList('tags')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = 'music.Track'
|
model = 'music.Track'
|
||||||
|
|
||||||
|
@ -57,6 +58,9 @@ class TrackFileFactory(factory.django.DjangoModelFactory):
|
||||||
model = 'music.TrackFile'
|
model = 'music.TrackFile'
|
||||||
|
|
||||||
class Params:
|
class Params:
|
||||||
|
in_place = factory.Trait(
|
||||||
|
audio_file=None,
|
||||||
|
)
|
||||||
federation = factory.Trait(
|
federation = factory.Trait(
|
||||||
audio_file=None,
|
audio_file=None,
|
||||||
library_track=factory.SubFactory(LibraryTrackFactory),
|
library_track=factory.SubFactory(LibraryTrackFactory),
|
||||||
|
@ -105,6 +109,10 @@ class ImportJobFactory(factory.django.DjangoModelFactory):
|
||||||
status='finished',
|
status='finished',
|
||||||
track_file=factory.SubFactory(TrackFileFactory),
|
track_file=factory.SubFactory(TrackFileFactory),
|
||||||
)
|
)
|
||||||
|
in_place = factory.Trait(
|
||||||
|
status='finished',
|
||||||
|
audio_file=None,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@registry.register(name='music.FileImportJob')
|
@registry.register(name='music.FileImportJob')
|
||||||
|
|
|
@ -71,7 +71,7 @@ def import_track_from_remote(library_track):
|
||||||
library_track.title, artist=artist, album=album)
|
library_track.title, artist=artist, album=album)
|
||||||
|
|
||||||
|
|
||||||
def _do_import(import_job, replace, use_acoustid=True):
|
def _do_import(import_job, replace=False, use_acoustid=True):
|
||||||
from_file = bool(import_job.audio_file)
|
from_file = bool(import_job.audio_file)
|
||||||
mbid = import_job.mbid
|
mbid = import_job.mbid
|
||||||
acoustid_track_id = None
|
acoustid_track_id = None
|
||||||
|
@ -93,6 +93,9 @@ def _do_import(import_job, replace, use_acoustid=True):
|
||||||
track = import_track_data_from_path(import_job.audio_file.path)
|
track = import_track_data_from_path(import_job.audio_file.path)
|
||||||
elif import_job.library_track:
|
elif import_job.library_track:
|
||||||
track = import_track_from_remote(import_job.library_track)
|
track = import_track_from_remote(import_job.library_track)
|
||||||
|
elif import_job.source.startswith('file://'):
|
||||||
|
track = import_track_data_from_path(
|
||||||
|
import_job.source.replace('file://', '', 1))
|
||||||
else:
|
else:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
'Not enough data to process import, '
|
'Not enough data to process import, '
|
||||||
|
@ -123,7 +126,7 @@ def _do_import(import_job, replace, use_acoustid=True):
|
||||||
else:
|
else:
|
||||||
# no downloading, we hotlink
|
# no downloading, we hotlink
|
||||||
pass
|
pass
|
||||||
else:
|
elif import_job.audio_file:
|
||||||
track_file.download_file()
|
track_file.download_file()
|
||||||
track_file.save()
|
track_file.save()
|
||||||
import_job.status = 'finished'
|
import_job.status = 'finished'
|
||||||
|
@ -133,7 +136,7 @@ def _do_import(import_job, replace, use_acoustid=True):
|
||||||
import_job.audio_file.delete()
|
import_job.audio_file.delete()
|
||||||
import_job.save()
|
import_job.save()
|
||||||
|
|
||||||
return track.pk
|
return track_file
|
||||||
|
|
||||||
|
|
||||||
@celery.app.task(name='ImportJob.run', bind=True)
|
@celery.app.task(name='ImportJob.run', bind=True)
|
||||||
|
@ -147,7 +150,8 @@ def import_job_run(self, import_job, replace=False, use_acoustid=True):
|
||||||
import_job.save(update_fields=['status'])
|
import_job.save(update_fields=['status'])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return _do_import(import_job, replace, use_acoustid=use_acoustid)
|
tf = _do_import(import_job, replace, use_acoustid=use_acoustid)
|
||||||
|
return tf.pk if tf else None
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
if not settings.DEBUG:
|
if not settings.DEBUG:
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -231,3 +231,15 @@ def test_import_batch_notifies_followers(
|
||||||
on_behalf_of=library_actor,
|
on_behalf_of=library_actor,
|
||||||
to=[f1.actor.url]
|
to=[f1.actor.url]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test__do_import_in_place_mbid(factories, tmpfile):
|
||||||
|
path = '/test.ogg'
|
||||||
|
job = factories['music.ImportJob'](
|
||||||
|
in_place=True, source='file:///test.ogg')
|
||||||
|
|
||||||
|
track = factories['music.Track'](mbid=job.mbid)
|
||||||
|
tf = tasks._do_import(job, use_acoustid=False)
|
||||||
|
|
||||||
|
assert bool(tf.audio_file) is False
|
||||||
|
assert tf.source == 'file:///test.ogg'
|
||||||
|
|
Loading…
Reference in New Issue