-o now opens to most relevant page, closes #976

This commit is contained in:
Simon Willison 2020-10-25 22:06:20 -07:00
commit f5dbe61a45
3 changed files with 47 additions and 4 deletions

View file

@ -17,6 +17,7 @@ from .utils import (
parse_metadata,
ConnectionProblem,
SpatialiteConnectionProblem,
initial_path_for_datasette,
temporary_docker_directory,
value_as_boolean,
SpatialiteNotFound,
@ -456,14 +457,19 @@ def serve(
return
# Start the server
url = None
if root:
url = "http://{}:{}{}?token={}".format(
host, port, ds.urls.path("-/auth-token"), ds._root_token
)
print(url)
else:
url = "http://{}:{}{}".format(host, port, ds.urls.instance())
if open_browser:
if url is None:
# Figure out most convenient URL - to table, database or homepage
path = asyncio.get_event_loop().run_until_complete(
initial_path_for_datasette(ds)
)
url = "http://{}:{}{}".format(host, port, path)
webbrowser.open(url)
uvicorn.run(
ds.app(), host=host, port=port, log_level="info", lifespan="on", workers=1

View file

@ -991,3 +991,18 @@ def find_spatialite():
if os.path.exists(path):
return path
raise SpatialiteNotFound
async def initial_path_for_datasette(datasette):
"Return suggested path for opening this Datasette, based on number of DBs and tables"
if len(datasette.databases) == 1:
db_name = next(iter(datasette.databases.keys()))
path = datasette.urls.database(db_name)
# Does this DB only have one table?
db = next(iter(datasette.databases.values()))
tables = await db.table_names()
if len(tables) == 1:
path = datasette.urls.table(db_name, tables[0])
else:
path = datasette.urls.instance()
return path