Unverified Commit 85bc8d93 authored by Agate's avatar Agate 💬
Browse files

Fix #1093: mimetype detection issue that broke transcoding on certain tracks

parent c1e2f16d
...@@ -16,20 +16,44 @@ class Command(BaseCommand): ...@@ -16,20 +16,44 @@ class Command(BaseCommand):
default=False, default=False,
help="Do not execute anything", help="Do not execute anything",
) )
parser.add_argument(
"--mimetypes",
action="store_true",
dest="mimetypes",
default=True,
help="Check and fix mimetypes",
)
parser.add_argument(
"--audio-data",
action="store_true",
dest="data",
default=False,
help="Check and fix bitrate and duration, can be really slow because it needs to access files",
)
parser.add_argument(
"--size",
action="store_true",
dest="size",
default=False,
help="Check and fix file size, can be really slow because it needs to access files",
)
def handle(self, *args, **options): def handle(self, *args, **options):
if options["dry_run"]: if options["dry_run"]:
self.stdout.write("Dry-run on, will not commit anything") self.stdout.write("Dry-run on, will not commit anything")
self.fix_mimetypes(**options) if options["mimetypes"]:
self.fix_file_data(**options) self.fix_mimetypes(**options)
self.fix_file_size(**options) if options["data"]:
self.fix_file_data(**options)
if options["size"]:
self.fix_file_size(**options)
@transaction.atomic @transaction.atomic
def fix_mimetypes(self, dry_run, **kwargs): def fix_mimetypes(self, dry_run, **kwargs):
self.stdout.write("Fixing missing mimetypes...") self.stdout.write("Fixing missing mimetypes...")
matching = models.Upload.objects.filter(source__startswith="file://").exclude( matching = models.Upload.objects.filter(
mimetype__startswith="audio/" Q(source__startswith="file://") | Q(source__startswith="upload://")
) ).exclude(mimetype__startswith="audio/")
self.stdout.write( self.stdout.write(
"[mimetypes] {} entries found with bad or no mimetype".format( "[mimetypes] {} entries found with bad or no mimetype".format(
matching.count() matching.count()
......
...@@ -22,6 +22,8 @@ def guess_mimetype(f): ...@@ -22,6 +22,8 @@ def guess_mimetype(f):
mt, _ = mimetypes.guess_type(f.name) mt, _ = mimetypes.guess_type(f.name)
if mt: if mt:
t = mt t = mt
else:
t = EXTENSION_TO_MIMETYPE.get(f.name.split(".")[-1])
return t return t
......
...@@ -824,6 +824,7 @@ def test_user_can_create_draft_upload( ...@@ -824,6 +824,7 @@ def test_user_can_create_draft_upload(
assert upload.source == "upload://test" assert upload.source == "upload://test"
assert upload.import_reference == "test" assert upload.import_reference == "test"
assert upload.import_status == "draft" assert upload.import_status == "draft"
assert upload.mimetype == "audio/ogg"
assert upload.track is None assert upload.track is None
m.assert_not_called() m.assert_not_called()
......
Fixed mimetype detection issue that broke transcoding on some tracks (#1093). Run ``python manage.py fix_uploads --mimetypes`` to set proper mimetypes on existing uploads.
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment