From 8c7e943013b7adb4d246d3ec0b50cfb36dc8467d Mon Sep 17 00:00:00 2001 From: Eliot Berriot <contact@eliotberriot.com> Date: Mon, 26 Feb 2018 18:27:41 +0100 Subject: [PATCH] Fixed #73: broken file upload --- CHANGELOG | 3 +++ api/funkwhale_api/music/utils.py | 9 ++++++++- api/tests/music/test_utils.py | 19 +++++++++++++++++++ .../components/library/import/FileUpload.vue | 4 ++-- 4 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 api/tests/music/test_utils.py diff --git a/CHANGELOG b/CHANGELOG index c02e7665..dc8f4df0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,9 @@ Changelog 0.6 (Unreleased) ---------------- +- Fixed broken file import due to wrong url (#73) +- More accurate mimetype detection + 0.5.1 (2018-02-24) ------------------ diff --git a/api/funkwhale_api/music/utils.py b/api/funkwhale_api/music/utils.py index a75cf5de..df659cb8 100644 --- a/api/funkwhale_api/music/utils.py +++ b/api/funkwhale_api/music/utils.py @@ -1,4 +1,5 @@ import magic +import mimetypes import re from django.db.models import Q @@ -42,7 +43,13 @@ def get_query(query_string, search_fields): def guess_mimetype(f): b = min(100000, f.size) - return magic.from_buffer(f.read(b), mime=True) + t = magic.from_buffer(f.read(b), mime=True) + if t == 'application/octet-stream': + # failure, we try guessing by extension + mt, _ = mimetypes.guess_type(f.path) + if mt: + t = mt + return t def compute_status(jobs): diff --git a/api/tests/music/test_utils.py b/api/tests/music/test_utils.py new file mode 100644 index 00000000..0a4f4b99 --- /dev/null +++ b/api/tests/music/test_utils.py @@ -0,0 +1,19 @@ +from funkwhale_api.music import utils + + +def test_guess_mimetype_try_using_extension(factories, mocker): + mocker.patch( + 'magic.from_buffer', return_value='audio/mpeg') + f = factories['music.TrackFile'].build( + audio_file__filename='test.ogg') + + assert utils.guess_mimetype(f.audio_file) == 'audio/mpeg' + + +def test_guess_mimetype_try_using_extension_if_fail(factories, mocker): + mocker.patch( + 'magic.from_buffer', return_value='application/octet-stream') + f = factories['music.TrackFile'].build( + audio_file__filename='test.mp3') + + assert utils.guess_mimetype(f.audio_file) == 'audio/mpeg' diff --git a/front/src/components/library/import/FileUpload.vue b/front/src/components/library/import/FileUpload.vue index 35b7b636..1b90adc9 100644 --- a/front/src/components/library/import/FileUpload.vue +++ b/front/src/components/library/import/FileUpload.vue @@ -29,7 +29,7 @@ </button> </div> <div class="ui hidden divider"></div> - <p> + <p v-if="batch"> Once all your files are uploaded, simply head over <router-link :to="{name: 'library.import.batches.detail', params: {id: batch.id }}">import detail page</router-link> to check the import status. </p> <table class="ui single line table"> @@ -73,7 +73,7 @@ export default { data () { return { files: [], - uploadUrl: 'import-jobs/', + uploadUrl: '/api/v1/import-jobs/', batch: null } }, -- GitLab