diff --git a/api/funkwhale_api/music/management/commands/import_files.py b/api/funkwhale_api/music/management/commands/import_files.py index fab980510..ddc598d06 100644 --- a/api/funkwhale_api/music/management/commands/import_files.py +++ b/api/funkwhale_api/music/management/commands/import_files.py @@ -27,7 +27,8 @@ def crawl_dir(dir, extensions, recursive=True, ignored=[]): if os.path.isfile(dir): yield dir return - with os.scandir(dir) as scanner: + try: + scanner = os.scandir(dir) for entry in scanner: if entry.is_file(): for e in extensions: @@ -38,6 +39,9 @@ def crawl_dir(dir, extensions, recursive=True, ignored=[]): yield from crawl_dir( entry, extensions, recursive=recursive, ignored=ignored ) + finally: + if hasattr(scanner, "close"): + scanner.close() def batch(iterable, n=1): diff --git a/api/tests/files/nested/valid.ogg b/api/tests/files/nested/valid.ogg new file mode 100644 index 000000000..e1643848a Binary files /dev/null and b/api/tests/files/nested/valid.ogg differ diff --git a/api/tests/test_import_audio_file.py b/api/tests/test_import_audio_file.py index 04c06a8f4..7ee1028c8 100644 --- a/api/tests/test_import_audio_file.py +++ b/api/tests/test_import_audio_file.py @@ -352,3 +352,17 @@ def test_handle_modified_update_existing_path_if_found_and_attributed_to( event=event, stdout=stdout, library=library, in_place=True, ) update_track_metadata.assert_not_called() + + +def test_import_files(factories, capsys): + # smoke test to ensure the command run properly + library = factories["music.Library"](actor__local=True) + call_command( + "import_files", str(library.uuid), DATA_DIR, interactive=False, recursive=True + ) + captured = capsys.readouterr() + + imported = library.uploads.filter(import_status="finished").count() + assert imported > 0 + assert "Successfully imported {} new tracks".format(imported) in captured.out + assert "For details, please refer to import reference" in captured.out diff --git a/changes/changelog.d/1048.bugfix b/changes/changelog.d/1048.bugfix new file mode 100644 index 000000000..0f1973444 --- /dev/null +++ b/changes/changelog.d/1048.bugfix @@ -0,0 +1 @@ +Fixed recursive CLI importing crashing under Python 3.5 (#1148, #1147)