From cef23e88617dcd7edae22fca813d345dfaf09c4f Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Sat, 2 May 2020 20:01:21 -0700 Subject: [PATCH] Started pattern portfolio at /-/patterns, refs #151 --- datasette/app.py | 5 +- datasette/templates/patterns.html | 315 ++++++++++++++++++++++++++++++ datasette/views/base.py | 3 +- datasette/views/special.py | 10 + tests/test_docs.py | 2 + 5 files changed, 333 insertions(+), 2 deletions(-) create mode 100644 datasette/templates/patterns.html diff --git a/datasette/app.py b/datasette/app.py index 320cc621..b541a9a4 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -23,7 +23,7 @@ import uvicorn from .views.base import DatasetteError, ureg, AsgiRouter from .views.database import DatabaseDownload, DatabaseView from .views.index import IndexView -from .views.special import JsonDataView +from .views.special import JsonDataView, PatternPortfolioView from .views.table import RowView, TableView from .renderer import json_renderer from .database import Database @@ -735,6 +735,9 @@ class Datasette: JsonDataView.as_asgi(self, "databases.json", self.connected_databases), r"/-/databases(?P(\.json)?)$", ) + add_route( + PatternPortfolioView.as_asgi(self), r"/-/patterns$", + ) add_route( DatabaseDownload.as_asgi(self), r"/(?P[^/]+?)(?P\.db)$" ) diff --git a/datasette/templates/patterns.html b/datasette/templates/patterns.html new file mode 100644 index 00000000..9ea4ae42 --- /dev/null +++ b/datasette/templates/patterns.html @@ -0,0 +1,315 @@ + + + + Datasette: Pattern Portfolio + + + + + + + +
+

Pattern Portfolio

+
+

.hd for /database/table/row

+ +

.bd for /

+
+

Datasette Fixtures

+ +

+ Data license: + Apache License 2.0 + · + Data source: + + tests/fixtures.py + · + About: + + About Datasette +

+

fixtures

+

+ 1,258 rows in 24 tables, 206 rows in 5 hidden tables, 4 views +

+

compound_three_primary_keys, sortable, facetable, roadside_attraction_characteristics, simple_primary_key, ...

+

data

+

+ 6 rows in 2 tables +

+

names, foo

+
+

.bd for /database

+
+

fixtures

+ +

+ Data license: + Apache License 2.0 + · + Data source: + + tests/fixtures.py + · + About: + + About Datasette +

+
+

Custom SQL query

+

+

+ + +

+
+
+

123_starts_with_digits

+

content

+

0 rows

+
+
+

Table With Space In Name

+

pk, content

+

0 rows

+
+
+

attraction_characteristic

+

pk, name

+

2 rows

+
+
+

.bd for /database/table

+
+

roadside_attraction_characteristics

+

+ Data license: + Apache License 2.0 + · + Data source: + + tests/fixtures.py + · + About: + + About Datasette +

+

3 rows + where characteristic_id = 2 +

+
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+
+ +
+ + +
+
+

View and edit SQL

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Link + + rowid ▼ + + attraction_id + + characteristic_id +
1The Mystery Spot 1Paranormal 2
2Winchester Mystery House 2Paranormal 2
3Bigfoot Discovery Museum 4Paranormal 2
+
+

Advanced export

+

JSON shape: + default, + array, + newline-delimited +

+
+

+ CSV options: + + + + + +

+
+
+
CREATE TABLE roadside_attraction_characteristics (
+    attraction_id INTEGER REFERENCES roadside_attractions(pk),
+    characteristic_id INTEGER REFERENCES attraction_characteristic(pk)
+);
+
+

.bd for /database/table/row

+
+

roadside_attractions: 2

+

This data as json

+ + + + + + + + + + + + + + + + + + + +
+ pk + + name + + address + + latitude + + longitude +
2Winchester Mystery House525 South Winchester Boulevard, San Jose, CA 9512837.3184-121.9511
+

Links from other tables

+
    +
  • + + 1 row + from attraction_id in roadside_attraction_characteristics +
  • +
+
+

.ft

+
Powered by Datasette + · Data license: + Apache License 2.0 + · + Data source: + + tests/fixtures.py + · + About: + + About Datasette +
+ + diff --git a/datasette/views/base.py b/datasette/views/base.py index 2478bd84..e2bce2f9 100644 --- a/datasette/views/base.py +++ b/datasette/views/base.py @@ -72,7 +72,8 @@ class BaseView(AsgiView): def database_color(self, database): return "ff0000" - async def render(self, templates, request, context): + async def render(self, templates, request, context=None): + context = context or {} template = self.ds.jinja_env.select_template(templates) template_context = { **context, diff --git a/datasette/views/special.py b/datasette/views/special.py index 2b31028d..dfe5ea8c 100644 --- a/datasette/views/special.py +++ b/datasette/views/special.py @@ -32,3 +32,13 @@ class JsonDataView(BaseView): "data_json": json.dumps(data, indent=4), }, ) + + +class PatternPortfolioView(BaseView): + name = "patterns" + + def __init__(self, datasette): + self.ds = datasette + + async def get(self, request): + return await self.render(["patterns.html"], request=request,) diff --git a/tests/test_docs.py b/tests/test_docs.py index d7c5a534..77c2a611 100644 --- a/tests/test_docs.py +++ b/tests/test_docs.py @@ -65,6 +65,8 @@ def documented_views(): first_word = label.split("_")[0] if first_word.endswith("View"): view_labels.add(first_word) + # We deliberately don't document this one: + view_labels.add("PatternPortfolioView") return view_labels