mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
config_dir= parameter for Datasette(), refs #731
This commit is contained in:
parent
62162dcdea
commit
bce27d7d55
2 changed files with 39 additions and 46 deletions
|
|
@ -164,9 +164,16 @@ class Datasette:
|
||||||
memory=False,
|
memory=False,
|
||||||
config=None,
|
config=None,
|
||||||
version_note=None,
|
version_note=None,
|
||||||
|
config_dir=None,
|
||||||
):
|
):
|
||||||
|
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 []
|
immutables = immutables or []
|
||||||
self.files = tuple(files) + tuple(immutables)
|
self.files = tuple(files) + tuple(immutables)
|
||||||
|
if config_dir:
|
||||||
|
self.files += tuple([str(p) for p in config_dir.glob("*.db")])
|
||||||
self.immutables = set(immutables)
|
self.immutables = set(immutables)
|
||||||
if not self.files:
|
if not self.files:
|
||||||
self.files = [MEMORY]
|
self.files = [MEMORY]
|
||||||
|
|
@ -187,12 +194,22 @@ class Datasette:
|
||||||
self.add_database(db.name, db)
|
self.add_database(db.name, db)
|
||||||
self.cache_headers = cache_headers
|
self.cache_headers = cache_headers
|
||||||
self.cors = cors
|
self.cors = cors
|
||||||
|
if (config_dir / "metadata.json").exists() and not metadata:
|
||||||
|
metadata = json.load((config_dir / "metadata.json").open())
|
||||||
self._metadata = metadata or {}
|
self._metadata = metadata or {}
|
||||||
self.sqlite_functions = []
|
self.sqlite_functions = []
|
||||||
self.sqlite_extensions = sqlite_extensions or []
|
self.sqlite_extensions = sqlite_extensions or []
|
||||||
|
if (config_dir / "templates").is_dir() and not template_dir:
|
||||||
|
template_dir = str((config_dir / "templates").resolve())
|
||||||
self.template_dir = template_dir
|
self.template_dir = template_dir
|
||||||
|
if (config_dir / "plugins").is_dir() and not plugins_dir:
|
||||||
|
template_dir = str((config_dir / "plugins").resolve())
|
||||||
self.plugins_dir = plugins_dir
|
self.plugins_dir = plugins_dir
|
||||||
|
if (config_dir / "static").is_dir() and not static_mounts:
|
||||||
|
static_mounts = [("static", str((config_dir / "static").resolve()))]
|
||||||
self.static_mounts = static_mounts or []
|
self.static_mounts = static_mounts or []
|
||||||
|
if (config_dir / "config.json").exists() and not config:
|
||||||
|
config = json.load((config_dir / "config.json").open())
|
||||||
self._config = dict(DEFAULT_CONFIG, **(config or {}))
|
self._config = dict(DEFAULT_CONFIG, **(config or {}))
|
||||||
self.renderers = {} # File extension -> renderer function
|
self.renderers = {} # File extension -> renderer function
|
||||||
self.version_note = version_note
|
self.version_note = version_note
|
||||||
|
|
@ -247,34 +264,6 @@ class Datasette:
|
||||||
|
|
||||||
self.register_renderers()
|
self.register_renderers()
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def from_path(cls, path):
|
|
||||||
path = Path(path)
|
|
||||||
files = [str(p.resolve()) for p in path.glob("*.db")]
|
|
||||||
inspect_data = None
|
|
||||||
if (path / "inspect.json").exists():
|
|
||||||
inspect_data = json.load((path / "inspect.json").open())
|
|
||||||
metadata = None
|
|
||||||
if (path / "metadata.json").exists():
|
|
||||||
metadata = json.load((path / "metadata.json").open())
|
|
||||||
template_dir = None
|
|
||||||
if (path / "templates").exists():
|
|
||||||
template_dir = str((path / "templates"))
|
|
||||||
plugins_dir = None
|
|
||||||
if (path / "plugins").exists():
|
|
||||||
plugins = str((path / "plugins"))
|
|
||||||
static_mounts = None
|
|
||||||
if (path / "static").exists():
|
|
||||||
static_mounts = [("static", str(path / "plugins"))]
|
|
||||||
return cls(
|
|
||||||
files,
|
|
||||||
inspect_data=inspect_data,
|
|
||||||
metadata=metadata,
|
|
||||||
template_dir=template_dir,
|
|
||||||
plugins_dir=plugins_dir,
|
|
||||||
static_mounts=static_mounts,
|
|
||||||
)
|
|
||||||
|
|
||||||
def add_database(self, name, db):
|
def add_database(self, name, db):
|
||||||
self.databases[name] = db
|
self.databases[name] = db
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ from click import formatting
|
||||||
from click_default_group import DefaultGroup
|
from click_default_group import DefaultGroup
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
import pathlib
|
||||||
import shutil
|
import shutil
|
||||||
from subprocess import call
|
from subprocess import call
|
||||||
import sys
|
import sys
|
||||||
|
|
@ -353,25 +354,28 @@ def serve(
|
||||||
"Serve! files={} (immutables={}) on port {}".format(files, immutable, port)
|
"Serve! files={} (immutables={}) on port {}".format(files, immutable, port)
|
||||||
)
|
)
|
||||||
|
|
||||||
# if files is a single directory, do something special with it
|
kwargs = dict(
|
||||||
|
immutables=immutable,
|
||||||
|
cache_headers=not debug and not reload,
|
||||||
|
cors=cors,
|
||||||
|
inspect_data=inspect_data,
|
||||||
|
metadata=metadata_data,
|
||||||
|
sqlite_extensions=sqlite_extensions,
|
||||||
|
template_dir=template_dir,
|
||||||
|
plugins_dir=plugins_dir,
|
||||||
|
static_mounts=static,
|
||||||
|
config=dict(config),
|
||||||
|
memory=memory,
|
||||||
|
version_note=version_note,
|
||||||
|
)
|
||||||
|
|
||||||
|
# if files is a single directory, use that as config_dir=
|
||||||
if 1 == len(files) and os.path.isdir(files[0]):
|
if 1 == len(files) and os.path.isdir(files[0]):
|
||||||
ds = Datasette.from_path(files[0])
|
kwargs["config_dir"] = pathlib.Path(files[0])
|
||||||
else:
|
files = []
|
||||||
ds = Datasette(
|
|
||||||
files,
|
ds = Datasette(files, **kwargs)
|
||||||
immutables=immutable,
|
|
||||||
cache_headers=not debug and not reload,
|
|
||||||
cors=cors,
|
|
||||||
inspect_data=inspect_data,
|
|
||||||
metadata=metadata_data,
|
|
||||||
sqlite_extensions=sqlite_extensions,
|
|
||||||
template_dir=template_dir,
|
|
||||||
plugins_dir=plugins_dir,
|
|
||||||
static_mounts=static,
|
|
||||||
config=dict(config),
|
|
||||||
memory=memory,
|
|
||||||
version_note=version_note,
|
|
||||||
)
|
|
||||||
if return_instance:
|
if return_instance:
|
||||||
# Private utility mechanism for writing unit tests
|
# Private utility mechanism for writing unit tests
|
||||||
return ds
|
return ds
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue