diff --git a/datasette/publish/heroku.py b/datasette/publish/heroku.py index 171252ce..f576a346 100644 --- a/datasette/publish/heroku.py +++ b/datasette/publish/heroku.py @@ -3,7 +3,9 @@ from datasette import hookimpl import click import json import os +import pathlib import shlex +import shutil from subprocess import call, check_output import tempfile @@ -28,6 +30,11 @@ def publish_subcommand(publish): "--tar", help="--tar option to pass to Heroku, e.g. --tar=/usr/local/bin/gtar", ) + @click.option( + "--generate-dir", + type=click.Path(dir_okay=True, file_okay=False), + help="Output generated application files and stop without deploying", + ) def heroku( files, metadata, @@ -49,6 +56,7 @@ def publish_subcommand(publish): about_url, name, tar, + generate_dir, ): "Publish databases to Datasette running on Heroku" fail_if_publish_binary_not_installed( @@ -105,6 +113,16 @@ def publish_subcommand(publish): secret, extra_metadata, ): + if generate_dir: + # Recursively copy files from current working directory to it + if pathlib.Path(generate_dir).exists(): + raise click.ClickException("Directory already exists") + shutil.copytree(".", generate_dir) + click.echo( + f"Generated files written to {generate_dir}, stopping without deploying", + err=True, + ) + return app_name = None if name: # Check to see if this app already exists @@ -176,7 +194,7 @@ def temporary_heroku_directory( fp.write(json.dumps(metadata_content, indent=2)) with open("runtime.txt", "w") as fp: - fp.write("python-3.8.10") + fp.write("python-3.11.0") if branch: install = [ diff --git a/datasette/templates/_codemirror_foot.html b/datasette/templates/_codemirror_foot.html index 0c9255ab..a624c8a4 100644 --- a/datasette/templates/_codemirror_foot.html +++ b/datasette/templates/_codemirror_foot.html @@ -5,7 +5,7 @@ const schema = {}; {% endif %} - window.onload = () => { + window.addEventListener("DOMContentLoaded", () => { const sqlFormat = document.querySelector("button#sql-format"); const readOnly = document.querySelector("pre#sql-query"); const sqlInput = document.querySelector("textarea#sql-editor"); @@ -38,5 +38,5 @@ }); } } - }; + }); diff --git a/datasette/views/database.py b/datasette/views/database.py index 9e46ec3e..0d03d1f9 100644 --- a/datasette/views/database.py +++ b/datasette/views/database.py @@ -682,22 +682,6 @@ class TableCreateView(BaseView): return Response.json(details, status=201) -async def _table_columns(datasette, database_name): - internal = datasette.get_database("_internal") - result = await internal.execute( - "select table_name, name from columns where database_name = ?", - [database_name], - ) - table_columns = {} - for row in result.rows: - table_columns.setdefault(row["table_name"], []).append(row["name"]) - # Add views - db = datasette.get_database(database_name) - for view_name in await db.view_names(): - table_columns[view_name] = [] - return table_columns - - class TableCreateView(BaseView): name = "table-create" @@ -831,3 +815,19 @@ class TableCreateView(BaseView): if rows: details["row_count"] = len(rows) return Response.json(details, status=201) + + +async def _table_columns(datasette, database_name): + internal = datasette.get_database("_internal") + result = await internal.execute( + "select table_name, name from columns where database_name = ?", + [database_name], + ) + table_columns = {} + for row in result.rows: + table_columns.setdefault(row["table_name"], []).append(row["name"]) + # Add views + db = datasette.get_database(database_name) + for view_name in await db.view_names(): + table_columns[view_name] = [] + return table_columns diff --git a/docs/changelog.rst b/docs/changelog.rst index aaa2600f..7d228580 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -33,6 +33,13 @@ Write API - ``/db/table/pk/-/update`` API for :ref:`RowUpdateView`. (:issue:`1863`) - ``/db/table/pk/-/delete`` API for :ref:`RowDeleteView`. (:issue:`1864`) +.. _v0_63_2: + +0.63.2 (2022-11-18) +------------------- + +- Fixed a bug in ``datasette publish heroku`` where deployments failed due to an older version of Python being requested. (:issue:`1905`) +- New ``datasette publish heroku --generate-dir