diff --git a/api/funkwhale_api/music/management/commands/import_files.py b/api/funkwhale_api/music/management/commands/import_files.py index 08c02138b..fc9f5737e 100644 --- a/api/funkwhale_api/music/management/commands/import_files.py +++ b/api/funkwhale_api/music/management/commands/import_files.py @@ -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." ), ) diff --git a/api/funkwhale_api/music/serializers.py b/api/funkwhale_api/music/serializers.py index 5b6abf21d..17071105e 100644 --- a/api/funkwhale_api/music/serializers.py +++ b/api/funkwhale_api/music/serializers.py @@ -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: diff --git a/api/funkwhale_api/music/tasks.py b/api/funkwhale_api/music/tasks.py index 6a6ca252b..62d605580 100644 --- a/api/funkwhale_api/music/tasks.py +++ b/api/funkwhale_api/music/tasks.py @@ -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) diff --git a/api/funkwhale_api/music/views.py b/api/funkwhale_api/music/views.py index d060c6376..4a4fab52c 100644 --- a/api/funkwhale_api/music/views.py +++ b/api/funkwhale_api/music/views.py @@ -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": diff --git a/api/tests/music/test_views.py b/api/tests/music/test_views.py index 1e347f4b5..dae72d2f8 100644 --- a/api/tests/music/test_views.py +++ b/api/tests/music/test_views.py @@ -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" diff --git a/changes/changelog.d/2788.feature b/changes/changelog.d/2788.feature new file mode 100644 index 000000000..3676d3c95 --- /dev/null +++ b/changes/changelog.d/2788.feature @@ -0,0 +1 @@ +Allow specifying more parameters on fs-import API endpoint