feat(api): add additional parameters to fs-import endpoint

This commit is contained in:
JuniorJPDJ 2024-07-07 11:53:42 +02:00
parent 40935ec5ce
commit b50b5cb661
6 changed files with 35 additions and 8 deletions

View File

@ -202,7 +202,7 @@ class Command(BaseCommand):
dest="prune",
default=False,
help=(
"Once the import is completed, prune tracks, ablums and artists that aren't linked to any upload."
"Once the import is completed, prune tracks, albums and artists that aren't linked to any upload."
),
)

View File

@ -833,6 +833,11 @@ class FSImportSerializer(serializers.Serializer):
path = serializers.CharField(allow_blank=True)
library = serializers.UUIDField()
import_reference = serializers.CharField()
prune = serializers.BooleanField(required=False, default=True)
outbox = serializers.BooleanField(required=False, default=False)
broadcast = serializers.BooleanField(required=False, default=False)
batch_size = serializers.IntegerField(required=False, default=1000)
verbosity = serializers.IntegerField(required=False, default=1)
def validate_path(self, value):
try:

View File

@ -983,7 +983,16 @@ def update_track_metadata(audio_metadata, track):
@celery.app.task(name="music.fs_import")
@celery.require_instance(models.Library.objects.all(), "library")
def fs_import(library, path, import_reference):
def fs_import(
library,
path,
import_reference,
prune=True,
outbox=False,
broadcast=False,
batch_size=1000,
verbosity=1,
):
if cache.get("fs-import:status") != "pending":
raise ValueError("Invalid import status")
@ -998,13 +1007,13 @@ def fs_import(library, path, import_reference):
"reference": import_reference,
"watch": False,
"interactive": False,
"batch_size": 1000,
"batch_size": batch_size,
"async_": False,
"prune": True,
"prune": prune,
"replace": False,
"verbosity": 1,
"verbosity": verbosity,
"exit_on_failure": False,
"outbox": False,
"broadcast": False,
"outbox": outbox,
"broadcast": broadcast,
}
command.handle(**options)

View File

@ -377,6 +377,11 @@ class LibraryViewSet(
library_id=serializer.validated_data["library"].pk,
path=serializer.validated_data["path"],
import_reference=serializer.validated_data["import_reference"],
prune=serializer.validated_data["prune"],
outbox=serializer.validated_data["outbox"],
broadcast=serializer.validated_data["broadcast"],
batch_size=serializer.validated_data["batch_size"],
verbosity=serializer.validated_data["verbosity"],
)
return Response(status=201)
if request.method == "DELETE":

View File

@ -1564,7 +1564,14 @@ def test_fs_import_post(
assert response.status_code == 201
fs_import.assert_called_once_with(
path="test", library_id=library.pk, import_reference="test"
path="test",
library_id=library.pk,
import_reference="test",
prune=True,
outbox=False,
broadcast=False,
batch_size=1000,
verbosity=1,
)
assert cache.get("fs-import:status") == "pending"

View File

@ -0,0 +1 @@
Allow specifying more parameters on fs-import API endpoint