Rename "datasette publish now" to "datasette publish nowv1"

Also added an alias so "datasette publish now" continues to work.

Closes #472
pull/479/head
Simon Willison 2019-05-19 11:06:51 -07:00
rodzic 81ba98a509
commit 7d8573d672
8 zmienionych plików z 32 dodań i 16 usunięć

Wyświetl plik

@ -27,7 +27,7 @@ jobs:
- npm install -g now - npm install -g now
- python tests/fixtures.py fixtures.db fixtures.json - python tests/fixtures.py fixtures.db fixtures.json
- export ALIAS=`echo $TRAVIS_COMMIT | cut -c 1-7` - export ALIAS=`echo $TRAVIS_COMMIT | cut -c 1-7`
- datasette publish now fixtures.db -m fixtures.json --token=$NOW_TOKEN --branch=$TRAVIS_COMMIT --version-note=$TRAVIS_COMMIT --name=datasette-latest-$ALIAS --alias=latest.datasette.io --alias=$ALIAS.datasette.io - datasette publish nowv1 fixtures.db -m fixtures.json --token=$NOW_TOKEN --branch=$TRAVIS_COMMIT --version-note=$TRAVIS_COMMIT --name=datasette-latest-$ALIAS --alias=latest.datasette.io --alias=$ALIAS.datasette.io
- stage: release tagged version - stage: release tagged version
if: tag IS present if: tag IS present
python: 3.6 python: 3.6

Wyświetl plik

@ -98,7 +98,16 @@ async def inspect_(files, sqlite_extensions):
return data return data
@cli.group() class PublishAliases(click.Group):
aliases = {"now": "nowv1"}
def get_command(self, ctx, cmd_name):
if cmd_name in self.aliases:
return click.Group.get_command(self, ctx, self.aliases[cmd_name])
return click.Group.get_command(self, ctx, cmd_name)
@cli.group(cls=PublishAliases)
def publish(): def publish():
"Publish specified SQLite database files to the internet along with a Datasette-powered interface and API" "Publish specified SQLite database files to the internet along with a Datasette-powered interface and API"
pass pass

Wyświetl plik

@ -24,7 +24,7 @@ def publish_subcommand(publish):
@click.option("--token", help="Auth token to use for deploy") @click.option("--token", help="Auth token to use for deploy")
@click.option("--alias", multiple=True, help="Desired alias e.g. yoursite.now.sh") @click.option("--alias", multiple=True, help="Desired alias e.g. yoursite.now.sh")
@click.option("--spatialite", is_flag=True, help="Enable SpatialLite extension") @click.option("--spatialite", is_flag=True, help="Enable SpatialLite extension")
def now( def nowv1(
files, files,
metadata, metadata,
extra_options, extra_options,

Wyświetl plik

@ -1,6 +1,6 @@
$ datasette publish now --help $ datasette publish nowv1 --help
Usage: datasette publish now [OPTIONS] [FILES]... Usage: datasette publish nowv1 [OPTIONS] [FILES]...
Options: Options:
-m, --metadata FILENAME Path to JSON file containing metadata to publish -m, --metadata FILENAME Path to JSON file containing metadata to publish

Wyświetl plik

@ -57,7 +57,7 @@ Datasette can be deployed to Zeit Now's older v1 hosting platform. They no longe
To publish your database(s) to a new instance hosted by Zeit Now v1, install the `now cli tool <https://zeit.co/download>`__ and then run the following command:: To publish your database(s) to a new instance hosted by Zeit Now v1, install the `now cli tool <https://zeit.co/download>`__ and then run the following command::
datasette publish now mydatabase.db datasette publish nowv1 mydatabase.db
This will upload your database to Zeit Now, assign you a new URL and install and start a new instance of Datasette to serve your database. This will upload your database to Zeit Now, assign you a new URL and install and start a new instance of Datasette to serve your database.
@ -75,7 +75,7 @@ You can use ``anything-you-like.now.sh``, provided no one else has already regis
You can also use custom domains, if you `first register them with Zeit Now <https://zeit.co/docs/features/aliases>`_. You can also use custom domains, if you `first register them with Zeit Now <https://zeit.co/docs/features/aliases>`_.
.. literalinclude:: datasette-publish-now-help.txt .. literalinclude:: datasette-publish-nowv1-help.txt
Custom metadata and plugins Custom metadata and plugins
--------------------------- ---------------------------
@ -84,18 +84,18 @@ Custom metadata and plugins
You can define your own :ref:`metadata` and deploy that with your instance like so:: You can define your own :ref:`metadata` and deploy that with your instance like so::
datasette publish now mydatabase.db -m metadata.json datasette publish nowv1 mydatabase.db -m metadata.json
If you just want to set the title, license or source information you can do that directly using extra options to ``datasette publish``:: If you just want to set the title, license or source information you can do that directly using extra options to ``datasette publish``::
datasette publish now mydatabase.db \ datasette publish nowv1 mydatabase.db \
--title="Title of my database" \ --title="Title of my database" \
--source="Where the data originated" \ --source="Where the data originated" \
--source_url="http://www.example.com/" --source_url="http://www.example.com/"
You can also specify plugins you would like to install. For example, if you want to include the `datasette-vega <https://github.com/simonw/datasette-vega>`_ visualization plugin you can use the following:: You can also specify plugins you would like to install. For example, if you want to include the `datasette-vega <https://github.com/simonw/datasette-vega>`_ visualization plugin you can use the following::
datasette publish now mydatabase.db --install=datasette-vega datasette publish nowv1 mydatabase.db --install=datasette-vega
datasette package datasette package

Wyświetl plik

@ -34,7 +34,7 @@ def test_config_options_are_documented(config):
( (
("serve", "datasette-serve-help.txt"), ("serve", "datasette-serve-help.txt"),
("package", "datasette-package-help.txt"), ("package", "datasette-package-help.txt"),
("publish now", "datasette-publish-now-help.txt"), ("publish nowv1", "datasette-publish-nowv1-help.txt"),
("publish heroku", "datasette-publish-heroku-help.txt"), ("publish heroku", "datasette-publish-heroku-help.txt"),
("publish cloudrun", "datasette-publish-cloudrun-help.txt"), ("publish cloudrun", "datasette-publish-cloudrun-help.txt"),
), ),

Wyświetl plik

@ -10,7 +10,7 @@ def test_publish_now_requires_now(mock_which):
runner = CliRunner() runner = CliRunner()
with runner.isolated_filesystem(): with runner.isolated_filesystem():
open("test.db", "w").write("data") open("test.db", "w").write("data")
result = runner.invoke(cli.cli, ["publish", "now", "test.db"]) result = runner.invoke(cli.cli, ["publish", "nowv1", "test.db"])
assert result.exit_code == 1 assert result.exit_code == 1
assert "Publishing to Zeit Now requires now" in result.output assert "Publishing to Zeit Now requires now" in result.output
@ -19,11 +19,18 @@ def test_publish_now_requires_now(mock_which):
def test_publish_now_invalid_database(mock_which): def test_publish_now_invalid_database(mock_which):
mock_which.return_value = True mock_which.return_value = True
runner = CliRunner() runner = CliRunner()
result = runner.invoke(cli.cli, ["publish", "now", "woop.db"]) result = runner.invoke(cli.cli, ["publish", "nowv1", "woop.db"])
assert result.exit_code == 2 assert result.exit_code == 2
assert 'Path "woop.db" does not exist' in result.output assert 'Path "woop.db" does not exist' in result.output
@mock.patch("shutil.which")
def test_publish_now_using_now_alias(mock_which):
mock_which.return_value = True
result = CliRunner().invoke(cli.cli, ["publish", "now", "woop.db"])
assert result.exit_code == 2
@mock.patch("shutil.which") @mock.patch("shutil.which")
@mock.patch("datasette.publish.now.run") @mock.patch("datasette.publish.now.run")
def test_publish_now(mock_run, mock_which): def test_publish_now(mock_run, mock_which):
@ -31,7 +38,7 @@ def test_publish_now(mock_run, mock_which):
runner = CliRunner() runner = CliRunner()
with runner.isolated_filesystem(): with runner.isolated_filesystem():
open("test.db", "w").write("data") open("test.db", "w").write("data")
result = runner.invoke(cli.cli, ["publish", "now", "test.db"]) result = runner.invoke(cli.cli, ["publish", "nowv1", "test.db"])
assert 0 == result.exit_code assert 0 == result.exit_code
mock_run.assert_called_once_with("now", stdout=subprocess.PIPE) mock_run.assert_called_once_with("now", stdout=subprocess.PIPE)
@ -44,7 +51,7 @@ def test_publish_now_force_token(mock_run, mock_which):
with runner.isolated_filesystem(): with runner.isolated_filesystem():
open("test.db", "w").write("data") open("test.db", "w").write("data")
result = runner.invoke( result = runner.invoke(
cli.cli, ["publish", "now", "test.db", "--force", "--token=X"] cli.cli, ["publish", "nowv1", "test.db", "--force", "--token=X"]
) )
assert 0 == result.exit_code assert 0 == result.exit_code
mock_run.assert_called_once_with( mock_run.assert_called_once_with(

Wyświetl plik

@ -7,7 +7,7 @@ docs_path = Path(__file__).parent / "docs"
includes = ( includes = (
("serve", "datasette-serve-help.txt"), ("serve", "datasette-serve-help.txt"),
("package", "datasette-package-help.txt"), ("package", "datasette-package-help.txt"),
("publish now", "datasette-publish-now-help.txt"), ("publish nowv1", "datasette-publish-nowv1-help.txt"),
("publish heroku", "datasette-publish-heroku-help.txt"), ("publish heroku", "datasette-publish-heroku-help.txt"),
("publish cloudrun", "datasette-publish-cloudrun-help.txt"), ("publish cloudrun", "datasette-publish-cloudrun-help.txt"),
) )