kopia lustrzana https://github.com/simonw/datasette
Cleaned up view_definition/table_definition code in table view
Also moved those out of standard JSON into just the HTML template contextasgi-first-attempt
rodzic
7e0caa1e62
commit
0c22fa8f09
|
@ -171,6 +171,21 @@ class Datasette:
|
||||||
if query:
|
if query:
|
||||||
return {"name": query_name, "sql": query}
|
return {"name": query_name, "sql": query}
|
||||||
|
|
||||||
|
async def get_table_definition(self, database_name, table, type_="table"):
|
||||||
|
table_definition_rows = list(
|
||||||
|
await self.execute(
|
||||||
|
database_name,
|
||||||
|
'select sql from sqlite_master where name = :n and type=:t',
|
||||||
|
{"n": table, "t": type_},
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if not table_definition_rows:
|
||||||
|
return None
|
||||||
|
return table_definition_rows[0][0]
|
||||||
|
|
||||||
|
def get_view_definition(self, database_name, view):
|
||||||
|
return self.get_table_definition(database_name, view, 'view')
|
||||||
|
|
||||||
def asset_urls(self, key):
|
def asset_urls(self, key):
|
||||||
# Flatten list-of-lists from plugins:
|
# Flatten list-of-lists from plugins:
|
||||||
seen_urls = set()
|
seen_urls = set()
|
||||||
|
|
|
@ -243,39 +243,12 @@ class TableView(RowTableShared):
|
||||||
canned_query=table,
|
canned_query=table,
|
||||||
)
|
)
|
||||||
|
|
||||||
is_view = bool(
|
is_view = bool(await self.ds.get_view_definition(name, table))
|
||||||
list(
|
|
||||||
await self.ds.execute(
|
|
||||||
name,
|
|
||||||
"SELECT count(*) from sqlite_master WHERE type = 'view' and name=:n",
|
|
||||||
{"n": table},
|
|
||||||
)
|
|
||||||
)[0][0]
|
|
||||||
)
|
|
||||||
view_definition = None
|
|
||||||
table_definition = None
|
|
||||||
if is_view:
|
|
||||||
view_definition = list(
|
|
||||||
await self.ds.execute(
|
|
||||||
name,
|
|
||||||
'select sql from sqlite_master where name = :n and type="view"',
|
|
||||||
{"n": table},
|
|
||||||
)
|
|
||||||
)[0][0]
|
|
||||||
else:
|
|
||||||
table_definition_rows = list(
|
|
||||||
await self.ds.execute(
|
|
||||||
name,
|
|
||||||
'select sql from sqlite_master where name = :n and type="table"',
|
|
||||||
{"n": table},
|
|
||||||
)
|
|
||||||
)
|
|
||||||
if not table_definition_rows:
|
|
||||||
raise NotFound("Table not found: {}".format(table))
|
|
||||||
|
|
||||||
table_definition = table_definition_rows[0][0]
|
|
||||||
info = self.ds.inspect()
|
info = self.ds.inspect()
|
||||||
table_info = info[name]["tables"].get(table) or {}
|
table_info = info[name]["tables"].get(table) or {}
|
||||||
|
if not is_view and not table_info:
|
||||||
|
raise NotFound("Table not found: {}".format(table))
|
||||||
|
|
||||||
pks = table_info.get("primary_keys") or []
|
pks = table_info.get("primary_keys") or []
|
||||||
use_rowid = not pks and not is_view
|
use_rowid = not pks and not is_view
|
||||||
if use_rowid:
|
if use_rowid:
|
||||||
|
@ -749,14 +722,14 @@ class TableView(RowTableShared):
|
||||||
"_rows_and_columns.html",
|
"_rows_and_columns.html",
|
||||||
],
|
],
|
||||||
"metadata": metadata,
|
"metadata": metadata,
|
||||||
|
"view_definition": await self.ds.get_view_definition(name, table),
|
||||||
|
"table_definition": await self.ds.get_table_definition(name, table),
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"database": name,
|
"database": name,
|
||||||
"table": table,
|
"table": table,
|
||||||
"is_view": is_view,
|
"is_view": is_view,
|
||||||
"view_definition": view_definition,
|
|
||||||
"table_definition": table_definition,
|
|
||||||
"human_description_en": human_description_en,
|
"human_description_en": human_description_en,
|
||||||
"rows": rows[:page_size],
|
"rows": rows[:page_size],
|
||||||
"truncated": results.truncated,
|
"truncated": results.truncated,
|
||||||
|
|
Ładowanie…
Reference in New Issue