Simon Willison
754836eef0
New experimental Row() for templates, refs #521
2019-07-02 20:23:05 -07:00
Simon Willison
ba8db9679f
Port Datasette from Sanic to ASGI + Uvicorn ( #518 )
...
Datasette now uses ASGI internally, and no longer depends on Sanic.
It now uses Uvicorn as the underlying HTTP server.
This was thirteen months in the making... for full details see the issue:
https://github.com/simonw/datasette/issues/272
And for a full sequence of commits plus commentary, see the pull request:
https://github.com/simonw/datasette/pull/518
2019-06-23 20:13:09 -07:00
Simon Willison
35429f9089
Revert "New encode/decode_path_component functions"
...
Refs #272
This reverts commit 9fdb47ca95 .
Now that ASGI supports raw_path we don't need our own encoding scheme!
2019-06-18 17:23:27 -07:00
Simon Willison
d4df640d18
Refactored view class hierarchy, refs #272
...
See https://github.com/simonw/datasette/issues/272#issuecomment-502393107
2019-06-15 12:41:34 -07:00
Simon Willison
9c58d048ec
Fix pagination when sorted by expanded foreign key
...
Closes #489
2019-05-27 19:23:18 -07:00
Simon Willison
f069950a14
Removed obsolete __init__ method
2019-05-27 19:03:36 -07:00
Simon Willison
bd4dbc8519
Rename InterruptedError => QueryInterrupted, closes #490
2019-05-27 17:16:36 -07:00
Simon Willison
edb36629e7
Database.get_outbound_foreign_keys() refactor
...
Following this, the only module that ever makes calls to the low-level
execute_against_connection_in_thread() method is datasette/database.py
2019-05-27 11:41:44 -07:00
Simon Willison
20f98c3e20
Databse.primary_keys(table) / fts_table(table) refactor, closes #488
...
Also cleaned up some unused imports spotted by the linter.
2019-05-27 11:27:42 -07:00
Simon Willison
6569287d90
Refactored ConnectedDatabase to datasette/database.py
...
Closes #487
2019-05-26 22:07:43 -07:00
Simon Willison
026c84db30
Refactor Datasette methods to ConnectedDatabase
...
Refs #487
2019-05-26 21:56:43 -07:00
Simon Willison
182a3017c2
Sort keys to past tests in Python 3.5
2019-05-25 09:22:02 -07:00
Simon Willison
9bd39672de
Better label detection, refs #485
...
This needs unit tests.
2019-05-25 09:14:57 -07:00
Simon Willison
d923d84754
Facet by many-to-many, closes #365
2019-05-25 09:06:32 -07:00
Simon Willison
172da009d8
Added ?_through= table argument, closes #355
...
Also added much more interesting many-to-many fixtures - roadside attractions!
2019-05-22 22:45:12 -07:00
Simon Willison
967230c90e
Facet by date, closes #481
2019-05-20 23:09:22 -07:00
Simon Willison
de4503a136
Fix ?col__date= for columns with spaces
2019-05-20 22:36:56 -07:00
Simon Willison
e513a80afb
Use -i with datasette publish, closes #469
2019-05-19 15:53:34 -07:00
Simon Willison
f4eefdf193
Do not allow downloads of mutable databases - closes #474
2019-05-19 13:41:09 -07:00
Simon Willison
503fee891b
Removed 'datasette skeleton', closes #476
2019-05-19 13:05:38 -07:00
Simon Willison
7d8573d672
Rename "datasette publish now" to "datasette publish nowv1"
...
Also added an alias so "datasette publish now" continues to work.
Closes #472
2019-05-19 11:06:51 -07:00
Simon Willison
db9dbfb816
?_hash=1 no longer respected for mutable databases
...
Closes #471 , refs #419
2019-05-16 08:10:25 -07:00
Simon Willison
cccea85be6
/-/databases sorts alphabetically
...
Should fix test failure in Python 3.5
2019-05-16 07:56:13 -07:00
Simon Willison
0dad111d24
New introspection endpoint: /-/databases - closes #470
...
Refs #419 and #465
2019-05-16 07:49:34 -07:00
Simon Willison
21b57cdf9a
serve --inspect-file=X now populates cached table counts
...
Closes #462
2019-05-16 07:30:32 -07:00
Simon Willison
909e66dfdb
Removed .inspect() and /-/inspect.json
...
Refs #462
/-/inspect.json may return in some shape in #465
2019-05-16 07:15:24 -07:00
Simon Willison
666c37415a
publish heroku now uses Python 3.6.8
...
Also refactored temporary_heroku_directory out of utils.py
2019-05-15 21:32:23 -07:00
Simon Willison
2ad9d15cd6
Table counts now handles SQL Logic Error too
...
I tried running Datasette against 22 database files at once and ran into
a weird error where the table counts broke with an SQL Logic Error
exception. Easy fix: catch that exception too and treat it the same as a
regular Interrupted error.
2019-05-15 20:55:28 -07:00
Simon Willison
b7fe722f05
Removed rogue print()
2019-05-15 20:25:51 -07:00
Simon Willison
faf33515b2
Sometimes sort tables by number of relationships, closes #460
2019-05-15 20:23:33 -07:00
Simon Willison
689cf9c139
Index page only shows row counts for smaller databases
...
The index page now only shows row counts for immutable databases OR for
databases with less than 30 tables provided it could get a count for
each of those tables in less than 10ms.
Closes #467 , Refs #460
2019-05-15 20:02:33 -07:00
Simon Willison
79303163b2
Row count fix + sort index page databases alphabetically
...
Sorting alphabetically should fix a test failure in Python 3.5
Refs #460
2019-05-15 17:40:10 -07:00
Simon Willison
5d6b2c30f1
Include views on homepage, fix table counts
...
If we have less than 5 tables we now also show one or more views in the
summary on the homepage.
Also corrected the logic for the row counts - we now count hidden and
visible tables separately.
Closes #373 , Refs #460
2019-05-15 17:28:07 -07:00
Simon Willison
e04511410f
Don't show hidden tables on index page, closes #455
...
Refs #460 . Also bulked out HTML index page unit tests.
2019-05-14 08:46:57 -07:00
Simon Willison
24bf79d2f0
Run sanity checks, not .inspect(), on startup
...
Also fixes tests that did NOT like a call to run_until_complete in the Datasette() constructor.
2019-05-11 16:22:55 -07:00
Simon Willison
da0b3ce2b7
New run_sanity_checks mechanism, for SpatiLite
...
Moved VirtualSpatialIndex check into a new mechanism that should allow
us to add further sanity checks in the future.
To test this I've had to commit a binary sample SpatiaLite database to
the repository. I included a build script for creating that database.
Closes #466
2019-05-11 15:55:30 -07:00
Simon Willison
c0d1b4c322
"datasette inspect foo.db" now just calculates table counts
...
Refs #462
* inspect command now just outputs table counts
* test_inspect.py is now only tests for that CLI command
* Updated some relevant documentation
* Removed docs for /-/inspect since that is about to change
2019-05-11 14:36:57 -07:00
Simon Willison
05cabaebd9
Pass --token to now alias, refs #459
2019-05-11 13:35:34 -07:00
Simon Willison
09ef305c68
Fixed "datasette publish now ... --alias=x"
...
The --alias argument can now be passed more than once.
Also updated our Travis configuration to use this.
Fixes #459
2019-05-11 13:20:36 -07:00
Simon Willison
a0d444837f
Finished implementation of ?_trace=1 debug tool
...
I redesigned the JSON output and added a handy "traceback" key showing
three relevant lines of the current traceback for each logged query.
Closes #435
2019-05-11 12:06:22 -07:00
Simon Willison
de005b9b7d
Fixed 500 error on homepage
2019-05-09 22:28:16 -07:00
Simon Willison
f825e20121
Run black and update docs for #457
2019-05-09 09:48:13 -07:00
Simon Willison
b80b03ac9a
datasette publish cloudrun --service=x, closes #457
2019-05-09 09:45:01 -07:00
Simon Willison
9fdb47ca95
New encode/decode_path_component functions
...
ASGI cannot differentiate between / and %2F in a URL, so we need an
alternative scheme for encoding the names of tables that contain special
characters such as /
For background, see
https://github.com/django/asgiref/issues/51#issuecomment-450603464
Some examples:
"table/and/slashes" => "tableU+002FandU+002Fslashes"
"~table" => "U+007Etable"
"+bobcats!" => "U+002Bbobcats!"
"U+007Etable" => "UU+002B007Etable"
2019-05-09 09:44:21 -07:00
Simon Willison
ec2db345e9
Fixed crash on /:memory: page
2019-05-05 14:01:14 -04:00
Simon Willison
9617e92aa8
Removed pointless return variable
...
handle_request() always returns None anyway.
2019-05-05 13:58:35 -04:00
Simon Willison
831515b834
Respect --cors for error pages, closes #453
2019-05-05 08:12:03 -04:00
Simon Willison
35d6ee2790
Apply black to everything, enforce via unit tests ( #449 )
...
I've run the black code formatting tool against everything:
black tests datasette setup.py
I also added a new unit test, in tests/test_black.py, which will fail if the code does not
conform to black's exacting standards.
This unit test only runs on Python 3.6 or higher, because black itself doesn't run on 3.5.
2019-05-03 22:15:14 -04:00
Simon Willison
93c65d29ba
Fixed 500 error on /-/metadata page
2019-05-03 16:42:59 -04:00
Simon Willison
01b3de5b66
Unit test for binary data display, refs #442
2019-05-03 12:45:06 -04:00