Fixed content-disposition header on DB download, closes #909

pull/927/head
Simon Willison 2020-07-29 14:34:22 -07:00
rodzic c5c12a797f
commit 0748a65a22
4 zmienionych plików z 11 dodań i 4 usunięć

Wyświetl plik

@ -251,7 +251,7 @@ async def asgi_send_file(
):
headers = {}
if filename:
headers["Content-Disposition"] = 'attachment; filename="{}"'.format(filename)
headers["content-disposition"] = 'attachment; filename="{}"'.format(filename)
first = True
headers["content-length"] = str((await aiofiles.os.stat(str(filepath))).st_size)
async with aiofiles.open(str(filepath), mode="rb") as fp:
@ -402,4 +402,6 @@ class AsgiFileDownload:
self.content_type = content_type
async def asgi_send(self, send):
return await asgi_send_file(send, self.filepath, content_type=self.content_type)
return await asgi_send_file(
send, self.filepath, filename=self.filename, content_type=self.content_type
)

Wyświetl plik

@ -337,7 +337,7 @@ class DataView(BaseView):
disposition = 'attachment; filename="{}.csv"'.format(
kwargs.get("table", database)
)
headers["Content-Disposition"] = disposition
headers["content-disposition"] = disposition
return AsgiStream(stream_fn, headers=headers, content_type=content_type)

Wyświetl plik

@ -92,7 +92,7 @@ def test_table_csv_download(app_client):
assert response.status == 200
assert "text/csv; charset=utf-8" == response.headers["content-type"]
expected_disposition = 'attachment; filename="simple_primary_key.csv"'
assert expected_disposition == response.headers["Content-Disposition"]
assert expected_disposition == response.headers["content-disposition"]
def test_csv_with_non_ascii_characters(app_client):

Wyświetl plik

@ -913,6 +913,11 @@ def test_database_download_for_immutable():
content_length = download_response.headers["content-length"]
assert content_length.isdigit()
assert int(content_length) > 100
assert "content-disposition" in download_response.headers
assert (
download_response.headers["content-disposition"]
== 'attachment; filename="fixtures.db"'
)
def test_database_download_disallowed_for_mutable(app_client):