From 996e8822d2cb551c0ed821ff1fda24af905332d3 Mon Sep 17 00:00:00 2001
From: Simon Willison
Date: Wed, 2 Jan 2019 18:43:56 -0800
Subject: [PATCH] Fix CSV export hidden form fields, closes #393
---
datasette/templates/table.html | 6 ++----
datasette/views/base.py | 6 +++++-
tests/test_html.py | 13 +++++++------
3 files changed, 14 insertions(+), 11 deletions(-)
diff --git a/datasette/templates/table.html b/datasette/templates/table.html
index a768a9fc..6177163a 100644
--- a/datasette/templates/table.html
+++ b/datasette/templates/table.html
@@ -148,10 +148,8 @@
{% if expandable_columns %}{% endif %}
{% if next_url and config.allow_csv_stream %}{% endif %}
- {% for key, value in url_csv_args.items() %}
- {% if key != "_labels" %}
-
- {% endif %}
+ {% for key, value in url_csv_hidden_args %}
+
{% endfor %}
diff --git a/datasette/views/base.py b/datasette/views/base.py
index 119b376b..4b89c975 100644
--- a/datasette/views/base.py
+++ b/datasette/views/base.py
@@ -464,7 +464,11 @@ class BaseView(RenderMixin):
}),
"url_csv": url_csv,
"url_csv_path": url_csv_path,
- "url_csv_args": url_csv_args,
+ "url_csv_hidden_args": [
+ (key, value)
+ for key, value in urllib.parse.parse_qsl(request.query_string)
+ if key not in ("_labels", "_facet", "_size")
+ ] + [("_size", "max")],
"datasette_version": __version__,
"config": self.ds.config_dict(),
}
diff --git a/tests/test_html.py b/tests/test_html.py
index 913eac94..233b85a0 100644
--- a/tests/test_html.py
+++ b/tests/test_html.py
@@ -401,7 +401,7 @@ def test_table_html_simple_primary_key(app_client):
def test_table_csv_json_export_interface(app_client):
- response = app_client.get('/fixtures/simple_primary_key')
+ response = app_client.get('/fixtures/simple_primary_key?id__gt=2')
assert response.status == 200
# The links at the top of the page
links = Soup(response.body, "html.parser").find("p", {
@@ -409,8 +409,8 @@ def test_table_csv_json_export_interface(app_client):
}).findAll("a")
actual = [l["href"].split("/")[-1] for l in links]
expected = [
- "simple_primary_key.json",
- "simple_primary_key.csv?_size=max",
+ "simple_primary_key.json?id__gt=2",
+ "simple_primary_key.csv?id__gt=2&_size=max",
"#export"
]
assert expected == actual
@@ -420,9 +420,9 @@ def test_table_csv_json_export_interface(app_client):
})
json_links = [a["href"].split("/")[-1] for a in div.find("p").findAll("a")]
assert [
- "simple_primary_key.json",
- "simple_primary_key.json?_shape=array",
- "simple_primary_key.json?_shape=object"
+ "simple_primary_key.json?id__gt=2",
+ "simple_primary_key.json?id__gt=2&_shape=array",
+ "simple_primary_key.json?id__gt=2&_shape=object"
] == json_links
# And the CSV form
form = div.find("form")
@@ -431,6 +431,7 @@ def test_table_csv_json_export_interface(app_client):
assert [
'',
'',
+ '',
''
] == inputs