issue_comments
10,495 rows sorted by updated_at descending
This data as json, CSV (advanced)
issue >30
- Port Datasette to ASGI 42
- Ability to sort (and paginate) by column 31
- Export to CSV 27
- Datasette Plugins 22
- Documentation with recommendations on running Datasette in production without using Docker 22
- Handle spatialite geometry columns better 19
- Facets 16
- Bug: Sort by column with NULL in next_page URL 15
- Ability to customize presentation of specific columns in HTML view 14
- Dockerfile should build more recent SQLite with FTS5 and spatialite support 13
- Fix all the places that currently use .inspect() data 13
- Metadata should be a nested arbitrary KV store 12
- Support cross-database joins 12
- Mechanism for customizing the SQL used to select specific columns in the table view 12
- Sanely handle Infinity/-Infinity values in JSON using ?_json_infinity=1 12
- Port Datasette from Sanic to ASGI + Uvicorn 12
- Implement command-line tool interface 11
- Option to expose expanded foreign keys in JSON/CSV 11
- Full text search of all tables at once? 11
- Set up some example datasets on a Cloudflare-backed domain 10
- Filter UI on table page 10
- Support for units 10
- Build Dockerfile with recent Sqlite + Spatialite 10
- Table view should support filtering via many-to-many relationships 10
- Default to opening files in mutable mode, special option for immutable files 10
- New design for facet abstraction, including querystring and metadata.json 10
- Option to display binary data 10
- Config file with support for defining canned queries 9
- Mechanism for turning nested JSON into foreign keys / many-to-many 9
- Make URLs immutable 8
- …
id | html_url | issue_url | node_id | user | created_at | updated_at ▲ | author_association | body | reactions | issue | performed_via_github_app |
---|---|---|---|---|---|---|---|---|---|---|---|
509480062 | https://github.com/simonw/datasette/issues/514#issuecomment-509480062 | https://api.github.com/repos/simonw/datasette/issues/514 | MDEyOklzc3VlQ29tbWVudDUwOTQ4MDA2Mg== | simonw 9599 | 2019-07-09T04:15:11Z | 2019-07-09T04:15:11Z | OWNER | Running as root isn't ideal because it means that if there are any security vulnerabilities in Datasette an attacker could use them to execute any command they like as root on your machine. I'm moderately confident there aren't any vulnerabilities like that, but I'm definite not 100% certain! My recommendation is to run Datasette on 127.0.0.1 port 8001 and then have nginx proxy port 80 to it. See https://github.com/simonw/datasette/issues/514#issuecomment-504663201 for suggested nginx configuration. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation with recommendations on running Datasette in production without using Docker 459397625 | |
509431603 | https://github.com/simonw/datasette/issues/514#issuecomment-509431603 | https://api.github.com/repos/simonw/datasette/issues/514 | MDEyOklzc3VlQ29tbWVudDUwOTQzMTYwMw== | chrismp 7936571 | 2019-07-08T23:39:52Z | 2019-07-08T23:39:52Z | NONE | In
To...
It worked. I can access |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation with recommendations on running Datasette in production without using Docker 459397625 | |
509280196 | https://github.com/simonw/datasette/issues/510#issuecomment-509280196 | https://api.github.com/repos/simonw/datasette/issues/510 | MDEyOklzc3VlQ29tbWVudDUwOTI4MDE5Ng== | simonw 9599 | 2019-07-08T15:44:50Z | 2019-07-08T15:44:50Z | OWNER | Part of #551 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ability to facet by delimiter (e.g. comma separated fields) 456569067 | |
509279790 | https://github.com/simonw/datasette/issues/531#issuecomment-509279790 | https://api.github.com/repos/simonw/datasette/issues/531 | MDEyOklzc3VlQ29tbWVudDUwOTI3OTc5MA== | simonw 9599 | 2019-07-08T15:43:57Z | 2019-07-08T15:43:57Z | OWNER | Including foreign keys here will let me build a plugin for visualizing table relationships based on https://observablehq.com/@d3/force-directed-graph |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/database/-/inspect 462117311 | |
509278616 | https://github.com/simonw/datasette/issues/553#issuecomment-509278616 | https://api.github.com/repos/simonw/datasette/issues/553 | MDEyOklzc3VlQ29tbWVudDUwOTI3ODYxNg== | simonw 9599 | 2019-07-08T15:41:05Z | 2019-07-08T15:41:55Z | OWNER | Having a "more link" is very interesting. I could do that by generating a custom SQL query link, but that wouldn't play well in instances that disable custom SQL. This may be a case where a new URL is needed under the proposed Compatibility with |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Potential improvements to facet-by-date 465327844 | |
509277853 | https://github.com/simonw/datasette/issues/553#issuecomment-509277853 | https://api.github.com/repos/simonw/datasette/issues/553 | MDEyOklzc3VlQ29tbWVudDUwOTI3Nzg1Mw== | simonw 9599 | 2019-07-08T15:39:08Z | 2019-07-08T15:39:15Z | OWNER | My reply on Twitter: https://twitter.com/simonw/status/1148254258900262913
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Potential improvements to facet-by-date 465327844 | |
509277577 | https://github.com/simonw/datasette/issues/553#issuecomment-509277577 | https://api.github.com/repos/simonw/datasette/issues/553 | MDEyOklzc3VlQ29tbWVudDUwOTI3NzU3Nw== | simonw 9599 | 2019-07-08T15:38:26Z | 2019-07-08T15:38:26Z | OWNER | One thing that's clear is I need to add a demo to the fixtures that illustrates the feature, ideally with a thousand generated rows in it to give a better example of how it works. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Potential improvements to facet-by-date 465327844 | |
509154312 | https://github.com/simonw/datasette/issues/514#issuecomment-509154312 | https://api.github.com/repos/simonw/datasette/issues/514 | MDEyOklzc3VlQ29tbWVudDUwOTE1NDMxMg== | JesperTreetop 4363711 | 2019-07-08T09:36:25Z | 2019-07-08T09:40:33Z | NONE | @chrismp: Ports 1024 and under are privileged and can usually only be bound by a root or supervisor user, so it makes sense if you're running as the user See this generic question-and-answer and this systemd question-and-answer for more information about ways to skin this cat. Without knowing your specific circumstances, either extending those privileges to that service/executable/user, proxying them through something like nginx or indeed looking at what the nginx systemd job has to do to listen at port 80 all sound like good ways to start. At this point, this is more generic systemd/Linux support than a Datasette issue, which is why a complete rando like me is able to contribute anything. |
{ "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation with recommendations on running Datasette in production without using Docker 459397625 | |
509067403 | https://github.com/simonw/datasette/issues/549#issuecomment-509067403 | https://api.github.com/repos/simonw/datasette/issues/549 | MDEyOklzc3VlQ29tbWVudDUwOTA2NzQwMw== | simonw 9599 | 2019-07-08T03:36:45Z | 2019-07-08T03:36:45Z | OWNER | Pull request sent. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Send pull request to the repo that the _table.html template will break 465001185 | |
509066738 | https://github.com/simonw/datasette/issues/547#issuecomment-509066738 | https://api.github.com/repos/simonw/datasette/issues/547 | MDEyOklzc3VlQ29tbWVudDUwOTA2NjczOA== | simonw 9599 | 2019-07-08T03:31:54Z | 2019-07-08T03:31:54Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release notes for 0.29 464990184 | ||
509066513 | https://github.com/simonw/datasette/issues/478#issuecomment-509066513 | https://api.github.com/repos/simonw/datasette/issues/478 | MDEyOklzc3VlQ29tbWVudDUwOTA2NjUxMw== | simonw 9599 | 2019-07-08T03:30:41Z | 2019-07-08T03:30:41Z | OWNER | This worked as intended - thanks @glasnt! https://travis-ci.org/simonw/datasette/builds/555580006 The release has been deployed to PyPI even while the Docker image is still being built. |
{ "total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 1, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make it so Docker build doesn't delay PyPI release 445868234 | |
509051355 | https://github.com/simonw/datasette/issues/552#issuecomment-509051355 | https://api.github.com/repos/simonw/datasette/issues/552 | MDEyOklzc3VlQ29tbWVudDUwOTA1MTM1NQ== | simonw 9599 | 2019-07-08T01:47:30Z | 2019-07-08T01:47:30Z | OWNER | This is a good opportunity to clean up some duplicate code too. This code is duplicated in a few places: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add --plugin-secret support to "datasette package" 465019882 | |
509050775 | https://github.com/simonw/datasette/pull/544#issuecomment-509050775 | https://api.github.com/repos/simonw/datasette/issues/544 | MDEyOklzc3VlQ29tbWVudDUwOTA1MDc3NQ== | simonw 9599 | 2019-07-08T01:43:15Z | 2019-07-08T01:43:15Z | OWNER | Deployed the Cloud Run demo like this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
--plugin-secret option 464894812 | |
509042334 | https://github.com/simonw/datasette/issues/498#issuecomment-509042334 | https://api.github.com/repos/simonw/datasette/issues/498 | MDEyOklzc3VlQ29tbWVudDUwOTA0MjMzNA== | chrismp 7936571 | 2019-07-08T00:18:29Z | 2019-07-08T00:18:29Z | NONE | @simonw I made this primitive search that I've put in my Datasette project's custom templates directory: https://gist.github.com/chrismp/e064b41f08208a6f9a93150a23cf7e03 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Full text search of all tables at once? 451513541 | |
509038953 | https://github.com/simonw/datasette/issues/551#issuecomment-509038953 | https://api.github.com/repos/simonw/datasette/issues/551 | MDEyOklzc3VlQ29tbWVudDUwOTAzODk1Mw== | simonw 9599 | 2019-07-07T23:26:45Z | 2019-07-07T23:26:45Z | OWNER | The code for this was getting a little bit gnarly. I need to come up with a rock-solid design for the feature first (solving #495), then carefully build it with comprehensive tests to make sure it all makes sense. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ship many-to-many faceting support (and facet-by-delimiter) 465003070 | |
509038681 | https://github.com/simonw/datasette/issues/551#issuecomment-509038681 | https://api.github.com/repos/simonw/datasette/issues/551 | MDEyOklzc3VlQ29tbWVudDUwOTAzODY4MQ== | simonw 9599 | 2019-07-07T23:21:54Z | 2019-07-07T23:21:54Z | OWNER | Here's where I removed the faceting code: https://github.com/simonw/datasette/commit/c5542abba564a0b320a1201a8cc85b48c743005d - step one will be reverting that commit back again. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ship many-to-many faceting support (and facet-by-delimiter) 465003070 | |
509038243 | https://github.com/simonw/datasette/issues/495#issuecomment-509038243 | https://api.github.com/repos/simonw/datasette/issues/495 | MDEyOklzc3VlQ29tbWVudDUwOTAzODI0Mw== | simonw 9599 | 2019-07-07T23:14:03Z | 2019-07-07T23:14:03Z | OWNER | Part of #551 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
facet_m2m gets confused by multiple relationships 450032134 | |
509038225 | https://github.com/simonw/datasette/issues/492#issuecomment-509038225 | https://api.github.com/repos/simonw/datasette/issues/492 | MDEyOklzc3VlQ29tbWVudDUwOTAzODIyNQ== | simonw 9599 | 2019-07-07T23:13:47Z | 2019-07-07T23:13:47Z | OWNER | Part of #551 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Facets not correctly persisted in hidden form fields 449854604 | |
509038143 | https://github.com/simonw/datasette/issues/534#issuecomment-509038143 | https://api.github.com/repos/simonw/datasette/issues/534 | MDEyOklzc3VlQ29tbWVudDUwOTAzODE0Mw== | simonw 9599 | 2019-07-07T23:12:39Z | 2019-07-07T23:12:39Z | OWNER | Part of #551 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
500 error on m2m facet detection 463492815 | |
509038119 | https://github.com/simonw/datasette/issues/550#issuecomment-509038119 | https://api.github.com/repos/simonw/datasette/issues/550 | MDEyOklzc3VlQ29tbWVudDUwOTAzODExOQ== | simonw 9599 | 2019-07-07T23:12:08Z | 2019-07-07T23:12:08Z | OWNER | Will ship it with #551 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Pull m2m faceting out of master so we can ship a release without it 465002978 | |
509037096 | https://github.com/simonw/datasette/issues/492#issuecomment-509037096 | https://api.github.com/repos/simonw/datasette/issues/492 | MDEyOklzc3VlQ29tbWVudDUwOTAzNzA5Ng== | simonw 9599 | 2019-07-07T22:53:57Z | 2019-07-07T22:53:57Z | OWNER | I need to solve #495 first, since that may change the value that is persisted in the hidden fields. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Facets not correctly persisted in hidden form fields 449854604 | |
509031132 | https://github.com/simonw/datasette/issues/547#issuecomment-509031132 | https://api.github.com/repos/simonw/datasette/issues/547 | MDEyOklzc3VlQ29tbWVudDUwOTAzMTEzMg== | simonw 9599 | 2019-07-07T21:11:57Z | 2019-07-07T21:11:57Z | OWNER | These release notes should specifically call out https://github.com/simonw/datasette-auth-github and https://github.com/simonw/datasette-cors as example plugins. Should also make sure there are accompanying Glitch.com demos of these. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release notes for 0.29 464990184 | |
509028244 | https://github.com/simonw/datasette/issues/545#issuecomment-509028244 | https://api.github.com/repos/simonw/datasette/issues/545 | MDEyOklzc3VlQ29tbWVudDUwOTAyODI0NA== | simonw 9599 | 2019-07-07T20:26:06Z | 2019-07-07T20:26:06Z | OWNER | Demo will be here once this deploys: https://latest.datasette.io/404 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Fix header on 404 page 464905894 | |
509013413 | https://github.com/simonw/datasette/issues/507#issuecomment-509013413 | https://api.github.com/repos/simonw/datasette/issues/507 | MDEyOklzc3VlQ29tbWVudDUwOTAxMzQxMw== | psychemedia 82988 | 2019-07-07T16:31:57Z | 2019-07-07T16:31:57Z | CONTRIBUTOR | Chrome and Firefox both support headless screengrabs from command line, but I don't know how parameterised they can be? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Every datasette plugin on the ecosystem page should have a screenshot 455852801 | |
508959470 | https://github.com/simonw/datasette/issues/540#issuecomment-508959470 | https://api.github.com/repos/simonw/datasette/issues/540 | MDEyOklzc3VlQ29tbWVudDUwODk1OTQ3MA== | simonw 9599 | 2019-07-06T23:11:35Z | 2019-07-06T23:13:29Z | OWNER | This is now being used successfully by https://datasette-auth-demo.now.sh/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add a universal navigation bar which can be modified by plugins 464449570 | |
508955449 | https://github.com/simonw/datasette/issues/543#issuecomment-508955449 | https://api.github.com/repos/simonw/datasette/issues/543 | MDEyOklzc3VlQ29tbWVudDUwODk1NTQ0OQ== | simonw 9599 | 2019-07-06T21:41:28Z | 2019-07-06T21:41:50Z | OWNER |
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
datasette publish option for setting plugin configuration secrets 464868844 | |
508942349 | https://github.com/simonw/datasette/issues/543#issuecomment-508942349 | https://api.github.com/repos/simonw/datasette/issues/543 | MDEyOklzc3VlQ29tbWVudDUwODk0MjM0OQ== | simonw 9599 | 2019-07-06T17:34:05Z | 2019-07-06T17:34:05Z | OWNER | As soon as I have this working I can use it to ship a live demo of https://github.com/simonw/datasette-auth-github |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
datasette publish option for setting plugin configuration secrets 464868844 | |
508938015 | https://github.com/simonw/datasette/issues/543#issuecomment-508938015 | https://api.github.com/repos/simonw/datasette/issues/543 | MDEyOklzc3VlQ29tbWVudDUwODkzODAxNQ== | simonw 9599 | 2019-07-06T16:23:56Z | 2019-07-06T16:24:16Z | OWNER | Potential design:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
datasette publish option for setting plugin configuration secrets 464868844 | |
508876468 | https://github.com/simonw/datasette/pull/542#issuecomment-508876468 | https://api.github.com/repos/simonw/datasette/issues/542 | MDEyOklzc3VlQ29tbWVudDUwODg3NjQ2OA== | simonw 9599 | 2019-07-05T22:57:32Z | 2019-07-05T22:57:32Z | OWNER | This looks relevant: https://github.com/pytest-dev/pytest/issues/1235 - "pytest explodes if getcwd fails" |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
extra_template_vars plugin hook 464786717 | |
508876259 | https://github.com/simonw/datasette/pull/542#issuecomment-508876259 | https://api.github.com/repos/simonw/datasette/issues/542 | MDEyOklzc3VlQ29tbWVudDUwODg3NjI1OQ== | simonw 9599 | 2019-07-05T22:55:27Z | 2019-07-05T22:55:46Z | OWNER | Here's what
https://github.com/pallets/click/issues/395 is a four year old issue suggesting allowing it to have a parent tmp directory passed to it, but since that issue was never closed I don't think it's going to help me. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
extra_template_vars plugin hook 464786717 | |
508875041 | https://github.com/simonw/datasette/pull/542#issuecomment-508875041 | https://api.github.com/repos/simonw/datasette/issues/542 | MDEyOklzc3VlQ29tbWVudDUwODg3NTA0MQ== | simonw 9599 | 2019-07-05T22:43:53Z | 2019-07-05T22:43:53Z | OWNER | I've confirmed that it's the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
extra_template_vars plugin hook 464786717 | |
508873216 | https://github.com/simonw/datasette/pull/542#issuecomment-508873216 | https://api.github.com/repos/simonw/datasette/issues/542 | MDEyOklzc3VlQ29tbWVudDUwODg3MzIxNg== | simonw 9599 | 2019-07-05T22:27:00Z | 2019-07-05T22:27:00Z | OWNER | I bet that error is something to do with this: https://github.com/simonw/datasette/blob/e06e083240522a281b280b6461e935bf4b47bdbc/tests/test_plugins.py#L195-L197 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
extra_template_vars plugin hook 464786717 | |
508873079 | https://github.com/simonw/datasette/pull/542#issuecomment-508873079 | https://api.github.com/repos/simonw/datasette/issues/542 | MDEyOklzc3VlQ29tbWVudDUwODg3MzA3OQ== | simonw 9599 | 2019-07-05T22:25:33Z | 2019-07-05T22:25:33Z | OWNER | I'm getting this weird failure again: ``` self = <click.testing.CliRunner object at 0x7f4295b7bd30> @contextlib.contextmanager def isolated_filesystem(self): """A context manager that creates a temporary folder and changes the current working directory to it for isolated filesystem tests. """
Baffled as to why this is showing up now, as none of the changes I'm making here have any relevance to the way temporary files are created or the current working directory is set. I understand the root cause here to be that the working directory for the tests was deleted while the tests were still running, which would seem to indicate that something to do with a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
extra_template_vars plugin hook 464786717 | |
508872137 | https://github.com/simonw/datasette/issues/541#issuecomment-508872137 | https://api.github.com/repos/simonw/datasette/issues/541 | MDEyOklzc3VlQ29tbWVudDUwODg3MjEzNw== | simonw 9599 | 2019-07-05T22:16:57Z | 2019-07-05T22:16:57Z | OWNER | It should allow for awaitables too, to allow for execution of SQL. For example:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Plugin hook for adding extra template context variables 464779810 | |
508871981 | https://github.com/simonw/datasette/issues/541#issuecomment-508871981 | https://api.github.com/repos/simonw/datasette/issues/541 | MDEyOklzc3VlQ29tbWVudDUwODg3MTk4MQ== | simonw 9599 | 2019-07-05T22:15:35Z | 2019-07-05T22:15:35Z | OWNER | Example usage:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Plugin hook for adding extra template context variables 464779810 | |
508858729 | https://github.com/simonw/datasette/issues/540#issuecomment-508858729 | https://api.github.com/repos/simonw/datasette/issues/540 | MDEyOklzc3VlQ29tbWVudDUwODg1ODcyOQ== | simonw 9599 | 2019-07-05T20:44:50Z | 2019-07-05T20:44:50Z | OWNER | Here's an example custom {% block extra_head %} <style type="text/css"> .hd .logout { float: right; text-align: right; padding-left: 1em; } </style>{% endblock %} {% block nav %} {{ super() }} {% endblock %} ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add a universal navigation bar which can be modified by plugins 464449570 | |
508858510 | https://github.com/simonw/datasette/issues/540#issuecomment-508858510 | https://api.github.com/repos/simonw/datasette/issues/540 | MDEyOklzc3VlQ29tbWVudDUwODg1ODUxMA== | simonw 9599 | 2019-07-05T20:43:20Z | 2019-07-05T20:43:20Z | OWNER | https://latest.datasette.io/fixtures/attraction_characteristic/1 now looks like this: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add a universal navigation bar which can be modified by plugins 464449570 | |
508827948 | https://github.com/simonw/datasette/issues/540#issuecomment-508827948 | https://api.github.com/repos/simonw/datasette/issues/540 | MDEyOklzc3VlQ29tbWVudDUwODgyNzk0OA== | simonw 9599 | 2019-07-05T17:56:57Z | 2019-07-05T17:56:57Z | OWNER | For the moment I'm going to ignore the multiple plugins case. I shall revisit that at some point in the future, once I actually have multiple plugins that want to be able to customize the navigation at the same time. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add a universal navigation bar which can be modified by plugins 464449570 | |
508819126 | https://github.com/simonw/datasette/issues/540#issuecomment-508819126 | https://api.github.com/repos/simonw/datasette/issues/540 | MDEyOklzc3VlQ29tbWVudDUwODgxOTEyNg== | simonw 9599 | 2019-07-05T17:14:52Z | 2019-07-05T17:14:52Z | OWNER | Having this be customized by a single plugin seems easy enough - define a named block region in the template, the plugin can then provide a template which extends the base template, over-rides the named block, adds some stuff, then calls super to include the default content. But... how would this work if there are multiple plugins that want to add to the menu area? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add a universal navigation bar which can be modified by plugins 464449570 | |
508806571 | https://github.com/simonw/datasette/issues/540#issuecomment-508806571 | https://api.github.com/repos/simonw/datasette/issues/540 | MDEyOklzc3VlQ29tbWVudDUwODgwNjU3MQ== | simonw 9599 | 2019-07-05T16:14:55Z | 2019-07-05T16:14:55Z | OWNER | I think I'll start with something ridiculously simple along these lines: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add a universal navigation bar which can be modified by plugins 464449570 | |
508771246 | https://github.com/simonw/datasette/issues/540#issuecomment-508771246 | https://api.github.com/repos/simonw/datasette/issues/540 | MDEyOklzc3VlQ29tbWVudDUwODc3MTI0Ng== | simonw 9599 | 2019-07-05T14:10:35Z | 2019-07-05T14:10:35Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add a universal navigation bar which can be modified by plugins 464449570 | ||
508769380 | https://github.com/simonw/datasette/issues/540#issuecomment-508769380 | https://api.github.com/repos/simonw/datasette/issues/540 | MDEyOklzc3VlQ29tbWVudDUwODc2OTM4MA== | simonw 9599 | 2019-07-05T14:04:12Z | 2019-07-05T14:04:12Z | OWNER | Need to figure out a sensible mobile version of this too. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add a universal navigation bar which can be modified by plugins 464449570 | |
508590397 | https://github.com/simonw/datasette/issues/498#issuecomment-508590397 | https://api.github.com/repos/simonw/datasette/issues/498 | MDEyOklzc3VlQ29tbWVudDUwODU5MDM5Nw== | chrismp 7936571 | 2019-07-04T23:34:41Z | 2019-07-04T23:34:41Z | NONE | I'll take your suggestion and do this all in Javascript. Would I need to make a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Full text search of all tables at once? 451513541 | |
508346394 | https://github.com/simonw/datasette/issues/538#issuecomment-508346394 | https://api.github.com/repos/simonw/datasette/issues/538 | MDEyOklzc3VlQ29tbWVudDUwODM0NjM5NA== | simonw 9599 | 2019-07-04T05:43:24Z | 2019-07-04T05:43:24Z | OWNER | Re-opening this because I messed it up: the secret options are still visible in |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Mechanism for secrets in plugin configuration 463915863 | |
508343497 | https://github.com/simonw/datasette/pull/539#issuecomment-508343497 | https://api.github.com/repos/simonw/datasette/issues/539 | MDEyOklzc3VlQ29tbWVudDUwODM0MzQ5Nw== | simonw 9599 | 2019-07-04T05:28:30Z | 2019-07-04T05:28:30Z | OWNER | This seems to have fixed the weird errors: https://github.com/simonw/datasette/pull/539/commits/fd6164b03ebe450a9a00df2e5be2dc7bbfbd9a3f |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Secret plugin configuration options 464040911 | |
508343359 | https://github.com/simonw/datasette/pull/539#issuecomment-508343359 | https://api.github.com/repos/simonw/datasette/issues/539 | MDEyOklzc3VlQ29tbWVudDUwODM0MzM1OQ== | simonw 9599 | 2019-07-04T05:27:47Z | 2019-07-04T05:27:47Z | OWNER | For some reason the way I have set these tests up keeps throwing variations on this error: ``` self = <click.testing.CliRunner object at 0x7fccc0d940f0> @contextlib.contextmanager def isolated_filesystem(self): """A context manager that creates a temporary folder and changes the current working directory to it for isolated filesystem tests. """
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Secret plugin configuration options 464040911 | |
508225524 | https://github.com/simonw/datasette/issues/538#issuecomment-508225524 | https://api.github.com/repos/simonw/datasette/issues/538 | MDEyOklzc3VlQ29tbWVudDUwODIyNTUyNA== | simonw 9599 | 2019-07-03T19:26:32Z | 2019-07-03T19:26:32Z | OWNER | Another useful option is the ability to load secrets from a file. This allows the file to have permissions set on it to only be read by the Datasette user. It also interacts well with the Kubernetes secrets mechanism, which is file-based. ```json { "plugins": { "datasette-auth-github": { "client_id": "986f5d837b45e32ee6dd", "client_secret": {"$file": "/secrets/github-client-secret"} } } } |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Mechanism for secrets in plugin configuration 463915863 | |
508224962 | https://github.com/simonw/datasette/issues/538#issuecomment-508224962 | https://api.github.com/repos/simonw/datasette/issues/538 | MDEyOklzc3VlQ29tbWVudDUwODIyNDk2Mg== | simonw 9599 | 2019-07-03T19:24:32Z | 2019-07-03T19:24:32Z | OWNER | Initial syntax suggestion:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Mechanism for secrets in plugin configuration 463915863 | |
507935352 | https://github.com/simonw/datasette/issues/520#issuecomment-507935352 | https://api.github.com/repos/simonw/datasette/issues/520 | MDEyOklzc3VlQ29tbWVudDUwNzkzNTM1Mg== | simonw 9599 | 2019-07-03T04:40:34Z | 2019-07-03T04:40:34Z | OWNER | Documentation for the new hook: https://datasette.readthedocs.io/en/latest/plugins.html#asgi-wrapper-datasette |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
asgi_wrapper plugin hook 459598080 | |
507929913 | https://github.com/simonw/datasette/issues/215#issuecomment-507929913 | https://api.github.com/repos/simonw/datasette/issues/215 | MDEyOklzc3VlQ29tbWVudDUwNzkyOTkxMw== | simonw 9599 | 2019-07-03T04:08:28Z | 2019-07-03T04:08:28Z | OWNER | I just closed #520 which means this is now technically possible. But... doing it using the new I'm going to leave this ticket open for the moment. I think I need at least one example plugin to show that this approach is good enough - and it's still quite possible that I'll add an extra, easier hook for this. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Allow plugins to define additional URL routes and views 314506669 | |
507922465 | https://github.com/simonw/datasette/issues/521#issuecomment-507922465 | https://api.github.com/repos/simonw/datasette/issues/521 | MDEyOklzc3VlQ29tbWVudDUwNzkyMjQ2NQ== | simonw 9599 | 2019-07-03T03:23:55Z | 2019-07-03T03:23:55Z | OWNER | Fixed by #533 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Easier way of creating custom row templates 459621683 | |
507895104 | https://github.com/simonw/datasette/pull/533#issuecomment-507895104 | https://api.github.com/repos/simonw/datasette/issues/533 | MDEyOklzc3VlQ29tbWVudDUwNzg5NTEwNA== | simonw 9599 | 2019-07-03T00:46:20Z | 2019-07-03T00:46:33Z | OWNER | I'd like to rename There is at least one project out there using the current filename though: https://github.com/baltimore-sun-data/salaries-datasette/blob/master/templates/_rows_and_columns.html - I shall file an issue there to let them know about the backwards incompatible change. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support cleaner custom templates for rows and tables, closes #521 463492395 | |
507077672 | https://github.com/simonw/sqlite-utils/issues/33#issuecomment-507077672 | https://api.github.com/repos/simonw/sqlite-utils/issues/33 | MDEyOklzc3VlQ29tbWVudDUwNzA3NzY3Mg== | simonw 9599 | 2019-06-30T23:54:11Z | 2019-06-30T23:54:11Z | OWNER | Released in 1.4: https://sqlite-utils.readthedocs.io/en/latest/changelog.html#v1-4 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
index_foreign_keys / index-foreign-keys utilities 462423839 | |
507077631 | https://github.com/simonw/sqlite-utils/issues/33#issuecomment-507077631 | https://api.github.com/repos/simonw/sqlite-utils/issues/33 | MDEyOklzc3VlQ29tbWVudDUwNzA3NzYzMQ== | simonw 9599 | 2019-06-30T23:53:34Z | 2019-06-30T23:53:34Z | OWNER | This was needed for https://github.com/simonw/db-to-sqlite/issues/12 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
index_foreign_keys / index-foreign-keys utilities 462423839 | |
507055345 | https://github.com/simonw/sqlite-utils/issues/23#issuecomment-507055345 | https://api.github.com/repos/simonw/sqlite-utils/issues/23 | MDEyOklzc3VlQ29tbWVudDUwNzA1NTM0NQ== | simonw 9599 | 2019-06-30T18:02:25Z | 2019-06-30T18:02:33Z | OWNER | I have a solution. If I introduce a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Syntactic sugar for creating m2m records 449565204 | |
507053731 | https://github.com/simonw/sqlite-utils/issues/23#issuecomment-507053731 | https://api.github.com/repos/simonw/sqlite-utils/issues/23 | MDEyOklzc3VlQ29tbWVudDUwNzA1MzczMQ== | simonw 9599 | 2019-06-30T17:37:33Z | 2019-06-30T17:37:33Z | OWNER | Implementing the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Syntactic sugar for creating m2m records 449565204 | |
507053558 | https://github.com/simonw/sqlite-utils/issues/23#issuecomment-507053558 | https://api.github.com/repos/simonw/sqlite-utils/issues/23 | MDEyOklzc3VlQ29tbWVudDUwNzA1MzU1OA== | simonw 9599 | 2019-06-30T17:34:29Z | 2019-06-30T17:34:29Z | OWNER | Or... how about we use chaining like this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Syntactic sugar for creating m2m records 449565204 | |
507052051 | https://github.com/simonw/sqlite-utils/issues/23#issuecomment-507052051 | https://api.github.com/repos/simonw/sqlite-utils/issues/23 | MDEyOklzc3VlQ29tbWVudDUwNzA1MjA1MQ== | simonw 9599 | 2019-06-30T17:09:51Z | 2019-06-30T17:15:09Z | OWNER | Maybe there's a case where we want to be able to insert a row AND add its m2m records in a single operation? Could look something like this:
I'm not sure about this though. If the Maybe some complex nested function mechanism like this?
This would require having |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Syntactic sugar for creating m2m records 449565204 | |
507051825 | https://github.com/simonw/sqlite-utils/issues/23#issuecomment-507051825 | https://api.github.com/repos/simonw/sqlite-utils/issues/23 | MDEyOklzc3VlQ29tbWVudDUwNzA1MTgyNQ== | simonw 9599 | 2019-06-30T17:06:29Z | 2019-06-30T17:06:29Z | OWNER | For this method:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Syntactic sugar for creating m2m records 449565204 | |
507051670 | https://github.com/simonw/sqlite-utils/issues/26#issuecomment-507051670 | https://api.github.com/repos/simonw/sqlite-utils/issues/26 | MDEyOklzc3VlQ29tbWVudDUwNzA1MTY3MA== | simonw 9599 | 2019-06-30T17:04:09Z | 2019-06-30T17:04:09Z | OWNER | I think the implementation of this will benefit from #23 (syntactic sugar for creating m2m records) |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Mechanism for turning nested JSON into foreign keys / many-to-many 455486286 | |
507051516 | https://github.com/simonw/sqlite-utils/issues/23#issuecomment-507051516 | https://api.github.com/repos/simonw/sqlite-utils/issues/23 | MDEyOklzc3VlQ29tbWVudDUwNzA1MTUxNg== | simonw 9599 | 2019-06-30T17:01:26Z | 2019-06-30T17:03:16Z | OWNER | Question: do I set a compound primary key on I'm leaning towards compound primary key. Maybe that's the default and there's an option for including a regular incrementing primary key.
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Syntactic sugar for creating m2m records 449565204 | |
507051067 | https://github.com/simonw/sqlite-utils/issues/23#issuecomment-507051067 | https://api.github.com/repos/simonw/sqlite-utils/issues/23 | MDEyOklzc3VlQ29tbWVudDUwNzA1MTA2Nw== | simonw 9599 | 2019-06-30T16:54:08Z | 2019-06-30T16:59:05Z | OWNER | There could be a version of this which inserts the related record into the other table if it is missing, but reuses it if it's already there. That might look like this:
Since this is doing an |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Syntactic sugar for creating m2m records 449565204 | |
507050894 | https://github.com/simonw/sqlite-utils/issues/23#issuecomment-507050894 | https://api.github.com/repos/simonw/sqlite-utils/issues/23 | MDEyOklzc3VlQ29tbWVudDUwNzA1MDg5NA== | simonw 9599 | 2019-06-30T16:51:39Z | 2019-06-30T16:55:16Z | OWNER | One option:
This would create the missing m2m table if it did not already exist, and call it You can pass an optional
Maybe allow passing extra key/value pairs that will be inserted into the m2m table?
Could even accept It would be nice if there was a
It's a bit confusing them both having the same method name though. Also calling it Maybe this instead?
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Syntactic sugar for creating m2m records 449565204 | |
506985050 | https://github.com/simonw/datasette/issues/498#issuecomment-506985050 | https://api.github.com/repos/simonw/datasette/issues/498 | MDEyOklzc3VlQ29tbWVudDUwNjk4NTA1MA== | chrismp 7936571 | 2019-06-29T20:28:21Z | 2019-06-29T20:28:21Z | NONE | In my case, I have an ever-growing number of databases and tables within them. Most tables have FTS enabled. I cannot predict the names of future tables and databases, nor can I predict the names of the columns for which I wish to enable FTS. For my purposes, I was thinking of writing up something that sends these two GET requests to each of my databases' tables.
In the resulting JSON strings, I'd check the value of the key Is this feasible within the datasette library, or would it require some type of plugin? Or maybe you know of a better way of accomplishing this goal. Maybe I overlooked something. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Full text search of all tables at once? 451513541 | |
506801644 | https://github.com/simonw/datasette/issues/296#issuecomment-506801644 | https://api.github.com/repos/simonw/datasette/issues/296 | MDEyOklzc3VlQ29tbWVudDUwNjgwMTY0NA== | simonw 9599 | 2019-06-28T16:46:34Z | 2019-06-28T16:46:34Z | OWNER | The first of these will be built in #531 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Per-database and per-table /-/ URL namespace 327395270 | |
506801311 | https://github.com/simonw/datasette/issues/294#issuecomment-506801311 | https://api.github.com/repos/simonw/datasette/issues/294 | MDEyOklzc3VlQ29tbWVudDUwNjgwMTMxMQ== | simonw 9599 | 2019-06-28T16:45:28Z | 2019-06-28T16:45:28Z | OWNER | This can happen as part of #531 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
inspect should record column types 327365110 | |
506797736 | https://github.com/simonw/datasette/issues/465#issuecomment-506797736 | https://api.github.com/repos/simonw/datasette/issues/465 | MDEyOklzc3VlQ29tbWVudDUwNjc5NzczNg== | simonw 9599 | 2019-06-28T16:34:33Z | 2019-06-28T16:34:33Z | OWNER | I'm closing this because #531 counts as a decision. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Decide what to do about /-/inspect 443038584 | |
506797086 | https://github.com/simonw/datasette/issues/465#issuecomment-506797086 | https://api.github.com/repos/simonw/datasette/issues/465 | MDEyOklzc3VlQ29tbWVudDUwNjc5NzA4Ng== | simonw 9599 | 2019-06-28T16:32:33Z | 2019-06-28T16:32:33Z | OWNER | Next step:
It won't show table counts. Or maybe it will include them optionally but only for |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Decide what to do about /-/inspect 443038584 | |
506784912 | https://github.com/simonw/sqlite-utils/pull/32#issuecomment-506784912 | https://api.github.com/repos/simonw/sqlite-utils/issues/32 | MDEyOklzc3VlQ29tbWVudDUwNjc4NDkxMg== | simonw 9599 | 2019-06-28T15:55:13Z | 2019-06-28T15:55:13Z | OWNER | Documentation, to be added as a subsection of https://sqlite-utils.readthedocs.io/en/latest/python-api.html#adding-foreign-key-constraints Adding multiple foreign key constraints at onceThe final step in adding a new foreign key to a SQLite database is to run VACUUM, to ensure the new foreign key is available in future introspection queries. VACUUM against a large (multi-GB) database can take several minutes or longer. If you are adding multiple foreign keys using table.add_foreign_key(...) these can quickly add up. Instead, you can use db.add_foreign_keys(...) to add multiple foreign keys within a single transaction. This method takes a list of four-tuples, each one specifying a table, column, other_table and other_column. Here's an example adding two foreign keys at once:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
db.add_foreign_keys() method 462094937 | |
506000023 | https://github.com/simonw/datasette/issues/522#issuecomment-506000023 | https://api.github.com/repos/simonw/datasette/issues/522 | MDEyOklzc3VlQ29tbWVudDUwNjAwMDAyMw== | nathancahill 1383872 | 2019-06-26T18:48:53Z | 2019-06-26T18:48:53Z | NONE | Reference implementation from Requests: https://github.com/kennethreitz/requests/blob/3.0/requests/structures.py#L14 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Handle case-insensitive headers in a nicer way 459622390 | |
505635729 | https://github.com/simonw/datasette/issues/498#issuecomment-505635729 | https://api.github.com/repos/simonw/datasette/issues/498 | MDEyOklzc3VlQ29tbWVudDUwNTYzNTcyOQ== | simonw 9599 | 2019-06-25T21:48:46Z | 2019-06-25T21:48:46Z | OWNER | Hmmm... you know I think I actually need this for my https://github.com/simonw/fara-datasette project... |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Full text search of all tables at once? 451513541 | |
505424665 | https://github.com/simonw/datasette/pull/529#issuecomment-505424665 | https://api.github.com/repos/simonw/datasette/issues/529 | MDEyOklzc3VlQ29tbWVudDUwNTQyNDY2NQ== | nathancahill 1383872 | 2019-06-25T12:35:07Z | 2019-06-25T12:35:07Z | NONE | Opps, wrote this late last night, didn't see you'd already worked on the issue. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Use keyed rows - fixes #521 460396952 | |
505422550 | https://github.com/simonw/datasette/issues/521#issuecomment-505422550 | https://api.github.com/repos/simonw/datasette/issues/521 | MDEyOklzc3VlQ29tbWVudDUwNTQyMjU1MA== | simonw 9599 | 2019-06-25T12:28:48Z | 2019-06-25T12:28:48Z | OWNER | Still needed before merge: documentation! I can expand this section: https://datasette.readthedocs.io/en/stable/custom_templates.html#custom-templates |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Easier way of creating custom row templates 459621683 | |
505421892 | https://github.com/simonw/datasette/issues/521#issuecomment-505421892 | https://api.github.com/repos/simonw/datasette/issues/521 | MDEyOklzc3VlQ29tbWVudDUwNTQyMTg5Mg== | simonw 9599 | 2019-06-25T12:26:54Z | 2019-06-25T12:26:54Z | OWNER | This is starting to shape up. Example template:
```
{% for row in display_rows %}
{{ row["First_Name"] }} {{ row["Last_Name"] }}{% if row["Link_to_Photo"] %} {% endif %} {% for cell in row.cells[3:] %} {% if cell.raw and cell.column != "createdTime" %}{{ cell.column }}: {{ cell.value }} {% endif %} {% endfor %}{% endfor %} ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Easier way of creating custom row templates 459621683 | |
505405030 | https://github.com/simonw/datasette/issues/521#issuecomment-505405030 | https://api.github.com/repos/simonw/datasette/issues/521 | MDEyOklzc3VlQ29tbWVudDUwNTQwNTAzMA== | simonw 9599 | 2019-06-25T11:34:21Z | 2019-06-25T11:34:21Z | OWNER | Actually I'm OK here - |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Easier way of creating custom row templates 459621683 | |
505280611 | https://github.com/simonw/datasette/issues/521#issuecomment-505280611 | https://api.github.com/repos/simonw/datasette/issues/521 | MDEyOklzc3VlQ29tbWVudDUwNTI4MDYxMQ== | simonw 9599 | 2019-06-25T04:46:10Z | 2019-06-25T04:46:10Z | OWNER | Of course I can't do it in this part of he code because it's constructing plain JSON objects here. I'll need to do it in the section that prepares special objects for the HTML. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Easier way of creating custom row templates 459621683 | |
505279560 | https://github.com/simonw/datasette/issues/521#issuecomment-505279560 | https://api.github.com/repos/simonw/datasette/issues/521 | MDEyOklzc3VlQ29tbWVudDUwNTI3OTU2MA== | simonw 9599 | 2019-06-25T04:40:16Z | 2019-06-25T04:40:38Z | OWNER | I think the trick is to redefine what a "cell_row" is. Each row is currently a list of cells: I can redefine the row (the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Easier way of creating custom row templates 459621683 | |
505232675 | https://github.com/simonw/datasette/issues/514#issuecomment-505232675 | https://api.github.com/repos/simonw/datasette/issues/514 | MDEyOklzc3VlQ29tbWVudDUwNTIzMjY3NQ== | chrismp 7936571 | 2019-06-25T00:43:12Z | 2019-06-25T00:43:12Z | NONE | Yep, that worked to get the site up and running at ``` !/bin/bash/home/chris/Env/datasette/bin/datasette serve -h 0.0.0.0 -p 80 /home/chris/digital-library/databases/*.db --cors --metadata /home/chris/digital-library/metadata.json ``` I got this error.
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation with recommendations on running Datasette in production without using Docker 459397625 | |
505228873 | https://github.com/simonw/datasette/issues/498#issuecomment-505228873 | https://api.github.com/repos/simonw/datasette/issues/498 | MDEyOklzc3VlQ29tbWVudDUwNTIyODg3Mw== | chrismp 7936571 | 2019-06-25T00:21:17Z | 2019-06-25T00:21:17Z | NONE | Eh, I'm not concerned with a relevance score right now. I think I'd be fine with a search whose results show links to data tables with at least one result. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Full text search of all tables at once? 451513541 | |
505162238 | https://github.com/simonw/datasette/issues/526#issuecomment-505162238 | https://api.github.com/repos/simonw/datasette/issues/526 | MDEyOklzc3VlQ29tbWVudDUwNTE2MjIzOA== | simonw 9599 | 2019-06-24T20:14:51Z | 2019-06-24T20:14:51Z | OWNER | The other reason I didn't implement this in the first place is that adding offset/limit to a custom query (as opposed to a view) requires modifying the existing SQL - what if that SQL already has its own offset/limit clause? It looks like I can solve that using a nested query:
So I can wrap any user-provided SQL query in an outer offset/limit and implement pagination that way. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Stream all results for arbitrary SQL and canned queries 459882902 | |
505161008 | https://github.com/simonw/datasette/issues/526#issuecomment-505161008 | https://api.github.com/repos/simonw/datasette/issues/526 | MDEyOklzc3VlQ29tbWVudDUwNTE2MTAwOA== | simonw 9599 | 2019-06-24T20:11:15Z | 2019-06-24T20:11:15Z | OWNER | Views already use offset/limit pagination so actually I may be over-thinking this. Maybe the right thing to do here is to have the feature enabled by default, since it will work for the VAST majority of queries - the only ones that might cause problems are complex queries across millions of rows. It can continue to use aggressive internal time limits so if someone DOES trigger something expensive they'll get an error. I can allow users to disable the feature with a config setting, or increase the time limit if they need to. Downgrading this from a medium to a small since it's much less effort to enable the existing pagination method for this type of query. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Stream all results for arbitrary SQL and canned queries 459882902 | |
505087020 | https://github.com/simonw/datasette/pull/437#issuecomment-505087020 | https://api.github.com/repos/simonw/datasette/issues/437 | MDEyOklzc3VlQ29tbWVudDUwNTA4NzAyMA== | simonw 9599 | 2019-06-24T16:38:56Z | 2019-06-24T16:38:56Z | OWNER | Closing this because it doesn't really fit the new model of inspect (though we should discuss in #465 how to further evolve this feature) and because as-of #272 we no longer use Sanic - though #520 will implement the equivalent of |
{ "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add inspect and prepare_sanic hooks 438048318 | |
505086213 | https://github.com/simonw/datasette/issues/525#issuecomment-505086213 | https://api.github.com/repos/simonw/datasette/issues/525 | MDEyOklzc3VlQ29tbWVudDUwNTA4NjIxMw== | simonw 9599 | 2019-06-24T16:36:35Z | 2019-06-24T16:36:35Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add section on sqite-utils enable-fts to the search documentation 459714943 | ||
505083671 | https://github.com/simonw/datasette/issues/525#issuecomment-505083671 | https://api.github.com/repos/simonw/datasette/issues/525 | MDEyOklzc3VlQ29tbWVudDUwNTA4MzY3MQ== | simonw 9599 | 2019-06-24T16:29:30Z | 2019-06-24T16:29:30Z | OWNER | It's mentioned here at the moment, but I'm going to expand that: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add section on sqite-utils enable-fts to the search documentation 459714943 | |
505061703 | https://github.com/simonw/datasette/issues/514#issuecomment-505061703 | https://api.github.com/repos/simonw/datasette/issues/514 | MDEyOklzc3VlQ29tbWVudDUwNTA2MTcwMw== | simonw 9599 | 2019-06-24T15:31:25Z | 2019-06-24T15:31:25Z | OWNER | I'm suspicious of the wildcard. Does it work if you do the following?
If that does work then it means the ExecStart line doesn't support bash wildcard expansion. You'll need to create a separate script like this: ``` !/bin/bash/home/chris/Env/datasette/bin/datasette serve -h 0.0.0.0 /home/chris/digital-library/databases/*.db --cors --metadata /home/chris/digital-library/metadata.json ``` Then save that as
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation with recommendations on running Datasette in production without using Docker 459397625 | |
505060332 | https://github.com/simonw/datasette/issues/526#issuecomment-505060332 | https://api.github.com/repos/simonw/datasette/issues/526 | MDEyOklzc3VlQ29tbWVudDUwNTA2MDMzMg== | simonw 9599 | 2019-06-24T15:28:16Z | 2019-06-24T15:28:16Z | OWNER | This is currently a deliberate feature decision. The problem is that the streaming CSV feature relies on Datasette's automated efficient pagination under the hood. When you stream a CSV you're actually causing Datasette to paginate through the full set of "pages" under the hood, streaming each page out as a new chunk of CSV rows. This mechanism only works if the Offset/limit pagination for canned queries would be a pretty nasty performance hit, because each subsequent page would require even more time for SQLite to scroll through to the specified offset. This does seem like it's worth fixing though: pulling every row for a canned queries would definitely be useful. The problem is that the pagination trick used elsewhere isn't right for canned queries - instead I would need to keep the database cursor open until ALL rows had been fetched. Figuring out how to do that efficiently within an asyncio managed thread pool may take some thought. Maybe this feature ends up as something which is turned off by default (due to the risk of it causing uptime problems for public sites) but that users working on their own private environments can turn on? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Stream all results for arbitrary SQL and canned queries 459882902 | |
505057520 | https://github.com/simonw/datasette/issues/527#issuecomment-505057520 | https://api.github.com/repos/simonw/datasette/issues/527 | MDEyOklzc3VlQ29tbWVudDUwNTA1NzUyMA== | simonw 9599 | 2019-06-24T15:21:18Z | 2019-06-24T15:21:18Z | OWNER | I just released csvs-to-sqlite 0.9.1 with this bug fix: https://github.com/simonw/csvs-to-sqlite/releases/tag/0.9.1 |
{ "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Unable to use rank when fts-table generated with csvs-to-sqlite 459936585 | |
505052344 | https://github.com/simonw/datasette/issues/527#issuecomment-505052344 | https://api.github.com/repos/simonw/datasette/issues/527 | MDEyOklzc3VlQ29tbWVudDUwNTA1MjM0NA== | simonw 9599 | 2019-06-24T15:09:10Z | 2019-06-24T15:09:10Z | OWNER | Closing in favour of that bug in the csvs-to-sqlite repo. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Unable to use rank when fts-table generated with csvs-to-sqlite 459936585 | |
505052224 | https://github.com/simonw/datasette/issues/527#issuecomment-505052224 | https://api.github.com/repos/simonw/datasette/issues/527 | MDEyOklzc3VlQ29tbWVudDUwNTA1MjIyNA== | simonw 9599 | 2019-06-24T15:08:52Z | 2019-06-24T15:08:52Z | OWNER | The ... I tested on my own machine and that is indeed what's happening! And in fact it looks like it's a known bug - I should fix that! https://github.com/simonw/csvs-to-sqlite/issues/41 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Unable to use rank when fts-table generated with csvs-to-sqlite 459936585 | |
504791796 | https://github.com/simonw/datasette/pull/518#issuecomment-504791796 | https://api.github.com/repos/simonw/datasette/issues/518 | MDEyOklzc3VlQ29tbWVudDUwNDc5MTc5Ng== | simonw 9599 | 2019-06-23T22:10:02Z | 2019-06-24T13:42:50Z | OWNER | The Sanic stuff I import at the moment is:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Port Datasette from Sanic to ASGI + Uvicorn 459587155 | |
504998302 | https://github.com/simonw/datasette/issues/514#issuecomment-504998302 | https://api.github.com/repos/simonw/datasette/issues/514 | MDEyOklzc3VlQ29tbWVudDUwNDk5ODMwMg== | chrismp 7936571 | 2019-06-24T12:57:19Z | 2019-06-24T12:57:19Z | NONE | Same error when I used the full path. On Sun, Jun 23, 2019 at 18:31 Simon Willison notifications@github.com wrote:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation with recommendations on running Datasette in production without using Docker 459397625 | |
504883688 | https://github.com/simonw/datasette/issues/48#issuecomment-504883688 | https://api.github.com/repos/simonw/datasette/issues/48 | MDEyOklzc3VlQ29tbWVudDUwNDg4MzY4OA== | simonw 9599 | 2019-06-24T06:57:43Z | 2019-06-24T06:57:43Z | OWNER | I've seen no evidence that JSON handling is even close to being a performance bottleneck, so wontfix. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch to ujson 272391665 | |
504882686 | https://github.com/simonw/datasette/issues/294#issuecomment-504882686 | https://api.github.com/repos/simonw/datasette/issues/294 | MDEyOklzc3VlQ29tbWVudDUwNDg4MjY4Ng== | simonw 9599 | 2019-06-24T06:54:22Z | 2019-06-24T06:54:22Z | OWNER | Consider this when solving #465 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
inspect should record column types 327365110 | |
504882244 | https://github.com/simonw/datasette/issues/238#issuecomment-504882244 | https://api.github.com/repos/simonw/datasette/issues/238 | MDEyOklzc3VlQ29tbWVudDUwNDg4MjI0NA== | simonw 9599 | 2019-06-24T06:52:45Z | 2019-06-24T06:52:45Z | OWNER | I'm not going to do this - there are plenty of smarter ways of achieving a similar goal. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
External metadata.json 317714268 | |
504881630 | https://github.com/simonw/datasette/issues/340#issuecomment-504881630 | https://api.github.com/repos/simonw/datasette/issues/340 | MDEyOklzc3VlQ29tbWVudDUwNDg4MTYzMA== | simonw 9599 | 2019-06-24T06:50:26Z | 2019-06-24T06:50:26Z | OWNER | Black is now enforced by our unit tests as of #449 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Embrace black 340730961 | |
504881030 | https://github.com/simonw/datasette/issues/146#issuecomment-504881030 | https://api.github.com/repos/simonw/datasette/issues/146 | MDEyOklzc3VlQ29tbWVudDUwNDg4MTAzMA== | simonw 9599 | 2019-06-24T06:48:20Z | 2019-06-24T06:48:20Z | OWNER | I'm going to call this "done" thanks to cloudrun: #400 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
datasette publish gcloud 276455748 | |
504880796 | https://github.com/simonw/datasette/issues/268#issuecomment-504880796 | https://api.github.com/repos/simonw/datasette/issues/268 | MDEyOklzc3VlQ29tbWVudDUwNDg4MDc5Ng== | simonw 9599 | 2019-06-24T06:47:23Z | 2019-06-24T06:47:23Z | OWNER | I did a bunch of research relevant to this a while ago: https://simonwillison.net/2019/Jan/7/exploring-search-relevance-algorithms-sqlite/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Mechanism for ranking results from SQLite full-text search 323718842 | |
504880173 | https://github.com/simonw/datasette/issues/183#issuecomment-504880173 | https://api.github.com/repos/simonw/datasette/issues/183 | MDEyOklzc3VlQ29tbWVudDUwNDg4MDE3Mw== | simonw 9599 | 2019-06-24T06:45:07Z | 2019-06-24T06:45:07Z | OWNER | Closing as couldn't replicate |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Custom Queries - escaping strings 291639118 | |
504879834 | https://github.com/simonw/datasette/issues/124#issuecomment-504879834 | https://api.github.com/repos/simonw/datasette/issues/124 | MDEyOklzc3VlQ29tbWVudDUwNDg3OTgzNA== | simonw 9599 | 2019-06-24T06:43:46Z | 2019-06-24T06:43:46Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Option to open readonly but not immutable 275125805 | ||
504879510 | https://github.com/simonw/datasette/issues/106#issuecomment-504879510 | https://api.github.com/repos/simonw/datasette/issues/106 | MDEyOklzc3VlQ29tbWVudDUwNDg3OTUxMA== | simonw 9599 | 2019-06-24T06:42:33Z | 2019-06-24T06:42:33Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Document how pagination works 274315193 |
Advanced export
JSON shape: default, array, newline-delimited, object
CREATE TABLE [issue_comments] ( [html_url] TEXT, [issue_url] TEXT, [id] INTEGER PRIMARY KEY, [node_id] TEXT, [user] INTEGER REFERENCES [users]([id]), [created_at] TEXT, [updated_at] TEXT, [author_association] TEXT, [body] TEXT, [reactions] TEXT, [issue] INTEGER REFERENCES [issues]([id]) , [performed_via_github_app] TEXT); CREATE INDEX [idx_issue_comments_issue] ON [issue_comments] ([issue]); CREATE INDEX [idx_issue_comments_user] ON [issue_comments] ([user]);
user >30