mirror of
https://github.com/simonw/datasette.git
synced 2026-06-18 14:57:48 +02:00
* Add schema endpoints for databases, instances, and tables Closes: #2586 This commit adds new endpoints to view database schemas in multiple formats: - /-/schema - View schemas for all databases (HTML, JSON, MD) - /database/-/schema - View schema for a specific database (HTML, JSON, MD) - /database/table/-/schema - View schema for a specific table (JSON, MD) Features: - Supports HTML, JSON, and Markdown output formats - Respects view-database and view-table permissions - Uses group_concat(sql, ';' || CHAR(10)) from sqlite_master to retrieve schemas - Includes comprehensive tests covering all formats and permission checks The JSON endpoints return: - Instance level: {"schemas": [{"database": "name", "schema": "sql"}, ...]} - Database level: {"database": "name", "schema": "sql"} - Table level: {"database": "name", "table": "name", "schema": "sql"} Markdown format provides formatted output with headings and SQL code blocks. Co-Authored-By: Claude <noreply@anthropic.com>
41 lines
1.3 KiB
HTML
41 lines
1.3 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}{% if is_instance %}Schema for all databases{% elif table_name %}Schema for {{ schemas[0].database }}.{{ table_name }}{% else %}Schema for {{ schemas[0].database }}{% endif %}{% endblock %}
|
|
|
|
{% block body_class %}schema{% endblock %}
|
|
|
|
{% block crumbs %}
|
|
{% if is_instance %}
|
|
{{ crumbs.nav(request=request) }}
|
|
{% elif table_name %}
|
|
{{ crumbs.nav(request=request, database=schemas[0].database, table=table_name) }}
|
|
{% else %}
|
|
{{ crumbs.nav(request=request, database=schemas[0].database) }}
|
|
{% endif %}
|
|
{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="page-header">
|
|
<h1>{% if is_instance %}Schema for all databases{% elif table_name %}Schema for {{ table_name }}{% else %}Schema for {{ schemas[0].database }}{% endif %}</h1>
|
|
</div>
|
|
|
|
{% for item in schemas %}
|
|
{% if is_instance %}
|
|
<h2>{{ item.database }}</h2>
|
|
{% endif %}
|
|
|
|
{% if item.schema %}
|
|
<pre style="background-color: #f5f5f5; padding: 1em; overflow-x: auto; border: 1px solid #ddd; border-radius: 4px;"><code>{{ item.schema }}</code></pre>
|
|
{% else %}
|
|
<p><em>No schema available for this database.</em></p>
|
|
{% endif %}
|
|
|
|
{% if not loop.last %}
|
|
<hr style="margin: 2em 0;">
|
|
{% endif %}
|
|
{% endfor %}
|
|
|
|
{% if not schemas %}
|
|
<p><em>No databases with viewable schemas found.</em></p>
|
|
{% endif %}
|
|
{% endblock %}
|