Skip to content

Commit

Permalink
Raise an exception if a "plugins" block exists in metadata.json
Browse files Browse the repository at this point in the history
  • Loading branch information
asg017 authored Oct 12, 2023
1 parent 35deaab commit 3d6d1e3
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 3 deletions.
8 changes: 6 additions & 2 deletions datasette/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
parse_metadata,
resolve_env_secrets,
resolve_routes,
fail_if_plugins_in_metadata,
tilde_decode,
to_css_class,
urlsafe_components,
Expand Down Expand Up @@ -334,13 +335,16 @@ def __init__(
]
if config_dir and metadata_files and not metadata:
with metadata_files[0].open() as fp:
metadata = parse_metadata(fp.read())
metadata = fail_if_plugins_in_metadata(
parse_metadata(fp.read()), metadata_files[0].name
)

if config_dir and config_files and not config:
with config_files[0].open() as fp:
config = parse_metadata(fp.read())

self._metadata_local = metadata or {}
self._metadata_local = fail_if_plugins_in_metadata(metadata or {})

self.sqlite_extensions = []
for extension in sqlite_extensions or []:
# Resolve spatialite, if requested
Expand Down
3 changes: 2 additions & 1 deletion datasette/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
initial_path_for_datasette,
pairs_to_nested_config,
temporary_docker_directory,
fail_if_plugins_in_metadata,
value_as_boolean,
SpatialiteNotFound,
StaticMount,
Expand Down Expand Up @@ -542,7 +543,7 @@ def serve(

metadata_data = None
if metadata:
metadata_data = parse_metadata(metadata.read())
metadata_data = fail_if_plugins_in_metadata(parse_metadata(metadata.read()))

config_data = None
if config:
Expand Down
15 changes: 15 additions & 0 deletions datasette/utils/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -1268,3 +1268,18 @@ def pairs_to_nested_config(pairs: typing.List[typing.Tuple[str, typing.Any]]) ->
parsed_pair = _handle_pair(key, value)
result = _combine(result, parsed_pair)
return result


def fail_if_plugins_in_metadata(metadata: dict, filename=None):
"""If plugin config is inside metadata, raise an Exception"""
if metadata is not None and metadata.get("plugins") is not None:
suggested_extension = (
".yaml"
if filename is not None
and (filename.endswith(".yaml") or filename.endswith(".yml"))
else ".json"
)
raise Exception(
f'Datasette no longer accepts plugin configuration in --metadata. Move your "plugins" configuration blocks to a separate file - we suggest calling that datasette.{suggested_extension} - and start Datasette with datasette -c datasette.{suggested_extension}. See https://docs.datasette.io/en/latest/configuration.html for more details.'
)
return metadata
8 changes: 8 additions & 0 deletions tests/test_plugins.py
Original file line number Diff line number Diff line change
Expand Up @@ -879,6 +879,14 @@ def test_hook_forbidden(restore_working_directory):
)


def test_plugin_config_in_metadata():
with pytest.raises(
Exception,
match="Datasette no longer accepts plugin configuration in --metadata",
):
Datasette(memory=True, metadata={"plugins": {}})


@pytest.mark.asyncio
async def test_hook_handle_exception(ds_client):
await ds_client.get("/trigger-error?x=123")
Expand Down

0 comments on commit 3d6d1e3

Please sign in to comment.