diff --git a/datasette/version.py b/datasette/version.py index 8fb7217d..bf182d9f 100644 --- a/datasette/version.py +++ b/datasette/version.py @@ -1,2 +1,2 @@ -__version__ = "0.54" +__version__ = "0.54.1" __version_info__ = tuple(__version__.split(".")) diff --git a/datasette/views/table.py b/datasette/views/table.py index 0a3504b3..48792284 100644 --- a/datasette/views/table.py +++ b/datasette/views/table.py @@ -815,7 +815,7 @@ class TableView(RowTableShared): form_hidden_args = [] for key in request.args: - if key.startswith("_"): + if key.startswith("_") and key not in ("_sort", "_search"): for value in request.args.getlist(key): form_hidden_args.append((key, value)) diff --git a/docs/changelog.rst b/docs/changelog.rst index 54c59036..9d0c636a 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -4,6 +4,13 @@ Changelog ========= +.. _v0_54_1: + +0.54.1 (2021-02-02) +------------------- + +- Fixed a bug where ``?_search=`` and ``?_sort=`` parameters were incorrectly duplicated when the filter form on the table page was re-submitted. (`#1214 `__) + .. _v0_54: 0.54 (2021-01-25) diff --git a/docs/testing_plugins.rst b/docs/testing_plugins.rst index 4261f639..23e72214 100644 --- a/docs/testing_plugins.rst +++ b/docs/testing_plugins.rst @@ -185,7 +185,7 @@ Here's a test for that plugin that mocks the HTTPX outbound request: response = await datasette.client.post("/-/fetch-url", data={ "url": "https://www.example.com/" }) - asert response.text == "Hello world" + assert response.text == "Hello world" outbound_request = httpx_mock.get_request() assert outbound_request.url == "https://www.example.com/" diff --git a/tests/test_html.py b/tests/test_html.py index 6c33fba7..1aa9639e 100644 --- a/tests/test_html.py +++ b/tests/test_html.py @@ -1272,6 +1272,23 @@ def test_other_hidden_form_fields(app_client, path, expected_hidden): assert [(hidden["name"], hidden["value"]) for hidden in hiddens] == expected_hidden +@pytest.mark.parametrize( + "path,expected_hidden", + [ + ("/fixtures/searchable?_search=terry", []), + ("/fixtures/searchable?_sort=text2", []), + ("/fixtures/searchable?_sort=text2&_where=1", [("_where", "1")]), + ], +) +def test_search_and_sort_fields_not_duplicated(app_client, path, expected_hidden): + # https://github.com/simonw/datasette/issues/1214 + response = app_client.get(path) + soup = Soup(response.body, "html.parser") + inputs = soup.find("form").findAll("input") + hiddens = [i for i in inputs if i["type"] == "hidden"] + assert [(hidden["name"], hidden["value"]) for hidden in hiddens] == expected_hidden + + def test_binary_data_display_in_table(app_client): response = app_client.get("/fixtures/binary_data") assert response.status == 200