From 0d8fa53fab672fcf16b6a75aa55b07ccd243fb96 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Mon, 27 Apr 2020 09:22:05 -0700 Subject: [PATCH] Implemented inspect-data for config dirs, refs #731 --- datasette/app.py | 19 ++++++++++++++----- tests/test_config_dir.py | 6 ++---- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/datasette/app.py b/datasette/app.py index 4e2f1620..3c7644a6 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -169,18 +169,27 @@ class Datasette: assert config_dir is None or isinstance( config_dir, Path ), "config_dir= should be a pathlib.Path" - # TODO: Use 'inspect-data.json' to decide on immutables - immutables = immutables or [] - self.files = tuple(files) + tuple(immutables) + self.files = tuple(files) + tuple(immutables or []) if config_dir: self.files += tuple([str(p) for p in config_dir.glob("*.db")]) - self.immutables = set(immutables) + if ( + config_dir + and (config_dir / "inspect-data.json").exists() + and not inspect_data + ): + inspect_data = json.load((config_dir / "inspect-data.json").open()) + if immutables is None: + immutable_filenames = [i["file"] for i in inspect_data.values()] + immutables = [ + f for f in self.files if Path(f).name in immutable_filenames + ] + self.inspect_data = inspect_data + self.immutables = set(immutables or []) if not self.files: self.files = [MEMORY] elif memory: self.files = (MEMORY,) + self.files self.databases = collections.OrderedDict() - self.inspect_data = inspect_data for file in self.files: path = file is_memory = False diff --git a/tests/test_config_dir.py b/tests/test_config_dir.py index e47fd395..24c96a2b 100644 --- a/tests/test_config_dir.py +++ b/tests/test_config_dir.py @@ -98,9 +98,7 @@ def test_config(config_dir_client): def test_plugins(config_dir_client): response = config_dir_client.get("/-/plugins.json") assert 200 == response.status - assert [ - {"name": "hooray.py", "static": False, "templates": False, "version": None} - ] == json.loads(response.text) + assert "hooray.py" in {p["name"] for p in json.loads(response.text)} def test_templates_and_plugin(config_dir_client): @@ -125,4 +123,4 @@ def test_databases(config_dir_client): assert "demo" == databases[0]["name"] assert databases[0]["is_mutable"] assert "immutable" == databases[1]["name"] - # assert not databases[1]["is_mutable"] + assert not databases[1]["is_mutable"]