Extract query page rendering into new QueryPage module

Refactor QueryView.get() by moving query execution, CSV streaming,
renderer dispatch, and HTML template rendering into a new
datasette/query_page.py module. Share renderer dispatch logic between
query and table views via dispatch_renderer(). Fix query view passing
view_name="query" instead of "table" to output renderers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Simon Willison 2026-02-15 08:49:41 -08:00
commit 5602f3efa5
4 changed files with 880 additions and 402 deletions

View file

@ -502,6 +502,19 @@ async def test_hook_register_output_renderer_all_parameters(ds_client):
}
@pytest.mark.asyncio
async def test_hook_register_output_renderer_query_view_name(ds_client):
response = await ds_client.get(
"/fixtures/-/query.testall?sql=select+1"
)
assert response.status_code == 200
body = at_memory_re.sub(" at 0xXXX", response.text)
data = json.loads(body)
assert data["view_name"] == "query"
assert data["table"] is None
assert data["database"] == "fixtures"
@pytest.mark.asyncio
async def test_hook_register_output_renderer_custom_status_code(ds_client):
response = await ds_client.get(