From 1a7da94cae6f440aa507ea1a24625b0bf26019a9 Mon Sep 17 00:00:00 2001 From: Koper Date: Fri, 13 Oct 2023 10:37:45 +0100 Subject: [PATCH 1/2] Fix MP3 download python error --- server/reflector/views/_range_requests_response.py | 8 +++++++- server/reflector/views/transcripts.py | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/server/reflector/views/_range_requests_response.py b/server/reflector/views/_range_requests_response.py index 1a584a3c..f0c628e9 100644 --- a/server/reflector/views/_range_requests_response.py +++ b/server/reflector/views/_range_requests_response.py @@ -38,7 +38,9 @@ def _get_range_header(range_header: str, file_size: int) -> tuple[int, int]: return start, end -def range_requests_response(request: Request, file_path: str, content_type: str): +def range_requests_response( + request: Request, file_path: str, content_type: str, content_disposition: str +): """Returns StreamingResponse using Range Requests of a given file""" file_size = os.stat(file_path).st_size @@ -54,6 +56,10 @@ def range_requests_response(request: Request, file_path: str, content_type: str) "content-range, content-encoding" ), } + + if content_disposition: + headers["Content-Disposition"] = content_disposition + start = 0 end = file_size - 1 status_code = status.HTTP_200_OK diff --git a/server/reflector/views/transcripts.py b/server/reflector/views/transcripts.py index 10e30b26..bf6d967b 100644 --- a/server/reflector/views/transcripts.py +++ b/server/reflector/views/transcripts.py @@ -363,7 +363,7 @@ async def transcript_get_audio_mp3( request, transcript.audio_mp3_filename, content_type="audio/mpeg", - headers={"Content-Disposition": f"attachment; filename={filename}"}, + content_disposition=f"attachment; filename={filename}", ) From 149342f854276a5ef03d7f631acd2b20300782d0 Mon Sep 17 00:00:00 2001 From: Koper Date: Fri, 13 Oct 2023 10:42:52 +0100 Subject: [PATCH 2/2] Fix unit tests --- server/tests/test_transcripts_audio_download.py | 6 +++--- server/tests/test_transcripts_rtc_ws.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/server/tests/test_transcripts_audio_download.py b/server/tests/test_transcripts_audio_download.py index f37b7a4f..79cb25bf 100644 --- a/server/tests/test_transcripts_audio_download.py +++ b/server/tests/test_transcripts_audio_download.py @@ -35,7 +35,7 @@ async def fake_transcript(tmpdir): @pytest.mark.parametrize( "url_suffix,content_type", [ - ["/mp3", "audio/mp3"], + ["/mp3", "audio/mpeg"], ], ) async def test_transcript_audio_download(fake_transcript, url_suffix, content_type): @@ -51,7 +51,7 @@ async def test_transcript_audio_download(fake_transcript, url_suffix, content_ty @pytest.mark.parametrize( "url_suffix,content_type", [ - ["/mp3", "audio/mp3"], + ["/mp3", "audio/mpeg"], ], ) async def test_transcript_audio_download_range( @@ -74,7 +74,7 @@ async def test_transcript_audio_download_range( @pytest.mark.parametrize( "url_suffix,content_type", [ - ["/mp3", "audio/mp3"], + ["/mp3", "audio/mpeg"], ], ) async def test_transcript_audio_download_range_with_seek( diff --git a/server/tests/test_transcripts_rtc_ws.py b/server/tests/test_transcripts_rtc_ws.py index 2485ca6b..494fcd36 100644 --- a/server/tests/test_transcripts_rtc_ws.py +++ b/server/tests/test_transcripts_rtc_ws.py @@ -167,7 +167,7 @@ async def test_transcript_rtc_and_websocket( # check that audio/mp3 is available resp = await ac.get(f"/transcripts/{tid}/audio/mp3") assert resp.status_code == 200 - assert resp.headers["Content-Type"] == "audio/mp3" + assert resp.headers["Content-Type"] == "audio/mpeg" # stop server server.stop()