mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
Support title/description for canned queries, closes #342
Demo here: https://latest.datasette.io/fixtures/neighborhood_search
This commit is contained in:
parent
58fec99ab0
commit
6e37f091ed
9 changed files with 62 additions and 17 deletions
|
|
@ -174,6 +174,14 @@ class Datasette:
|
|||
]
|
||||
return self._app_css_hash
|
||||
|
||||
def get_canned_queries(self, database_name):
|
||||
names = self.metadata.get("databases", {}).get(database_name, {}).get(
|
||||
"queries", {}
|
||||
).keys()
|
||||
return [
|
||||
self.get_canned_query(database_name, name) for name in names
|
||||
]
|
||||
|
||||
def get_canned_query(self, database_name, query_name):
|
||||
query = self.metadata.get("databases", {}).get(database_name, {}).get(
|
||||
"queries", {}
|
||||
|
|
@ -181,7 +189,10 @@ class Datasette:
|
|||
query_name
|
||||
)
|
||||
if query:
|
||||
return {"name": query_name, "sql": query}
|
||||
if not isinstance(query, dict):
|
||||
query = {"sql": query}
|
||||
query["name"] = query_name
|
||||
return query
|
||||
|
||||
async def get_table_definition(self, database_name, table, type_="table"):
|
||||
table_definition_rows = list(
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
<h2>Queries</h2>
|
||||
<ul>
|
||||
{% for query in queries %}
|
||||
<li><a href="/{{ database }}-{{ database_hash }}/{{ query.name|urlencode }}" title="{{ query.sql }}">{{ query.name }}</a></li>
|
||||
<li><a href="/{{ database }}-{{ database_hash }}/{{ query.name|urlencode }}" title="{{ query.description or query.sql }}">{{ query.title or query.name }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,9 @@
|
|||
{% block content %}
|
||||
<div class="hd"><a href="/">home</a> / <a href="/{{ database }}-{{ database_hash }}">{{ database }}</a></div>
|
||||
|
||||
<h1 style="padding-left: 10px; border-left: 10px solid #{{ database_hash[:6] }}">{{ database }}</h1>
|
||||
<h1 style="padding-left: 10px; border-left: 10px solid #{{ database_hash[:6] }}">{{ metadata.title or database }}</h1>
|
||||
|
||||
{% block description_source_license %}{% include "_description_source_license.html" %}{% endblock %}
|
||||
|
||||
<form class="sql" action="/{{ database }}-{{ database_hash }}{% if canned_query %}/{{ canned_query }}{% endif %}" method="get">
|
||||
<h3>Custom SQL query{% if rows %} returning {% if truncated %}more than {% endif %}{{ "{:,}".format(rows|length) }} row{% if rows|length == 1 %}{% else %}s{% endif %}{% endif %}</h3>
|
||||
|
|
|
|||
|
|
@ -433,7 +433,7 @@ class BaseView(RenderMixin):
|
|||
|
||||
async def custom_sql(
|
||||
self, request, name, hash, sql, editable=True, canned_query=None,
|
||||
_size=None
|
||||
metadata=None, _size=None
|
||||
):
|
||||
params = request.raw_args
|
||||
if "sql" in params:
|
||||
|
|
@ -483,6 +483,7 @@ class BaseView(RenderMixin):
|
|||
"named_parameter_values": named_parameter_values,
|
||||
"editable": editable,
|
||||
"canned_query": canned_query,
|
||||
"metadata": metadata,
|
||||
"config": self.ds.config,
|
||||
}, templates
|
||||
|
||||
|
|
|
|||
|
|
@ -27,10 +27,7 @@ class DatabaseView(BaseView):
|
|||
"tables": tables,
|
||||
"hidden_count": len([t for t in tables if t["hidden"]]),
|
||||
"views": info["views"],
|
||||
"queries": [
|
||||
{"name": query_name, "sql": query_sql}
|
||||
for query_name, query_sql in (metadata.get("queries") or {}).items()
|
||||
],
|
||||
"queries": self.ds.get_canned_queries(name),
|
||||
}, {
|
||||
"database_hash": hash,
|
||||
"show_hidden": request.args.get("_show_hidden"),
|
||||
|
|
|
|||
|
|
@ -232,6 +232,7 @@ class TableView(RowTableShared):
|
|||
name,
|
||||
hash,
|
||||
canned_query["sql"],
|
||||
metadata=canned_query,
|
||||
editable=False,
|
||||
canned_query=table,
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue