mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
Compare commits
1 commit
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b1e168b9c9 |
3 changed files with 29 additions and 6 deletions
|
|
@ -356,12 +356,14 @@ class DataView(BaseView):
|
||||||
if "table_and_format" in args:
|
if "table_and_format" in args:
|
||||||
db = self.ds.databases[database]
|
db = self.ds.databases[database]
|
||||||
|
|
||||||
async def async_table_exists(t):
|
async def async_table_or_query_exists(t):
|
||||||
return await db.table_exists(t)
|
return await db.table_exists(t) or await self.ds.get_canned_query(
|
||||||
|
database, t, request.actor
|
||||||
|
)
|
||||||
|
|
||||||
table, _ext_format = await resolve_table_and_format(
|
table, _ext_format = await resolve_table_and_format(
|
||||||
table_and_format=urllib.parse.unquote_plus(args["table_and_format"]),
|
table_and_format=urllib.parse.unquote_plus(args["table_and_format"]),
|
||||||
table_exists=async_table_exists,
|
table_exists=async_table_or_query_exists,
|
||||||
allowed_formats=self.ds.renderers.keys(),
|
allowed_formats=self.ds.renderers.keys(),
|
||||||
)
|
)
|
||||||
_format = _format or _ext_format
|
_format = _format or _ext_format
|
||||||
|
|
|
||||||
|
|
@ -144,6 +144,7 @@ class QueryView(DataView):
|
||||||
_size=None,
|
_size=None,
|
||||||
named_parameters=None,
|
named_parameters=None,
|
||||||
write=False,
|
write=False,
|
||||||
|
json_format=False,
|
||||||
):
|
):
|
||||||
params = {key: request.args.get(key) for key in request.args}
|
params = {key: request.args.get(key) for key in request.args}
|
||||||
if "sql" in params:
|
if "sql" in params:
|
||||||
|
|
@ -212,6 +213,16 @@ class QueryView(DataView):
|
||||||
message = metadata.get("on_error_message") or str(e)
|
message = metadata.get("on_error_message") or str(e)
|
||||||
message_type = self.ds.ERROR
|
message_type = self.ds.ERROR
|
||||||
redirect_url = metadata.get("on_error_redirect")
|
redirect_url = metadata.get("on_error_redirect")
|
||||||
|
if json_format:
|
||||||
|
return (
|
||||||
|
{
|
||||||
|
"message": message,
|
||||||
|
"message_type": message_type,
|
||||||
|
"redirect_url": redirect_url,
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
[],
|
||||||
|
)
|
||||||
self.ds.add_message(request, message, message_type)
|
self.ds.add_message(request, message, message_type)
|
||||||
return self.redirect(request, redirect_url or request.path)
|
return self.redirect(request, redirect_url or request.path)
|
||||||
else:
|
else:
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ from datasette.utils import (
|
||||||
path_with_added_args,
|
path_with_added_args,
|
||||||
path_with_removed_args,
|
path_with_removed_args,
|
||||||
path_with_replaced_args,
|
path_with_replaced_args,
|
||||||
|
resolve_table_and_format,
|
||||||
sqlite3,
|
sqlite3,
|
||||||
to_css_class,
|
to_css_class,
|
||||||
urlsafe_components,
|
urlsafe_components,
|
||||||
|
|
@ -223,9 +224,17 @@ class TableView(RowTableShared):
|
||||||
|
|
||||||
async def post(self, request, db_name, table_and_format):
|
async def post(self, request, db_name, table_and_format):
|
||||||
# Handle POST to a canned query
|
# Handle POST to a canned query
|
||||||
canned_query = await self.ds.get_canned_query(
|
async def async_query_exists(query):
|
||||||
db_name, table_and_format, request.actor
|
canned_query = await self.ds.get_canned_query(db_name, query, request.actor)
|
||||||
|
return bool(canned_query)
|
||||||
|
|
||||||
|
query, _format = await resolve_table_and_format(
|
||||||
|
table_and_format=urllib.parse.unquote_plus(table_and_format),
|
||||||
|
table_exists=async_query_exists,
|
||||||
|
allowed_formats=self.ds.renderers.keys(),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
canned_query = await self.ds.get_canned_query(db_name, query, request.actor)
|
||||||
assert canned_query, "You may only POST to a canned query"
|
assert canned_query, "You may only POST to a canned query"
|
||||||
return await QueryView(self.ds).data(
|
return await QueryView(self.ds).data(
|
||||||
request,
|
request,
|
||||||
|
|
@ -234,9 +243,10 @@ class TableView(RowTableShared):
|
||||||
canned_query["sql"],
|
canned_query["sql"],
|
||||||
metadata=canned_query,
|
metadata=canned_query,
|
||||||
editable=False,
|
editable=False,
|
||||||
canned_query=table_and_format,
|
canned_query=query,
|
||||||
named_parameters=canned_query.get("params"),
|
named_parameters=canned_query.get("params"),
|
||||||
write=bool(canned_query.get("write")),
|
write=bool(canned_query.get("write")),
|
||||||
|
json_format=(_format == "json"),
|
||||||
)
|
)
|
||||||
|
|
||||||
async def data(
|
async def data(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue