_header=off option for CSV export, closes #1133

This commit is contained in:
Simon Willison 2020-12-10 15:28:44 -08:00
commit 2c0aca4887
3 changed files with 26 additions and 1 deletions

View file

@ -307,7 +307,8 @@ class DataView(BaseView):
if not first:
data, _, _ = await self.data(request, database, hash, **kwargs)
if first:
await writer.writerow(headings)
if request.args.get("_header") != "off":
await writer.writerow(headings)
first = False
next = data.get("next")
for row in data["rows"]:

View file

@ -28,6 +28,22 @@ file, which looks like this and has the following options:
You can try that out on https://latest.datasette.io/fixtures/facetable?_size=4
.. _csv_export_url_parameters:
URL parameters
--------------
The following options can be used to customize the CSVs returned by Datasette.
``?_header=off``
This removes the first row of the CSV file specifying the headings - only the row data will be returned.
``?_stream=on``
Stream all matching records, not just the first page of results. See below.
``?_dl=on``
Causes Datasette to return a ``content-disposition: attachment; filename="filename.csv"`` header.
Streaming all records
---------------------

View file

@ -64,6 +64,14 @@ def test_table_csv_cors_headers(app_client_with_cors):
assert "*" == response.headers["Access-Control-Allow-Origin"]
def test_table_csv_no_header(app_client):
response = app_client.get("/fixtures/simple_primary_key.csv?_header=off")
assert response.status == 200
assert not response.headers.get("Access-Control-Allow-Origin")
assert "text/plain; charset=utf-8" == response.headers["content-type"]
assert EXPECTED_TABLE_CSV.split("\r\n", 1)[1] == response.text
def test_table_csv_with_labels(app_client):
response = app_client.get("/fixtures/facetable.csv?_labels=1")
assert response.status == 200