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