mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
--load-extension=spatialite shortcut, closes #1028
This commit is contained in:
parent
a4def0b8db
commit
6aa5886379
6 changed files with 54 additions and 6 deletions
|
|
@ -49,12 +49,14 @@ from .utils import (
|
|||
display_actor,
|
||||
escape_css_string,
|
||||
escape_sqlite,
|
||||
find_spatialite,
|
||||
format_bytes,
|
||||
module_from_path,
|
||||
parse_metadata,
|
||||
resolve_env_secrets,
|
||||
sqlite3,
|
||||
to_css_class,
|
||||
SpatialiteNotFound,
|
||||
)
|
||||
from .utils.asgi import (
|
||||
AsgiLifespan,
|
||||
|
|
@ -242,7 +244,14 @@ class Datasette:
|
|||
metadata = parse_metadata(fp.read())
|
||||
self._metadata = metadata or {}
|
||||
self.sqlite_functions = []
|
||||
self.sqlite_extensions = sqlite_extensions or []
|
||||
self.sqlite_extensions = []
|
||||
for extension in sqlite_extensions or []:
|
||||
# Resolve spatialite, if requested
|
||||
if extension == "spatialite":
|
||||
# Could raise SpatialiteNotFound
|
||||
self.sqlite_extensions.append(find_spatialite())
|
||||
else:
|
||||
self.sqlite_extensions.append(extension)
|
||||
if config_dir and (config_dir / "templates").is_dir() and not template_dir:
|
||||
template_dir = str((config_dir / "templates").resolve())
|
||||
self.template_dir = template_dir
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ from .utils import (
|
|||
SpatialiteConnectionProblem,
|
||||
temporary_docker_directory,
|
||||
value_as_boolean,
|
||||
SpatialiteNotFound,
|
||||
StaticMount,
|
||||
ValueAsBooleanError,
|
||||
)
|
||||
|
|
@ -78,7 +79,6 @@ def cli():
|
|||
"--load-extension",
|
||||
envvar="SQLITE_EXTENSIONS",
|
||||
multiple=True,
|
||||
type=click.Path(exists=True, resolve_path=True),
|
||||
help="Path to a SQLite extension to load",
|
||||
)
|
||||
def inspect(files, inspect_file, sqlite_extensions):
|
||||
|
|
@ -299,7 +299,6 @@ def uninstall(packages, yes):
|
|||
"--load-extension",
|
||||
envvar="SQLITE_EXTENSIONS",
|
||||
multiple=True,
|
||||
type=click.Path(exists=True, resolve_path=True),
|
||||
help="Path to a SQLite extension to load",
|
||||
)
|
||||
@click.option(
|
||||
|
|
@ -433,7 +432,10 @@ def serve(
|
|||
kwargs["config_dir"] = pathlib.Path(files[0])
|
||||
files = []
|
||||
|
||||
ds = Datasette(files, **kwargs)
|
||||
try:
|
||||
ds = Datasette(files, **kwargs)
|
||||
except SpatialiteNotFound:
|
||||
raise click.ClickException("Could not find SpatiaLite extension")
|
||||
|
||||
if return_instance:
|
||||
# Private utility mechanism for writing unit tests
|
||||
|
|
|
|||
|
|
@ -54,6 +54,12 @@ RUN apt-get update && \
|
|||
ENV SQLITE_EXTENSIONS /usr/lib/x86_64-linux-gnu/mod_spatialite.so
|
||||
"""
|
||||
|
||||
# Can replace with sqlite-utils when I add that dependency
|
||||
SPATIALITE_PATHS = (
|
||||
"/usr/lib/x86_64-linux-gnu/mod_spatialite.so",
|
||||
"/usr/local/lib/mod_spatialite.dylib",
|
||||
)
|
||||
|
||||
# Can replace this with Column from sqlite_utils when I add that dependency
|
||||
Column = namedtuple(
|
||||
"Column", ("cid", "name", "type", "notnull", "default_value", "is_pk")
|
||||
|
|
@ -971,3 +977,15 @@ def display_actor(actor):
|
|||
if actor.get(key):
|
||||
return actor[key]
|
||||
return str(actor)
|
||||
|
||||
|
||||
class SpatialiteNotFound(Exception):
|
||||
pass
|
||||
|
||||
|
||||
# Can replace with sqlite-utils when I add that dependency
|
||||
def find_spatialite():
|
||||
for path in SPATIALITE_PATHS:
|
||||
if os.path.exists(path):
|
||||
return path
|
||||
raise SpatialiteNotFound
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue