2018-05-13 12:58:28 +00:00
|
|
|
import json
|
|
|
|
|
2018-05-13 12:44:22 +00:00
|
|
|
from sanic import response
|
2018-05-13 12:58:28 +00:00
|
|
|
|
2018-05-13 12:55:15 +00:00
|
|
|
from datasette.utils import CustomJSONEncoder
|
2018-05-13 12:44:22 +00:00
|
|
|
from datasette.version import __version__
|
2018-05-13 12:58:28 +00:00
|
|
|
|
|
|
|
from .base import HASH_LENGTH, RenderMixin
|
2018-05-13 12:44:22 +00:00
|
|
|
|
|
|
|
|
|
|
|
class IndexView(RenderMixin):
|
2018-05-13 12:55:15 +00:00
|
|
|
|
2018-05-13 12:44:22 +00:00
|
|
|
def __init__(self, datasette):
|
|
|
|
self.ds = datasette
|
|
|
|
|
2018-06-15 06:51:23 +00:00
|
|
|
async def get(self, request, as_format):
|
2018-05-13 12:44:22 +00:00
|
|
|
databases = []
|
|
|
|
for key, info in sorted(self.ds.inspect().items()):
|
2018-05-13 12:55:15 +00:00
|
|
|
tables = [t for t in info["tables"].values() if not t["hidden"]]
|
|
|
|
hidden_tables = [t for t in info["tables"].values() if t["hidden"]]
|
2018-05-13 12:44:22 +00:00
|
|
|
database = {
|
2018-05-13 12:55:15 +00:00
|
|
|
"name": key,
|
|
|
|
"hash": info["hash"],
|
|
|
|
"path": "{}-{}".format(key, info["hash"][:HASH_LENGTH]),
|
|
|
|
"tables_truncated": sorted(
|
|
|
|
tables, key=lambda t: t["count"], reverse=True
|
|
|
|
)[
|
|
|
|
:5
|
|
|
|
],
|
|
|
|
"tables_count": len(tables),
|
|
|
|
"tables_more": len(tables) > 5,
|
|
|
|
"table_rows_sum": sum(t["count"] for t in tables),
|
|
|
|
"hidden_table_rows_sum": sum(t["count"] for t in hidden_tables),
|
|
|
|
"hidden_tables_count": len(hidden_tables),
|
|
|
|
"views_count": len(info["views"]),
|
2018-05-13 12:44:22 +00:00
|
|
|
}
|
|
|
|
databases.append(database)
|
2018-06-15 06:51:23 +00:00
|
|
|
if as_format:
|
2018-05-13 12:44:22 +00:00
|
|
|
headers = {}
|
|
|
|
if self.ds.cors:
|
2018-05-13 12:55:15 +00:00
|
|
|
headers["Access-Control-Allow-Origin"] = "*"
|
2018-05-13 12:44:22 +00:00
|
|
|
return response.HTTPResponse(
|
2018-05-13 12:55:15 +00:00
|
|
|
json.dumps({db["name"]: db for db in databases}, cls=CustomJSONEncoder),
|
|
|
|
content_type="application/json",
|
2018-05-13 12:44:22 +00:00
|
|
|
headers=headers,
|
|
|
|
)
|
2018-05-13 12:55:15 +00:00
|
|
|
|
2018-05-13 12:44:22 +00:00
|
|
|
else:
|
|
|
|
return self.render(
|
2018-05-13 12:55:15 +00:00
|
|
|
["index.html"],
|
2018-05-13 12:44:22 +00:00
|
|
|
databases=databases,
|
|
|
|
metadata=self.ds.metadata,
|
|
|
|
datasette_version=__version__,
|
|
|
|
extra_css_urls=self.ds.extra_css_urls(),
|
|
|
|
extra_js_urls=self.ds.extra_js_urls(),
|
|
|
|
)
|