Standard arguments for extra_ plugin hooks, closes #939

This commit is contained in:
Simon Willison 2020-08-16 09:50:23 -07:00
commit e3639247cd
5 changed files with 258 additions and 161 deletions

View file

@ -26,16 +26,30 @@ def prepare_connection(conn, database, datasette):
@hookimpl
def extra_css_urls(template, database, table, datasette):
return [
"https://plugin-example.com/{}/extra-css-urls-demo.css".format(
base64.b64encode(
json.dumps(
{"template": template, "database": database, "table": table,}
).encode("utf8")
).decode("utf8")
)
]
def extra_css_urls(template, database, table, view_name, request, datasette):
async def inner():
return [
"https://plugin-example.com/{}/extra-css-urls-demo.css".format(
base64.b64encode(
json.dumps(
{
"template": template,
"database": database,
"table": table,
"view_name": view_name,
"request_path": request.path
if request is not None
else None,
"added": (
await datasette.get_database().execute("select 3 * 5")
).first()[0],
}
).encode("utf8")
).decode("utf8")
)
]
return inner
@hookimpl
@ -47,19 +61,27 @@ def extra_js_urls():
@hookimpl
def extra_body_script(template, database, table, datasette):
return "var extra_body_script = {};".format(
json.dumps(
{
"template": template,
"database": database,
"table": table,
"config": datasette.plugin_config(
"name-of-plugin", database=database, table=table,
),
}
def extra_body_script(template, database, table, view_name, request, datasette):
async def inner():
return "var extra_body_script = {};".format(
json.dumps(
{
"template": template,
"database": database,
"table": table,
"config": datasette.plugin_config(
"name-of-plugin", database=database, table=table,
),
"view_name": view_name,
"request_path": request.path if request is not None else None,
"added": (
await datasette.get_database().execute("select 3 * 5")
).first()[0],
}
)
)
)
return inner
@hookimpl

View file

@ -56,14 +56,38 @@ def test_plugin_prepare_connection_arguments(app_client):
@pytest.mark.parametrize(
"path,expected_decoded_object",
[
("/", {"template": "index.html", "database": None, "table": None}),
(
"/",
{
"template": "index.html",
"database": None,
"table": None,
"view_name": "index",
"request_path": "/",
"added": 15,
},
),
(
"/fixtures/",
{"template": "database.html", "database": "fixtures", "table": None},
{
"template": "database.html",
"database": "fixtures",
"table": None,
"view_name": "database",
"request_path": "/fixtures",
"added": 15,
},
),
(
"/fixtures/sortable",
{"template": "table.html", "database": "fixtures", "table": "sortable"},
{
"template": "table.html",
"database": "fixtures",
"table": "sortable",
"view_name": "table",
"request_path": "/fixtures/sortable",
"added": 15,
},
),
],
)
@ -207,6 +231,9 @@ def test_plugin_config_file(app_client):
"database": None,
"table": None,
"config": {"depth": "root"},
"view_name": "index",
"request_path": "/",
"added": 15,
},
),
(
@ -216,6 +243,9 @@ def test_plugin_config_file(app_client):
"database": "fixtures",
"table": None,
"config": {"depth": "database"},
"view_name": "database",
"request_path": "/fixtures",
"added": 15,
},
),
(
@ -225,6 +255,9 @@ def test_plugin_config_file(app_client):
"database": "fixtures",
"table": "sortable",
"config": {"depth": "table"},
"view_name": "table",
"request_path": "/fixtures/sortable",
"added": 15,
},
),
],