Better error for --load-extensions, refs #1979

0.63.x
Simon Willison 2023-01-07 15:56:03 -08:00
rodzic 3b88ac671e
commit fdb4d975a1
1 zmienionych plików z 22 dodań i 1 usunięć

Wyświetl plik

@ -4,6 +4,7 @@ import click
from click import formatting
from click.types import CompositeParamType
from click_default_group import DefaultGroup
import functools
import json
import os
import pathlib
@ -11,6 +12,7 @@ import shutil
from subprocess import call
import sys
from runpy import run_module
import textwrap
import webbrowser
from .app import (
OBSOLETE_SETTINGS,
@ -126,7 +128,7 @@ class Setting(CompositeParamType):
def sqlite_extensions(fn):
return click.option(
fn = click.option(
"sqlite_extensions",
"--load-extension",
type=LoadExtension(),
@ -134,6 +136,25 @@ def sqlite_extensions(fn):
multiple=True,
help="Path to a SQLite extension to load, and optional entrypoint",
)(fn)
# Wrap it in a custom error handler
@functools.wraps(fn)
def wrapped(*args, **kwargs):
try:
return fn(*args, **kwargs)
except AttributeError as e:
if "enable_load_extension" in str(e):
raise click.ClickException(
textwrap.dedent(
"""
Your Python installation does not have the ability to load SQLite extensions.
More information: https://datasette.io/help/extensions
"""
).strip()
)
raise
return wrapped
@click.group(cls=DefaultGroup, default="serve", default_if_no_args=True)