Simon Willison
4976494160
Use dash-encoding for row PKs and ?_next=, refs #1439
2022-03-06 14:07:03 -08:00
Simon Willison
d2e3fe3fac
dash encoding is now like percent encoding but with dashes
...
Refs https://github.com/simonw/datasette/issues/1439#issuecomment-1059851259
2022-03-06 10:53:25 -08:00
Simon Willison
d1cb73180b
Dash encoding functions, tests and docs, refs #1439
2022-03-05 11:31:49 -08:00
Simon Willison
63537dd3de
Allow 'explain query plan' with more whitespace, closes #1588
2022-01-13 12:34:55 -08:00
Simon Willison
b1fed48a95
derive_named_parameters falls back to regex on SQL error, refs #1421
2021-08-08 20:26:08 -07:00
Simon Willison
fc4846850f
New way of deriving named parameters using explain, refs #1421
2021-08-08 20:21:13 -07:00
Simon Willison
121e10c29c
Doumentation and test for utils.parse_metadata(), closes #1405
2021-07-29 16:30:12 -07:00
Simon Willison
0f1e47287c
Fixed bug with detect_fts for table with single quote in name, closes #1257
2021-06-01 20:27:04 -07:00
Konstantin Baikov
8e18c79431
Use context manager instead of plain open ( #1211 )
...
Context manager with open closes the files after usage.
When the object is already a pathlib.Path i used read_text
write_text functions
In some cases pathlib.Path.open were used in context manager,
it is basically the same as builtin open.
Thanks, Konstantin Baikov!
2021-03-11 08:15:49 -08:00
Simon Willison
461670a0b8
Support for generated columns
...
* Support for generated columns, closes #1116
* Show SQLite version in pytest report header
* Use table_info() if SQLite < 3.26.0
* Cache sqlite_version() rather than re-calculate every time
* Adjust test_database_page for SQLite 3.26.0 or higher
2020-11-30 13:29:57 -08:00
Simon Willison
30e64c8d3b
Use f-strings in place of .format()
...
Code transformed like so:
pip install flynt
flynt .
black .
2020-11-15 15:24:22 -08:00
Simon Willison
11eb1e026f
datasette.urls.table(..., format="json"), closes #1035
...
Also improved tests for datasette.urls and added format= to some other methods
2020-10-31 11:16:28 -07:00
Simon Willison
178b7e8749
.csv now links to .blob downloads
...
Closes #1063 , closes #1034
2020-10-29 15:47:32 -07:00
Simon Willison
f5dbe61a45
-o now opens to most relevant page, closes #976
2020-10-25 22:06:20 -07:00
Simon Willison
5b8b8ae597
Handle \r\n correctly in CSS escapes, refs #980
2020-09-29 12:16:30 -07:00
Simon Willison
c11383e628
Fix rendering glitch with columns on mobile, closes #978
2020-09-28 15:42:50 -07:00
Simon Willison
092874202c
Improvements to allow block logic and debug tool
...
true and false allow block values are now supported, closes #906
Added a bunch of demo links to the documentation, refs #908
2020-07-24 17:04:06 -07:00
Simon Willison
2115d7e345
Logout link in nav, refs #875
2020-06-29 11:40:40 -07:00
Simon Willison
fba8ff6e76
"$env": "X" mechanism now works with nested lists, closes #837
2020-06-11 17:21:48 -07:00
Simon Willison
f39f111331
Fixed actor_matches_allow bug, closes #836
2020-06-11 15:47:19 -07:00
Simon Willison
98632f0a87
--secret command for datasette publish
...
Closes #787
2020-06-11 09:02:03 -07:00
Simon Willison
198545733b
Document that "allow": {} denies all
...
https://github.com/simonw/datasette/issues/831#issuecomment-642324847
2020-06-10 16:56:53 -07:00
Simon Willison
7633b9ab24
unauthenticated: true method plus allow block docs, closes #825
2020-06-09 10:01:03 -07:00
Simon Willison
eb3ec279be
Test for anonymous: true, refs #825
2020-06-08 23:33:06 -07:00
Simon Willison
3f83d4632a
Respect query permissions on database page, refs #800
2020-06-06 12:05:22 -07:00
Simon Willison
14f6b4d200
actor_matches_allow utility function, refs #800
2020-06-06 11:39:11 -07:00
Simon Willison
f786033a5f
Fixed 'datasette plugins' command, with tests - closes #802
2020-06-05 16:46:37 -07:00
Simon Willison
84a9c4ff75
CSRF protection ( #798 )
...
Closes #793 .
* Rename RequestParameters to MultiParams, refs #799
* Allow tuples as well as lists in MultiParams, refs #799
* Use csrftokens when running tests, refs #799
* Use new csrftoken() function, refs https://github.com/simonw/asgi-csrf/issues/7
* Check for Vary: Cookie hedaer, refs https://github.com/simonw/asgi-csrf/issues/8
2020-06-05 12:05:57 -07:00
Simon Willison
d96ac1d52c
Allow tuples as well as lists in MultiParams, refs #799
2020-06-05 11:01:06 -07:00
Simon Willison
0da7f49b24
Rename RequestParameters to MultiParams, refs #799
2020-06-05 10:52:50 -07:00
Simon Willison
de1cde65a6
Moved request tests to test_internals_request.py
2020-05-30 10:45:11 -07:00
Simon Willison
81be31322a
New implementation for RequestParams
...
- no longer subclasses dict
- request.args[key] now returns first item, not all items
- removed request.raw_args entirely
Closes #774
2020-05-29 16:22:22 -07:00
Simon Willison
84616a2364
request.args.getlist() returns [] if missing, refs #774
...
Also added some unit tests for request.args
2020-05-29 15:51:30 -07:00
Simon Willison
41a0cd7b6a
call_with_supported_arguments() util, refs #581
2020-05-27 12:25:52 -07:00
Simon Willison
0784f2ef9d
Allow specific pragma functions, closes #761
2020-05-06 10:18:31 -07:00
Simon Willison
a000c80d50
await Request(scope, receive).post_vars() method, closes #700
...
Needed for #698
2020-03-16 19:47:37 -07:00
Simon Willison
d3f2fade88
Refactored run_sanity_checks to check_connection(conn), refs #674
2020-02-15 09:56:48 -08:00
Jay Graves
33a12c8ae5
Allow leading comments in SQL input field ( #653 )
...
Thanks, @jaywgraves!
2020-02-04 18:13:24 -08:00
Simon Willison
3c861f363d
_search= queries now correctly escaped, fixes #651
...
Queries with reserved words or characters according to the SQLite
FTS5 query language could cause errors.
Queries are now escaped like so:
dog cat => "dog" "cat"
2019-12-29 18:48:30 +00:00
Simon Willison
fffd69ec03
Allow EXPLAIN WITH... - closes #583
2019-10-06 10:23:58 -07:00
Simon Willison
2dc5c8dc25
detect_fts now works with alternative table escaping ( #571 )
...
Fixes #570 . See also https://github.com/simonw/sqlite-utils/pull/57
2019-09-02 17:32:27 -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
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
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
Romain Primet
75a21fc2a1
datasette publish cloudrun ( #434 ) - thanks, @rprimet
...
New publish subcommand that publishes using the
new Google Cloud Run platform.
datasette publish cloudrun database.db
2019-05-03 09:59:01 -04:00
Russ Garrett
cf406c0754
New plugin hook: register_output_renderer hook ( #441 )
...
Thanks @russss!
* Add register_output_renderer hook
This changeset refactors out the JSON renderer and then adds a hook and
dispatcher system to allow custom output renderers to be registered.
The CSV output renderer is untouched because supporting streaming
renderers through this system would be significantly more complex, and
probably not worthwhile.
We can't simply allow hooks to be called at request time because we need
a list of supported file extensions when the request is being routed in
order to resolve ambiguous database/table names. So, renderers need to
be registered at startup.
I've tried to make this API independent of Sanic's request/response
objects so that this can remain stable during the switch to ASGI. I'm
using dictionaries to keep it simple and to make adding additional
options in the future easy.
Fixes #440
2019-05-01 16:01:56 -07:00
Simon Willison
6da567dda9
Extract and refactor filters into filters.py
...
This will help in implementing __in as a filter, refs #433
2019-04-15 14:51:20 -07:00
Simon Willison
78e45ead4d
New ?tags__arraycontains=tag lookup against JSON fields
...
Part one of supporting facet-by-JSON-array, refs #359
2019-04-10 08:27:52 -07:00
Simon Willison
97331f3435
sortable_columns_for_table() no longer uses inspect()
...
Refs #420
2019-04-06 18:58:51 -07:00