diff --git a/api/funkwhale_api/music/models.py b/api/funkwhale_api/music/models.py index a49b55236b0477ecec92d00d9e1466a7c954539b..d2bf7dd883d30ebb35ae50e515227c2d519f4769 100644 --- a/api/funkwhale_api/music/models.py +++ b/api/funkwhale_api/music/models.py @@ -688,6 +688,10 @@ class Upload(models.Model): @property def extension(self): + try: + return utils.MIMETYPE_TO_EXTENSION[self.mimetype] + except KeyError: + pass if not self.audio_file: return return os.path.splitext(self.audio_file.name)[-1].replace(".", "", 1) diff --git a/api/funkwhale_api/music/utils.py b/api/funkwhale_api/music/utils.py index 2c1210cf78c7cddeaba1968f0557d4f48c048302..ae5cda750820512d53a62b2090c85c56a30001dc 100644 --- a/api/funkwhale_api/music/utils.py +++ b/api/funkwhale_api/music/utils.py @@ -33,6 +33,7 @@ AUDIO_EXTENSIONS_AND_MIMETYPE = [ ("ogg", "audio/ogg"), ("mp3", "audio/mpeg"), ("flac", "audio/x-flac"), + ("flac", "audio/flac"), ] EXTENSION_TO_MIMETYPE = {ext: mt for ext, mt in AUDIO_EXTENSIONS_AND_MIMETYPE} diff --git a/api/tests/music/test_models.py b/api/tests/music/test_models.py index 874c35afa53a7e1a0a56cda2d3b5c5e91a07f3b7..d89afd9c76f24f05dfcfd977fdb37189fb191c65 100644 --- a/api/tests/music/test_models.py +++ b/api/tests/music/test_models.py @@ -167,8 +167,7 @@ def test_audio_track_mime_type(extention, mimetype, factories): def test_upload_file_name(factories): name = "test.mp3" path = os.path.join(DATA_DIR, name) - upload = factories["music.Upload"](audio_file__from_path=path) - + upload = factories["music.Upload"](audio_file__from_path=path, mimetype=None) assert upload.filename == upload.track.full_name + ".mp3" @@ -484,3 +483,18 @@ def test_fid_is_populated(factories, model, factory_args, namespace): assert instance.fid == federation_utils.full_url( reverse(namespace, kwargs={"uuid": instance.uuid}) ) + + +@pytest.mark.parametrize( + "factory_args,expected", + [ + ({"audio_file__filename": "test.mp3", "mimetype": None}, "mp3"), + ({"mimetype": "audio/mpeg"}, "mp3"), + ({"audio_file__filename": "test.None", "mimetype": "audio/mpeg"}, "mp3"), + ({"audio_file__filename": "test.None", "mimetype": "audio/flac"}, "flac"), + ({"audio_file__filename": "test.None", "mimetype": "audio/x-flac"}, "flac"), + ], +) +def test_upload_extension(factory_args, factories, expected): + upload = factories["music.Upload"].build(**factory_args) + assert upload.extension == expected diff --git a/changes/changelog.d/473.bugfix b/changes/changelog.d/473.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..2346eb4598e50087d9f334c070e625fdcbf814b9 --- /dev/null +++ b/changes/changelog.d/473.bugfix @@ -0,0 +1 @@ +Fix ".None" extension when downloading Flac file (#473)