{"html_url": "https://github.com/simonw/datasette/pull/1999#issuecomment-1475074025", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1999", "id": 1475074025, "node_id": "IC_kwDOBm6k_c5X69fp", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-03-19T02:14:28Z", "updated_at": "2023-03-19T02:14:51Z", "author_association": "OWNER", "body": "I had to replicate quite a bit of this logic from `base.py`:\r\n\r\nhttps://github.com/simonw/datasette/blob/56b0758a5fbf85d01ff80a40c9b028469d7bb65f/datasette/views/base.py#L526-L544\r\n\r\nI should refactor this when I move the canned / arbitrary query views away from that base class too.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1551694938, "label": "?_extra= support (draft)"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/1999#issuecomment-1475074311", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1999", "id": 1475074311, "node_id": "IC_kwDOBm6k_c5X69kH", "user": {"value": 9599, "label": "simonw"}, "created_at": "2023-03-19T02:16:08Z", "updated_at": "2023-03-19T02:17:33Z", "author_association": "OWNER", "body": "Next big challenge: fix all the tests in `test_table_html.py`:\r\n\r\n```\r\nFAILED tests/test_table_html.py::test_add_filter_redirects - assert 500 == 302\r\nFAILED tests/test_table_html.py::test_existing_filter_redirects - assert 500 == 302\r\nFAILED tests/test_table_html.py::test_reflected_hidden_form_fields[_facet=_neighborhood-expected_hidden0] - AssertionError: assert {} == {'_facet': '_neighborhood'}\r\nFAILED tests/test_table_html.py::test_reflected_hidden_form_fields[_where=1+=+1&_col=_city_id-expected_hidden1] - AssertionError: assert {} == {'_col': '_ci...ere': '1 = 1'}\r\nFAILED tests/test_table_html.py::test_reflected_hidden_form_fields[_facet=_neighborhood&_neighborhood__exact=Downtown-expected_hidden2] - AssertionError: assert {} == {'_facet': '_neighborhood'}\r\nFAILED tests/test_table_html.py::test_reflected_hidden_form_fields[_facet=_neighborhood&_city_id__gt=1-expected_hidden3] - AssertionError: assert {} == {'_facet': '_neighborhood'}\r\nFAILED tests/test_table_html.py::test_empty_search_parameter_gets_removed - assert 500 == 302\r\nFAILED tests/test_table_html.py::test_searchable_view_persists_fts_table - AssertionError: assert [('_fts_table...ts_pk', 'pk')] == []\r\nFAILED tests/test_table_html.py::test_sort_by_desc_redirects - assert 500 == 302\r\nFAILED tests/test_table_html.py::test_sort_links - AssertionError: assert [{'a_href': N...', ...}}, ...] == [{'a_href': N...', ...}}, ...]\r\nFAILED tests/test_table_html.py::test_facets_persist_through_filter_form - AssertionError: assert [] == [('_facet', '...ray', 'tags')]\r\nFAILED tests/test_table_html.py::test_next_does_not_persist_in_hidden_field - AssertionError: assert [] == [('_size', '1')]\r\nFAILED tests/test_table_html.py::test_table_html_simple_primary_key - AttributeError: 'NoneType' object has no attribute 'string'\r\nFAILED tests/test_table_html.py::test_table_csv_json_export_interface - AssertionError: assert ['/fixtures/s...x', '#export'] == ['/', '', '#export']\r\nFAILED tests/test_table_html.py::test_csv_json_export_links_include_labels_if_foreign_keys - AssertionError: assert ['/fixtures/f...x', '#export'] == ['/', '', '#export']\r\nFAILED tests/test_table_html.py::test_table_html_no_primary_key - AssertionError: assert ['content', 'a', 'b', 'c'] == ['a', 'b', 'c']\r\nFAILED tests/test_table_html.py::test_rowid_sortable_no_primary_key - AttributeError: 'NoneType' object has no attribute 'string'\r\nFAILED tests/test_table_html.py::test_table_html_compound_primary_key - AssertionError: assert 'Link' == 'pk1'\r\nFAILED tests/test_table_html.py::test_table_html_foreign_key_links - assert [['\\xa0']] == [['\\xa0']]\r\nFAILED tests/test_table_html.py::test_table_html_disable_foreign_key_links_with_labels - assert [['b']] == [['b']]\r\nFAILED tests/test_table_html.py::test_table_html_foreign_key_custom_label_column - assert [['']] == [['']]\r\nFAILED tests/test_table_html.py::test_table_html_filter_form_column_options[/fixtures/infinity-expected_column_options0] - AssertionError: assert ['- column -'...wid', 'value'] == ['- column -']\r\nFAILED tests/test_table_html.py::test_table_html_filter_form_column_options[/fixtures/primary_key_multiple_columns-expected_column_options1] - AssertionError: assert ['- column -'...', 'content2'] == ['- column -']\r\nFAILED tests/test_table_html.py::test_table_html_filter_form_column_options[/fixtures/compound_primary_key-expected_column_options2] - AssertionError: assert ['- column -'...2', 'content'] == ['- column -']\r\nFAILED tests/test_table_html.py::test_table_html_filter_form_still_shows_nocol_columns - AssertionError: assert ['- column -'] == ['- column -'...nulls_2', ...]\r\nFAILED tests/test_table_html.py::test_compound_primary_key_with_foreign_key_references - assert [['']] == [['']]\r\nFAILED tests/test_table_html.py::test_view_html - assert None is not None\r\nFAILED tests/test_table_html.py::test_extra_where_clauses - assert [('_where', \"...'_city_id=1')] == []\r\nFAILED tests/test_table_html.py::test_other_hidden_form_fields[/fixtures/facetable?_size=10-expected_hidden0] - AssertionError: assert [] == [('_size', '10')]\r\nFAILED tests/test_table_html.py::test_other_hidden_form_fields[/fixtures/facetable?_size=10&_ignore=1&_ignore=2-expected_hidden1] - AssertionError: assert [] == [('_size', '1...ignore', '2')]\r\nFAILED tests/test_table_html.py::test_search_and_sort_fields_not_duplicated[/fixtures/searchable?_sort=text2&_where=1-expected_hidden3] - AssertionError: assert [] == [('_where', '1')]\r\nFAILED tests/test_table_html.py::test_binary_data_display_in_table - assert [['\\xa0']] == [['\\xa0']]\r\nFAILED tests/test_table_html.py::test_metadata_sort - AttributeError: 'NoneType' object has no attribute 'string'\r\nFAILED tests/test_table_html.py::test_metadata_sort_desc - AttributeError: 'NoneType' object has no attribute 'string'\r\nFAILED tests/test_table_html.py::test_facet_more_links[5-/fixtures/facetable?_facet=_neighborhood-2-True-/fixtures/facetable?_facet=_neighborhood&_facet_size=max] - assert 0 == 2\r\nFAILED tests/test_table_html.py::test_facet_more_links[5-/fixtures/facetable?_facet=_neighborhood&_facet_size=50-5-True-/fixtures/facetable?_facet=_neighborhood&_facet_size=max] - assert 0 == 5\r\nFAILED tests/test_table_html.py::test_facet_total - assert 500 == 200\r\n```\r\n\r\nDeduped that's 30 tests:\r\n\r\n```\r\nFAILED tests/test_table_html.py::test_add_filter_redirects\r\nFAILED tests/test_table_html.py::test_binary_data_display_in_table\r\nFAILED tests/test_table_html.py::test_compound_primary_key_with_foreign_key_references\r\nFAILED tests/test_table_html.py::test_csv_json_export_links_include_labels_if_foreign_keys\r\nFAILED tests/test_table_html.py::test_empty_search_parameter_gets_removed\r\nFAILED tests/test_table_html.py::test_existing_filter_redirects\r\nFAILED tests/test_table_html.py::test_extra_where_clauses\r\nFAILED tests/test_table_html.py::test_facet_more_links\r\nFAILED tests/test_table_html.py::test_facet_total\r\nFAILED tests/test_table_html.py::test_facets_persist_through_filter_form\r\nFAILED tests/test_table_html.py::test_metadata_sort\r\nFAILED tests/test_table_html.py::test_metadata_sort_desc\r\nFAILED tests/test_table_html.py::test_next_does_not_persist_in_hidden_field\r\nFAILED tests/test_table_html.py::test_other_hidden_form_fields\r\nFAILED tests/test_table_html.py::test_reflected_hidden_form_fields\r\nFAILED tests/test_table_html.py::test_rowid_sortable_no_primary_key\r\nFAILED tests/test_table_html.py::test_search_and_sort_fields_not_duplicated\r\nFAILED tests/test_table_html.py::test_searchable_view_persists_fts_table\r\nFAILED tests/test_table_html.py::test_sort_by_desc_redirects\r\nFAILED tests/test_table_html.py::test_sort_links\r\nFAILED tests/test_table_html.py::test_table_csv_json_export_interface\r\nFAILED tests/test_table_html.py::test_table_html_compound_primary_key\r\nFAILED tests/test_table_html.py::test_table_html_disable_foreign_key_links_with_labels\r\nFAILED tests/test_table_html.py::test_table_html_filter_form_column_options\r\nFAILED tests/test_table_html.py::test_table_html_filter_form_still_shows_nocol_columns\r\nFAILED tests/test_table_html.py::test_table_html_foreign_key_custom_label_column\r\nFAILED tests/test_table_html.py::test_table_html_foreign_key_links\r\nFAILED tests/test_table_html.py::test_table_html_no_primary_key\r\nFAILED tests/test_table_html.py::test_table_html_simple_primary_key\r\nFAILED tests/test_table_html.py::test_view_html\r\n```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1551694938, "label": "?_extra= support (draft)"}, "performed_via_github_app": null}