Brought back parameter fields, closes #2132

This commit is contained in:
Simon Willison 2023-08-08 06:45:04 -07:00
commit cd57b0f712
2 changed files with 33 additions and 2 deletions

View file

@ -506,6 +506,21 @@ async def query_view(
show_hide_text = "hide"
hide_sql = show_hide_text == "show"
# Extract any :named parameters
named_parameters = await derive_named_parameters(
datasette.get_database(database), sql
)
named_parameter_values = {
named_parameter: params.get(named_parameter) or ""
for named_parameter in named_parameters
if not named_parameter.startswith("_")
}
# Set to blank string if missing from params
for named_parameter in named_parameters:
if named_parameter not in params and not named_parameter.startswith("_"):
params[named_parameter] = ""
r = Response.html(
await datasette.render_template(
template,
@ -513,7 +528,7 @@ async def query_view(
database=database,
query={
"sql": sql,
# TODO: Params?
"params": params,
},
canned_query=None,
private=private,
@ -526,7 +541,7 @@ async def query_view(
editable=True, # TODO
allow_execute_sql=allow_execute_sql,
tables=await get_tables(datasette, request, db),
named_parameter_values={}, # TODO
named_parameter_values=named_parameter_values,
edit_sql_url="todo",
display_rows=await display_rows(
datasette, database, request, rows, columns

View file

@ -295,6 +295,22 @@ async def test_query_json_csv_export_links(ds_client):
assert '<a href="/fixtures.csv?sql=select+1&amp;_size=max">CSV</a>' in response.text
@pytest.mark.asyncio
async def test_query_parameter_form_fields(ds_client):
response = await ds_client.get("/fixtures?sql=select+:name")
assert response.status_code == 200
assert (
'<label for="qp1">name</label> <input type="text" id="qp1" name="name" value="">'
in response.text
)
response2 = await ds_client.get("/fixtures?sql=select+:name&name=hello")
assert response2.status_code == 200
assert (
'<label for="qp1">name</label> <input type="text" id="qp1" name="name" value="hello">'
in response2.text
)
@pytest.mark.asyncio
async def test_row_html_simple_primary_key(ds_client):
response = await ds_client.get("/fixtures/simple_primary_key/1")