mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
publish_subcommand hook + default plugins mechanism, used for publish heroku/now (#349)
This change introduces a new plugin hook, publish_subcommand, which can be used to implement new subcommands for the "datasette publish" command family. I've used this new hook to refactor out the "publish now" and "publish heroku" implementations into separate modules. I've also added unit tests for these two publishers, mocking the subprocess.call and subprocess.check_output functions. As part of this, I introduced a mechanism for loading default plugins. These are defined in the new "default_plugins" list inside datasette/app.py Closes #217 (Plugin support for datasette publish) Closes #348 (Unit tests for "datasette publish") Refs #14, #59, #102, #103, #146, #236, #347
This commit is contained in:
parent
3ac21c7498
commit
dbbe707841
15 changed files with 360 additions and 256 deletions
80
datasette/publish/now.py
Normal file
80
datasette/publish/now.py
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
from datasette import hookimpl
|
||||
import click
|
||||
from subprocess import call
|
||||
|
||||
from .common import (
|
||||
add_common_publish_arguments_and_options,
|
||||
fail_if_publish_binary_not_installed,
|
||||
)
|
||||
from ..utils import temporary_docker_directory
|
||||
|
||||
|
||||
@hookimpl
|
||||
def publish_subcommand(publish):
|
||||
@publish.command()
|
||||
@add_common_publish_arguments_and_options
|
||||
@click.option(
|
||||
"-n",
|
||||
"--name",
|
||||
default="datasette",
|
||||
help="Application name to use when deploying",
|
||||
)
|
||||
@click.option("--force", is_flag=True, help="Pass --force option to now")
|
||||
@click.option("--token", help="Auth token to use for deploy (Now only)")
|
||||
@click.option("--spatialite", is_flag=True, help="Enable SpatialLite extension")
|
||||
def now(
|
||||
files,
|
||||
metadata,
|
||||
extra_options,
|
||||
branch,
|
||||
template_dir,
|
||||
plugins_dir,
|
||||
static,
|
||||
install,
|
||||
version_note,
|
||||
title,
|
||||
license,
|
||||
license_url,
|
||||
source,
|
||||
source_url,
|
||||
name,
|
||||
force,
|
||||
token,
|
||||
spatialite,
|
||||
):
|
||||
fail_if_publish_binary_not_installed("now", "Zeit Now", "https://zeit.co/now")
|
||||
if extra_options:
|
||||
extra_options += " "
|
||||
else:
|
||||
extra_options = ""
|
||||
extra_options += "--config force_https_urls:on"
|
||||
|
||||
with temporary_docker_directory(
|
||||
files,
|
||||
name,
|
||||
metadata,
|
||||
extra_options,
|
||||
branch,
|
||||
template_dir,
|
||||
plugins_dir,
|
||||
static,
|
||||
install,
|
||||
spatialite,
|
||||
version_note,
|
||||
{
|
||||
"title": title,
|
||||
"license": license,
|
||||
"license_url": license_url,
|
||||
"source": source,
|
||||
"source_url": source_url,
|
||||
},
|
||||
):
|
||||
args = []
|
||||
if force:
|
||||
args.append("--force")
|
||||
if token:
|
||||
args.append("--token={}".format(token))
|
||||
if args:
|
||||
call(["now"] + args)
|
||||
else:
|
||||
call("now")
|
||||
Loading…
Add table
Add a link
Reference in a new issue