issue_comments
10,495 rows sorted by created_at
This data as json, CSV (advanced)
Suggested facets: reactions, performed_via_github_app
updated_at (date) >30 ✖
- 2021-03-22 66
- 2021-11-19 60
- 2022-11-16 58
- 2020-09-22 53
- 2020-10-15 52
- 2023-08-18 52
- 2020-10-30 49
- 2022-10-26 47
- 2022-03-21 46
- 2023-09-21 44
- 2020-06-09 43
- 2022-10-27 43
- 2022-12-13 43
- 2022-01-09 42
- 2022-10-25 41
- 2020-10-20 40
- 2020-06-18 39
- 2020-12-18 39
- 2021-11-16 39
- 2021-12-16 39
- 2022-06-14 39
- 2020-05-27 38
- 2020-12-30 38
- 2020-10-09 37
- 2022-03-19 37
- 2022-12-15 37
- 2021-11-20 36
- 2022-01-20 36
- 2023-03-08 36
- 2023-07-22 36
- …
issue >30
- Redesign default .json format 55
- Show column metadata plus links for foreign keys on arbitrary query results 51
- ?_extra= support (draft) 49
- Rethink how .ext formats (v.s. ?_format=) works before 1.0 48
- Upgrade to CodeMirror 6, add SQL autocomplete 48
- JavaScript plugin hooks mechanism similar to pluggy 47
- Updated Dockerfile with SpatiaLite version 5.0 45
- Complete refactor of TableView and table.html template 45
- Port Datasette to ASGI 42
- Authentication (and permissions) as a core concept 40
- invoke_startup() is not run in some conditions, e.g. gunicorn/uvicorn workers, breaking lots of things 36
- Deploy a live instance of demos/apache-proxy 34
- await datasette.client.get(path) mechanism for executing internal requests 33
- Maintain an in-memory SQLite table of connected databases and their tables 32
- Research: demonstrate if parallel SQL queries are worthwhile 32
- Ability to sort (and paginate) by column 31
- Server hang on parallel execution of queries to named in-memory databases 31
- Default API token authentication mechanism 30
- Port as many tests as possible to async def tests against ds_client 29
- link_or_copy_directory() error - Invalid cross-device link 28
- Add ?_extra= mechanism for requesting extra properties in JSON 27
- Export to CSV 27
- base_url configuration setting 27
- Documentation with recommendations on running Datasette in production without using Docker 27
- Optimize all those calls to index_list and foreign_key_list 27
- Support cross-database joins 26
- Ability for a canned query to write to the database 26
- table.transform() method for advanced alter table 26
- New pattern for views that return either JSON or HTML, available for plugins 26
- Proof of concept for Datasette on AWS Lambda with EFS 25
- …
created_at (date) >30 ✖
- 2021-03-22 66
- 2021-11-19 60
- 2022-11-16 59
- 2020-10-15 52
- 2020-09-22 51
- 2023-08-18 51
- 2020-10-30 49
- 2022-10-26 47
- 2022-03-21 46
- 2023-09-21 44
- 2020-12-18 43
- 2020-06-09 42
- 2022-10-27 42
- 2022-12-13 42
- 2020-06-18 41
- 2022-10-25 41
- 2020-10-20 40
- 2022-01-09 40
- 2022-06-14 40
- 2020-05-27 39
- 2021-11-16 39
- 2021-12-16 39
- 2020-12-30 38
- 2022-12-15 37
- 2023-03-08 37
- 2020-10-09 36
- 2021-11-20 36
- 2022-01-20 36
- 2022-03-19 36
- 2023-07-22 36
- …
id | html_url | issue_url | node_id | user | created_at ▼ | updated_at | author_association | body | reactions | issue | performed_via_github_app |
---|---|---|---|---|---|---|---|---|---|---|---|
338523957 | https://github.com/simonw/datasette/issues/1#issuecomment-338523957 | https://api.github.com/repos/simonw/datasette/issues/1 | MDEyOklzc3VlQ29tbWVudDMzODUyMzk1Nw== | simonw 9599 | 2017-10-23T01:09:05Z | 2017-10-24T02:42:12Z | OWNER | I also need to solve for weird primary keys. If it’s a single integer or a single char field that’s easy. But what if it is a compound key with more than one chat field? What delimiter can I use that will definitely be safe? Let’s say I use hyphen. Now I need to find a durable encoding for any hyphens that might exist in the key fields themselves. How about I use URLencoding for every non-alpha-numeric character? That will turn hyphens into (I think) %2D. It should also solve for unicode characters, but it means the vast majority of keys (integers) will display neatly, including a compound key of eg 5678-345 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Addressable pages for every row in a table 267513424 | |
338524454 | https://github.com/simonw/datasette/issues/1#issuecomment-338524454 | https://api.github.com/repos/simonw/datasette/issues/1 | MDEyOklzc3VlQ29tbWVudDMzODUyNDQ1NA== | simonw 9599 | 2017-10-23T01:15:24Z | 2017-10-23T01:15:24Z | OWNER | Table rendering logic needs to detect the primary key field and turn it into a hyperlink. If there is a compound primary key it should add an extra column at the start of the table which displays the compound key as a link |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Addressable pages for every row in a table 267513424 | |
338524857 | https://github.com/simonw/datasette/issues/5#issuecomment-338524857 | https://api.github.com/repos/simonw/datasette/issues/5 | MDEyOklzc3VlQ29tbWVudDMzODUyNDg1Nw== | simonw 9599 | 2017-10-23T01:20:30Z | 2017-10-23T01:20:30Z | OWNER | https://stackoverflow.com/a/14468878/6083 Looks like I should order by compound primary key and implement cursor-based pagination. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement sensible query pagination 267516066 | |
338526148 | https://github.com/simonw/datasette/issues/3#issuecomment-338526148 | https://api.github.com/repos/simonw/datasette/issues/3 | MDEyOklzc3VlQ29tbWVudDMzODUyNjE0OA== | simonw 9599 | 2017-10-23T01:35:17Z | 2017-10-23T01:35:17Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make individual column valuables addressable, with smart content types 267515678 | ||
338530389 | https://github.com/simonw/datasette/issues/4#issuecomment-338530389 | https://api.github.com/repos/simonw/datasette/issues/4 | MDEyOklzc3VlQ29tbWVudDMzODUzMDM4OQ== | simonw 9599 | 2017-10-23T02:15:41Z | 2017-10-23T02:15:41Z | OWNER | This means I need a good solution for these compile time options while running in development mode |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make URLs immutable 267515836 | |
338530480 | https://github.com/simonw/datasette/issues/4#issuecomment-338530480 | https://api.github.com/repos/simonw/datasette/issues/4 | MDEyOklzc3VlQ29tbWVudDMzODUzMDQ4MA== | simonw 9599 | 2017-10-23T02:16:33Z | 2017-10-23T02:16:33Z | OWNER | How about when the service starts up it checks for a compile.json file and, if it is missing, creates it using the same code we run at compile time normally |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make URLs immutable 267515836 | |
338530704 | https://github.com/simonw/datasette/issues/11#issuecomment-338530704 | https://api.github.com/repos/simonw/datasette/issues/11 | MDEyOklzc3VlQ29tbWVudDMzODUzMDcwNA== | simonw 9599 | 2017-10-23T02:18:36Z | 2017-10-23T02:18:36Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Code that generates compile-time properties about the database 267522549 | ||
338531827 | https://github.com/simonw/datasette/issues/4#issuecomment-338531827 | https://api.github.com/repos/simonw/datasette/issues/4 | MDEyOklzc3VlQ29tbWVudDMzODUzMTgyNw== | simonw 9599 | 2017-10-23T02:28:31Z | 2017-10-23T02:29:05Z | OWNER | Many of the applications I want to implement with this would benefit from having permanent real URLs. So let’s have both. The sha1 urls will serve far future cache headers (and an etag derived from their path). The non sha1 URLs will serve 302 uncached redirects to the sha1 locations. We will have a setting that lets people opt out of this behavior. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make URLs immutable 267515836 | |
338697223 | https://github.com/simonw/datasette/issues/8#issuecomment-338697223 | https://api.github.com/repos/simonw/datasette/issues/8 | MDEyOklzc3VlQ29tbWVudDMzODY5NzIyMw== | simonw 9599 | 2017-10-23T15:28:11Z | 2017-10-23T15:28:11Z | OWNER | Now returning this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Attempting an INSERT or UPDATE should return a sane error message 267517314 | |
338768860 | https://github.com/simonw/datasette/issues/16#issuecomment-338768860 | https://api.github.com/repos/simonw/datasette/issues/16 | MDEyOklzc3VlQ29tbWVudDMzODc2ODg2MA== | simonw 9599 | 2017-10-23T19:23:29Z | 2017-10-23T19:23:29Z | OWNER | I could use the table-reflow mechanism demonstrated here: http://demos.jquerymobile.com/1.4.3/table-reflow/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Default HTML/CSS needs to look reasonable and be responsive 267726219 | |
338769538 | https://github.com/simonw/datasette/issues/20#issuecomment-338769538 | https://api.github.com/repos/simonw/datasette/issues/20 | MDEyOklzc3VlQ29tbWVudDMzODc2OTUzOA== | simonw 9599 | 2017-10-23T19:25:55Z | 2017-10-23T19:25:55Z | OWNER | Maybe this should be handled by views instead? https://stateless-datasets-wreplxalgu.now.sh/ lists some views https://stateless-datasets-wreplxalgu.now.sh/?sql=select%20*%20from%20%22Order%20Subtotals%22 is an example showing the content of a view. What would the URL to views be? I don't think a view can share a name with a table, so the same URL scheme could work for both. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Config file with support for defining canned queries 267759136 | |
338789734 | https://github.com/simonw/datasette/issues/4#issuecomment-338789734 | https://api.github.com/repos/simonw/datasette/issues/4 | MDEyOklzc3VlQ29tbWVudDMzODc4OTczNA== | simonw 9599 | 2017-10-23T20:40:25Z | 2017-10-23T21:10:19Z | OWNER | URL design:
So we always redirect to the version with the truncated hash in the URL. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make URLs immutable 267515836 | |
338797522 | https://github.com/simonw/datasette/issues/4#issuecomment-338797522 | https://api.github.com/repos/simonw/datasette/issues/4 | MDEyOklzc3VlQ29tbWVudDMzODc5NzUyMg== | simonw 9599 | 2017-10-23T21:09:33Z | 2017-10-23T21:09:33Z | OWNER | https://stackoverflow.com/a/18134919/6083 is a good answer about how many characters of the hash are needed to be unique. I say we default to 7 characters, like git does - but allow extras to be configured. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make URLs immutable 267515836 | |
338799438 | https://github.com/simonw/datasette/issues/4#issuecomment-338799438 | https://api.github.com/repos/simonw/datasette/issues/4 | MDEyOklzc3VlQ29tbWVudDMzODc5OTQzOA== | simonw 9599 | 2017-10-23T21:17:25Z | 2017-10-23T21:17:25Z | OWNER | Can I take advantage of HTTP/2 so even if you get redirected I start serving you the correct resource straight away? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make URLs immutable 267515836 | |
338804173 | https://github.com/simonw/datasette/issues/4#issuecomment-338804173 | https://api.github.com/repos/simonw/datasette/issues/4 | MDEyOklzc3VlQ29tbWVudDMzODgwNDE3Mw== | simonw 9599 | 2017-10-23T21:36:37Z | 2017-10-23T21:36:37Z | OWNER | Looks like the easiest way to implement HTTP/2 server push today is to run behind Cloudflare and use this:
https://blog.cloudflare.com/announcing-support-for-http-2-server-push-2/ Here's the W3C draft: https://w3c.github.io/preload/ From https://w3c.github.io/preload/#as-attribute it looks like I should use Unclear if I should throw |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make URLs immutable 267515836 | |
338806718 | https://github.com/simonw/datasette/issues/4#issuecomment-338806718 | https://api.github.com/repos/simonw/datasette/issues/4 | MDEyOklzc3VlQ29tbWVudDMzODgwNjcxOA== | simonw 9599 | 2017-10-23T21:47:53Z | 2017-10-23T21:47:53Z | OWNER | Here's what the homepage of cloudflare.com does (with newlines added within the link header for clarity):
The original header looked like this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make URLs immutable 267515836 | |
338834213 | https://github.com/simonw/datasette/issues/24#issuecomment-338834213 | https://api.github.com/repos/simonw/datasette/issues/24 | MDEyOklzc3VlQ29tbWVudDMzODgzNDIxMw== | simonw 9599 | 2017-10-24T00:23:05Z | 2017-10-24T00:23:05Z | OWNER | If I can’t setect a primary key, I won’t provide a URL for those records |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement full URL design 267828746 | |
338852971 | https://github.com/simonw/datasette/issues/17#issuecomment-338852971 | https://api.github.com/repos/simonw/datasette/issues/17 | MDEyOklzc3VlQ29tbWVudDMzODg1Mjk3MQ== | simonw 9599 | 2017-10-24T02:26:47Z | 2017-10-24T02:26:47Z | OWNER | I'm not going to bother with this. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
In development mode, should still pick up new .db files 267732005 | |
338853083 | https://github.com/simonw/datasette/issues/7#issuecomment-338853083 | https://api.github.com/repos/simonw/datasette/issues/7 | MDEyOklzc3VlQ29tbWVudDMzODg1MzA4Mw== | simonw 9599 | 2017-10-24T02:27:25Z | 2017-10-24T02:27:25Z | OWNER | Fixed in 9d219140694551453bfa528e0624919eb065f9d6 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Framework where by every page is JSON plus a template 267516650 | |
338854988 | https://github.com/simonw/datasette/issues/23#issuecomment-338854988 | https://api.github.com/repos/simonw/datasette/issues/23 | MDEyOklzc3VlQ29tbWVudDMzODg1NDk4OA== | simonw 9599 | 2017-10-24T02:40:12Z | 2017-10-25T00:05:46Z | OWNER |
Note that if there's a column called "sort" you can still do sort__exact=blah |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support Django-style filters in querystring arguments 267788884 | |
338857568 | https://github.com/simonw/datasette/issues/1#issuecomment-338857568 | https://api.github.com/repos/simonw/datasette/issues/1 | MDEyOklzc3VlQ29tbWVudDMzODg1NzU2OA== | simonw 9599 | 2017-10-24T02:57:12Z | 2017-10-24T02:57:12Z | OWNER | I can find the primary keys using:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Addressable pages for every row in a table 267513424 | |
338859620 | https://github.com/simonw/datasette/issues/23#issuecomment-338859620 | https://api.github.com/repos/simonw/datasette/issues/23 | MDEyOklzc3VlQ29tbWVudDMzODg1OTYyMA== | simonw 9599 | 2017-10-24T03:11:42Z | 2017-10-24T03:11:42Z | OWNER | I’m going to implement everything in https://docs.djangoproject.com/en/1.11/ref/models/querysets/#field-lookups with the exception of range and the various date ones. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support Django-style filters in querystring arguments 267788884 | |
338859709 | https://github.com/simonw/datasette/issues/23#issuecomment-338859709 | https://api.github.com/repos/simonw/datasette/issues/23 | MDEyOklzc3VlQ29tbWVudDMzODg1OTcwOQ== | simonw 9599 | 2017-10-24T03:12:18Z | 2017-10-24T03:12:42Z | OWNER | I’m going to need to write unit tests for this, is this depends on #9 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support Django-style filters in querystring arguments 267788884 | |
338861511 | https://github.com/simonw/datasette/issues/1#issuecomment-338861511 | https://api.github.com/repos/simonw/datasette/issues/1 | MDEyOklzc3VlQ29tbWVudDMzODg2MTUxMQ== | simonw 9599 | 2017-10-24T03:24:17Z | 2017-10-24T03:24:17Z | OWNER | Some tables won't have primary keys, in which case I won't generate pages for individual records. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Addressable pages for every row in a table 267513424 | |
338863155 | https://github.com/simonw/datasette/issues/9#issuecomment-338863155 | https://api.github.com/repos/simonw/datasette/issues/9 | MDEyOklzc3VlQ29tbWVudDMzODg2MzE1NQ== | simonw 9599 | 2017-10-24T03:36:58Z | 2017-10-24T03:36:58Z | OWNER | I’m going to use py.test and start with all tests in a single tests.py module |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Initial test suite 267517348 | |
338872286 | https://github.com/simonw/datasette/issues/1#issuecomment-338872286 | https://api.github.com/repos/simonw/datasette/issues/1 | MDEyOklzc3VlQ29tbWVudDMzODg3MjI4Ng== | simonw 9599 | 2017-10-24T04:46:06Z | 2017-10-24T04:46:06Z | OWNER | I'm going to use |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Addressable pages for every row in a table 267513424 | |
338882110 | https://github.com/simonw/datasette/issues/9#issuecomment-338882110 | https://api.github.com/repos/simonw/datasette/issues/9 | MDEyOklzc3VlQ29tbWVudDMzODg4MjExMA== | simonw 9599 | 2017-10-24T05:55:33Z | 2017-10-24T05:55:33Z | OWNER | Well, I've started it at least. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Initial test suite 267517348 | |
338882207 | https://github.com/simonw/datasette/issues/1#issuecomment-338882207 | https://api.github.com/repos/simonw/datasette/issues/1 | MDEyOklzc3VlQ29tbWVudDMzODg4MjIwNw== | simonw 9599 | 2017-10-24T05:56:04Z | 2017-10-24T05:56:04Z | OWNER | Next step: generate links to these. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Addressable pages for every row in a table 267513424 | |
339003850 | https://github.com/simonw/datasette/issues/24#issuecomment-339003850 | https://api.github.com/repos/simonw/datasette/issues/24 | MDEyOklzc3VlQ29tbWVudDMzOTAwMzg1MA== | simonw 9599 | 2017-10-24T14:12:00Z | 2017-10-24T14:12:00Z | OWNER | As of b46e370ee6126aa2fa85cf789a31da38aed98496 this is done. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement full URL design 267828746 | |
339019873 | https://github.com/simonw/datasette/issues/29#issuecomment-339019873 | https://api.github.com/repos/simonw/datasette/issues/29 | MDEyOklzc3VlQ29tbWVudDMzOTAxOTg3Mw== | simonw 9599 | 2017-10-24T14:58:33Z | 2017-10-24T14:58:33Z | OWNER | Here's what I've got now: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Handle bytestring records encoding to JSON 268050821 | |
339027711 | https://github.com/simonw/datasette/issues/5#issuecomment-339027711 | https://api.github.com/repos/simonw/datasette/issues/5 | MDEyOklzc3VlQ29tbWVudDMzOTAyNzcxMQ== | simonw 9599 | 2017-10-24T15:21:30Z | 2017-10-24T15:21:30Z | OWNER | I have code to detect primary keys on tables... but what should I do for tables that lack primary keys? How should I even sort them? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement sensible query pagination 267516066 | |
339028979 | https://github.com/simonw/datasette/issues/5#issuecomment-339028979 | https://api.github.com/repos/simonw/datasette/issues/5 | MDEyOklzc3VlQ29tbWVudDMzOTAyODk3OQ== | simonw 9599 | 2017-10-24T15:25:08Z | 2017-10-24T15:25:08Z | OWNER | Looks like I can use the SQLite specific “rowid” in that case. It isn’t guaranteed to stay consistent across a VACUUM but that’s ok because we are immutable anyway. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement sensible query pagination 267516066 | |
339138809 | https://github.com/simonw/datasette/issues/23#issuecomment-339138809 | https://api.github.com/repos/simonw/datasette/issues/23 | MDEyOklzc3VlQ29tbWVudDMzOTEzODgwOQ== | simonw 9599 | 2017-10-24T21:32:46Z | 2017-10-24T21:32:46Z | OWNER | May as well support most of https://sqlite.org/lang_expr.html |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support Django-style filters in querystring arguments 267788884 | |
339186887 | https://github.com/simonw/datasette/issues/23#issuecomment-339186887 | https://api.github.com/repos/simonw/datasette/issues/23 | MDEyOklzc3VlQ29tbWVudDMzOTE4Njg4Nw== | simonw 9599 | 2017-10-25T01:39:43Z | 2017-10-25T04:22:41Z | OWNER | Still to do:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support Django-style filters in querystring arguments 267788884 | |
339210353 | https://github.com/simonw/datasette/issues/23#issuecomment-339210353 | https://api.github.com/repos/simonw/datasette/issues/23 | MDEyOklzc3VlQ29tbWVudDMzOTIxMDM1Mw== | simonw 9599 | 2017-10-25T04:23:02Z | 2017-10-25T04:23:02Z | OWNER | I'm going to call this one done for the moment. The date filters can go in a stretch goal. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support Django-style filters in querystring arguments 267788884 | |
339366612 | https://github.com/simonw/datasette/issues/19#issuecomment-339366612 | https://api.github.com/repos/simonw/datasette/issues/19 | MDEyOklzc3VlQ29tbWVudDMzOTM2NjYxMg== | simonw 9599 | 2017-10-25T15:21:16Z | 2017-10-25T15:21:16Z | OWNER | I had to manually set the content disposition header:
In the next release of Sanic I can just use the filename= argument instead: https://github.com/channelcat/sanic/commit/07e95dba4f5983afc1e673df14bdd278817288aa |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Efficient url for downloading the raw database file 267741262 | |
339382054 | https://github.com/simonw/datasette/issues/37#issuecomment-339382054 | https://api.github.com/repos/simonw/datasette/issues/37 | MDEyOklzc3VlQ29tbWVudDMzOTM4MjA1NA== | simonw 9599 | 2017-10-25T16:05:56Z | 2017-10-25T16:05:56Z | OWNER | Could this be as simple as using the iterative JSON encoder and adding a yield statement in between each chunk? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ability to serialize massive JSON without blocking event loop 268453968 | |
339388215 | https://github.com/simonw/datasette/issues/38#issuecomment-339388215 | https://api.github.com/repos/simonw/datasette/issues/38 | MDEyOklzc3VlQ29tbWVudDMzOTM4ODIxNQ== | simonw 9599 | 2017-10-25T16:25:45Z | 2017-10-25T16:25:45Z | OWNER | First experiment: hook up an iterative CSV dump (just because that’s a tiny bit easier to get started with than iterative a JSON). Have it execute a big select statement and then iterate through the result set 100 rows at a time using sqite fetchmany() - also have it async sleep for a second in between each batch of 100. Can this work without needing python threads? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Experiment with patterns for concurrent long running queries 268462768 | |
339388771 | https://github.com/simonw/datasette/issues/38#issuecomment-339388771 | https://api.github.com/repos/simonw/datasette/issues/38 | MDEyOklzc3VlQ29tbWVudDMzOTM4ODc3MQ== | simonw 9599 | 2017-10-25T16:27:29Z | 2017-10-25T16:27:29Z | OWNER | If this does work, I need to figure it what to do about the HTML view. ASsuming I can iteratively produce JSON and CSV, what to do about HTML? One option: render the first 500 rows as HTML, then hand off to an infinite scroll experience that iteratively loads more rows as JSON. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Experiment with patterns for concurrent long running queries 268462768 | |
339389105 | https://github.com/simonw/datasette/issues/38#issuecomment-339389105 | https://api.github.com/repos/simonw/datasette/issues/38 | MDEyOklzc3VlQ29tbWVudDMzOTM4OTEwNQ== | simonw 9599 | 2017-10-25T16:28:39Z | 2017-10-25T16:28:39Z | OWNER | The gold standard here is to be able to serve up increasingly large datasets without blocking the event loop and while using a sustainable amount of RAM |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Experiment with patterns for concurrent long running queries 268462768 | |
339389328 | https://github.com/simonw/datasette/issues/38#issuecomment-339389328 | https://api.github.com/repos/simonw/datasette/issues/38 | MDEyOklzc3VlQ29tbWVudDMzOTM4OTMyOA== | simonw 9599 | 2017-10-25T16:29:23Z | 2017-10-25T16:29:23Z | OWNER | Ideally we can get some serious gains from the fact that our database file is opened with the immutable option. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Experiment with patterns for concurrent long running queries 268462768 | |
339395551 | https://github.com/simonw/datasette/issues/40#issuecomment-339395551 | https://api.github.com/repos/simonw/datasette/issues/40 | MDEyOklzc3VlQ29tbWVudDMzOTM5NTU1MQ== | simonw 9599 | 2017-10-25T16:49:32Z | 2017-10-25T16:49:32Z | OWNER | Simplest implementation will be to create a temporary directory somewhere, copy in a Dockerfile and the databases and run “now” in it. Ideally I can use symlinks rather than copying potentially large database files around. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement command-line tool interface 268470572 | |
339406634 | https://github.com/simonw/datasette/issues/39#issuecomment-339406634 | https://api.github.com/repos/simonw/datasette/issues/39 | MDEyOklzc3VlQ29tbWVudDMzOTQwNjYzNA== | simonw 9599 | 2017-10-25T17:27:10Z | 2017-10-25T17:27:10Z | OWNER | It certainly looks like some of the stuff in https://sqlite.org/pragma.html could be used to screw around with things. Example: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Protect against malicious SQL that causes damage even though our DB is immutable 268469569 | |
339413825 | https://github.com/simonw/datasette/issues/39#issuecomment-339413825 | https://api.github.com/repos/simonw/datasette/issues/39 | MDEyOklzc3VlQ29tbWVudDMzOTQxMzgyNQ== | simonw 9599 | 2017-10-25T17:48:48Z | 2017-10-25T17:48:48Z | OWNER | Could I use https://sqlparse.readthedocs.io/en/latest/ to parse incoming statements and ensure they are pure SELECTs? Would that prevent people from using a compound SELECT statement to trigger an evil PRAGMA of some sort? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Protect against malicious SQL that causes damage even though our DB is immutable 268469569 | |
339420462 | https://github.com/simonw/datasette/issues/16#issuecomment-339420462 | https://api.github.com/repos/simonw/datasette/issues/16 | MDEyOklzc3VlQ29tbWVudDMzOTQyMDQ2Mg== | simonw 9599 | 2017-10-25T18:10:51Z | 2017-10-25T18:10:51Z | OWNER | https://sitesforprofit.com/responsive-table-plugins-and-patterns has some useful links. I really like the pattern from https://css-tricks.com/responsive-data-tables/
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Default HTML/CSS needs to look reasonable and be responsive 267726219 | |
339510770 | https://github.com/simonw/datasette/issues/39#issuecomment-339510770 | https://api.github.com/repos/simonw/datasette/issues/39 | MDEyOklzc3VlQ29tbWVudDMzOTUxMDc3MA== | simonw 9599 | 2017-10-26T00:07:40Z | 2017-10-26T00:07:40Z | OWNER | It looks like I should double quote my columns and ensure they are correctly escaped https://blog.christosoft.de/2012/10/sqlite-escaping-table-acolumn-names/ - hopefully using ? placeholders for column names will work. I should use ? for tables too. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Protect against malicious SQL that causes damage even though our DB is immutable 268469569 | |
339514819 | https://github.com/simonw/datasette/issues/40#issuecomment-339514819 | https://api.github.com/repos/simonw/datasette/issues/40 | MDEyOklzc3VlQ29tbWVudDMzOTUxNDgxOQ== | simonw 9599 | 2017-10-26T00:35:46Z | 2017-10-26T00:35:46Z | OWNER | I’m going to have a single command-line app that does everything. Name to be decided - options include dataset, stateless, datasite (I quite like that - it reflects SQLite and the fact that you create a website) |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement command-line tool interface 268470572 | |
339515822 | https://github.com/simonw/datasette/issues/40#issuecomment-339515822 | https://api.github.com/repos/simonw/datasette/issues/40 | MDEyOklzc3VlQ29tbWVudDMzOTUxNTgyMg== | simonw 9599 | 2017-10-26T00:43:34Z | 2017-10-26T00:43:34Z | OWNER | datasite .
datasite . -p 8001
datasite blah.db blah2.db
You can’t specify more than one directory. You can specify as many files as you like. If you specify two files with different oaths but the same name then they must be accessed by hash. datasite publish .
datasite publish http://path-to-db.db
datasite blah.db -m metadata.json If you specify a directory it looks for metadata.json in that directory. Otherwise you can pass an explicit metadata file oath with -m or —metadata |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement command-line tool interface 268470572 | |
339516032 | https://github.com/simonw/datasette/issues/40#issuecomment-339516032 | https://api.github.com/repos/simonw/datasette/issues/40 | MDEyOklzc3VlQ29tbWVudDMzOTUxNjAzMg== | simonw 9599 | 2017-10-26T00:44:52Z | 2017-10-26T00:44:52Z | OWNER | Another potential name: datapi |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement command-line tool interface 268470572 | |
339517846 | https://github.com/simonw/datasette/issues/40#issuecomment-339517846 | https://api.github.com/repos/simonw/datasette/issues/40 | MDEyOklzc3VlQ29tbWVudDMzOTUxNzg0Ng== | simonw 9599 | 2017-10-26T00:58:39Z | 2017-10-26T00:58:39Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement command-line tool interface 268470572 | ||
339724700 | https://github.com/simonw/datasette/issues/40#issuecomment-339724700 | https://api.github.com/repos/simonw/datasette/issues/40 | MDEyOklzc3VlQ29tbWVudDMzOTcyNDcwMA== | simonw 9599 | 2017-10-26T16:35:20Z | 2017-10-26T16:35:20Z | OWNER | Here’s how to make the “serve” subcommand the default if it is called with no arguments:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement command-line tool interface 268470572 | |
339866724 | https://github.com/simonw/datasette/issues/41#issuecomment-339866724 | https://api.github.com/repos/simonw/datasette/issues/41 | MDEyOklzc3VlQ29tbWVudDMzOTg2NjcyNA== | simonw 9599 | 2017-10-27T04:04:52Z | 2017-10-27T04:04:52Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Homepage should show summary of databases 268590777 | ||
339891755 | https://github.com/simonw/datasette/issues/40#issuecomment-339891755 | https://api.github.com/repos/simonw/datasette/issues/40 | MDEyOklzc3VlQ29tbWVudDMzOTg5MTc1NQ== | simonw 9599 | 2017-10-27T07:10:53Z | 2017-10-27T07:10:53Z | OWNER | Deploys to Now aren't working at the moment - they aren't showing the uploaded databases, because I've broken the path handling somehow. I need to do a bit more work here. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement command-line tool interface 268470572 | |
340561577 | https://github.com/simonw/datasette/issues/40#issuecomment-340561577 | https://api.github.com/repos/simonw/datasette/issues/40 | MDEyOklzc3VlQ29tbWVudDM0MDU2MTU3Nw== | simonw 9599 | 2017-10-30T19:43:40Z | 2017-10-30T19:43:40Z | OWNER | http://the-hitchhikers-guide-to-packaging.readthedocs.io/en/latest/quickstart.html describes how to package this for PyPI |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement command-line tool interface 268470572 | |
340787868 | https://github.com/simonw/datasette/issues/39#issuecomment-340787868 | https://api.github.com/repos/simonw/datasette/issues/39 | MDEyOklzc3VlQ29tbWVudDM0MDc4Nzg2OA== | simonw 9599 | 2017-10-31T14:54:14Z | 2017-10-31T14:54:14Z | OWNER | Here’s how I can (I think) provide safe execution of arbitrary SQL while blocking PRAGMA calls: let people use names parameters in their SQL and apply strict filtering to the SQL query but not to the parameter values.
In URL form:
Now we can apply strict, dumb validation rules to the SQL part while allowing anything in the named queries - so people can execute a search for PRAGMA without being able to execute a PRAGMA statement. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Protect against malicious SQL that causes damage even though our DB is immutable 268469569 | |
341938424 | https://github.com/simonw/datasette/issues/10#issuecomment-341938424 | https://api.github.com/repos/simonw/datasette/issues/10 | MDEyOklzc3VlQ29tbWVudDM0MTkzODQyNA== | simonw 9599 | 2017-11-04T23:48:57Z | 2017-11-04T23:48:57Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Set up Travis 267517381 | ||
341945420 | https://github.com/simonw/datasette/issues/40#issuecomment-341945420 | https://api.github.com/repos/simonw/datasette/issues/40 | MDEyOklzc3VlQ29tbWVudDM0MTk0NTQyMA== | simonw 9599 | 2017-11-05T02:55:07Z | 2017-11-05T02:55:07Z | OWNER | To simplify things a bit, I'm going to require that every database is explicitly listed in the command line. I won't support "serve everything in this directory" for the moment. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement command-line tool interface 268470572 | |
342030075 | https://github.com/simonw/datasette/issues/40#issuecomment-342030075 | https://api.github.com/repos/simonw/datasette/issues/40 | MDEyOklzc3VlQ29tbWVudDM0MjAzMDA3NQ== | simonw 9599 | 2017-11-06T02:25:48Z | 2017-11-06T02:25:48Z | OWNER | ... I tried that, I don't like it. I'm going to bring back "directory serving" by allowing you to pass a directory as an argument to |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement command-line tool interface 268470572 | |
342032943 | https://github.com/simonw/datasette/issues/16#issuecomment-342032943 | https://api.github.com/repos/simonw/datasette/issues/16 | MDEyOklzc3VlQ29tbWVudDM0MjAzMjk0Mw== | simonw 9599 | 2017-11-06T02:50:07Z | 2017-11-06T02:50:07Z | OWNER | Default look with Bootstrap 4 looks like this: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Default HTML/CSS needs to look reasonable and be responsive 267726219 | |
342484889 | https://github.com/simonw/datasette/issues/44#issuecomment-342484889 | https://api.github.com/repos/simonw/datasette/issues/44 | MDEyOklzc3VlQ29tbWVudDM0MjQ4NDg4OQ== | simonw 9599 | 2017-11-07T13:39:49Z | 2017-11-07T13:39:49Z | OWNER | I’m going to call this feature “count values” |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_group_count=country - return counts by specific column(s) 269731374 | |
342521344 | https://github.com/simonw/datasette/issues/47#issuecomment-342521344 | https://api.github.com/repos/simonw/datasette/issues/47 | MDEyOklzc3VlQ29tbWVudDM0MjUyMTM0NA== | simonw 9599 | 2017-11-07T15:37:45Z | 2017-11-07T15:37:45Z | OWNER | GDS Registries could be fun too: https://registers.cloudapps.digital/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Create neat example database 271831408 | |
343164111 | https://github.com/simonw/datasette/issues/32#issuecomment-343164111 | https://api.github.com/repos/simonw/datasette/issues/32 | MDEyOklzc3VlQ29tbWVudDM0MzE2NDExMQ== | simonw 9599 | 2017-11-09T14:05:56Z | 2017-11-09T14:05:56Z | OWNER | Implemented in 31b21f5c5e15fc3acab7fabb170c1da71dc3c98c |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Try running SQLite queries in a separate thread 268106803 | |
343168796 | https://github.com/simonw/datasette/issues/48#issuecomment-343168796 | https://api.github.com/repos/simonw/datasette/issues/48 | MDEyOklzc3VlQ29tbWVudDM0MzE2ODc5Ng== | simonw 9599 | 2017-11-09T14:22:21Z | 2017-11-09T14:22:21Z | OWNER | Won't fix: ujson is not compatible with the custom JSON encoder I'm using here: https://github.com/simonw/immutabase/blob/b2dee11fcd989d9e2a7bf4de1e23dbc320c05013/immutabase/app.py#L401-L416 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch to ujson 272391665 | |
343237982 | https://github.com/simonw/datasette/issues/49#issuecomment-343237982 | https://api.github.com/repos/simonw/datasette/issues/49 | MDEyOklzc3VlQ29tbWVudDM0MzIzNzk4Mg== | simonw 9599 | 2017-11-09T17:58:01Z | 2017-11-09T17:58:01Z | OWNER | More terms:
I want to capture the idea of publishing an immutable database in a stateless container. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Pick a name 272661336 | |
343238262 | https://github.com/simonw/datasette/issues/49#issuecomment-343238262 | https://api.github.com/repos/simonw/datasette/issues/49 | MDEyOklzc3VlQ29tbWVudDM0MzIzODI2Mg== | simonw 9599 | 2017-11-09T17:58:59Z | 2017-11-09T17:58:59Z | OWNER | The name should ideally be available on PyPI and should make sense as both a command line application and a library. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Pick a name 272661336 | |
343239062 | https://github.com/simonw/datasette/issues/48#issuecomment-343239062 | https://api.github.com/repos/simonw/datasette/issues/48 | MDEyOklzc3VlQ29tbWVudDM0MzIzOTA2Mg== | simonw 9599 | 2017-11-09T18:01:46Z | 2017-11-09T18:01:46Z | OWNER | This looks promising: https://github.com/esnme/ultrajson/issues/124#issuecomment-323882878 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Switch to ujson 272391665 | |
343266326 | https://github.com/simonw/datasette/issues/50#issuecomment-343266326 | https://api.github.com/repos/simonw/datasette/issues/50 | MDEyOklzc3VlQ29tbWVudDM0MzI2NjMyNg== | simonw 9599 | 2017-11-09T19:33:18Z | 2017-11-09T19:33:18Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Unit tests against application itself 272694136 | ||
343281876 | https://github.com/simonw/datasette/issues/49#issuecomment-343281876 | https://api.github.com/repos/simonw/datasette/issues/49 | MDEyOklzc3VlQ29tbWVudDM0MzI4MTg3Ng== | simonw 9599 | 2017-11-09T20:30:42Z | 2017-11-09T20:30:42Z | OWNER | How about datasette? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Pick a name 272661336 | |
343551356 | https://github.com/simonw/datasette/issues/49#issuecomment-343551356 | https://api.github.com/repos/simonw/datasette/issues/49 | MDEyOklzc3VlQ29tbWVudDM0MzU1MTM1Ng== | simonw 9599 | 2017-11-10T18:33:22Z | 2017-11-10T18:33:22Z | OWNER | I'm going with datasette. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Pick a name 272661336 | |
343557070 | https://github.com/simonw/datasette/issues/52#issuecomment-343557070 | https://api.github.com/repos/simonw/datasette/issues/52 | MDEyOklzc3VlQ29tbWVudDM0MzU1NzA3MA== | simonw 9599 | 2017-11-10T18:57:47Z | 2017-11-10T18:57:47Z | OWNER | https://file.io/ looks like it could be good for this. It's been around since 2015, and lets you upload a temporary file which can be downloaded once.
Downloading from that URL serves up the data with a
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Solution for temporarily uploading DB so it can be built by docker 273026602 | |
343581130 | https://github.com/simonw/datasette/issues/20#issuecomment-343581130 | https://api.github.com/repos/simonw/datasette/issues/20 | MDEyOklzc3VlQ29tbWVudDM0MzU4MTEzMA== | simonw 9599 | 2017-11-10T20:44:38Z | 2017-11-10T20:44:38Z | OWNER | I'm going to handle this a different way. I'm going to support a local history of your own queries stored in localStorage, but if you want to share a query you have to do it with a URL. If people really want canned query support, they can do that using custom templates - see #12 - or by adding views to their database before they publish it. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Config file with support for defining canned queries 267759136 | |
343581332 | https://github.com/simonw/datasette/issues/21#issuecomment-343581332 | https://api.github.com/repos/simonw/datasette/issues/21 | MDEyOklzc3VlQ29tbWVudDM0MzU4MTMzMg== | simonw 9599 | 2017-11-10T20:45:42Z | 2017-11-10T20:45:42Z | OWNER | I'm not going to use Sanic's mechanism for this. I'll use arguments passed to my cli instead. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Use Sanic configuration mechanism 267769034 | |
343643332 | https://github.com/simonw/datasette/issues/16#issuecomment-343643332 | https://api.github.com/repos/simonw/datasette/issues/16 | MDEyOklzc3VlQ29tbWVudDM0MzY0MzMzMg== | simonw 9599 | 2017-11-11T06:00:04Z | 2017-11-11T06:00:04Z | OWNER | Here's what a table looks like now at a smaller screen size: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Default HTML/CSS needs to look reasonable and be responsive 267726219 | |
343644891 | https://github.com/simonw/datasette/issues/54#issuecomment-343644891 | https://api.github.com/repos/simonw/datasette/issues/54 | MDEyOklzc3VlQ29tbWVudDM0MzY0NDg5MQ== | simonw 9599 | 2017-11-11T06:39:54Z | 2017-11-11T06:39:54Z | OWNER | I can detect something is a view like this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Views should not attempt to link to records / use rowids 273121803 | |
343644976 | https://github.com/simonw/datasette/issues/26#issuecomment-343644976 | https://api.github.com/repos/simonw/datasette/issues/26 | MDEyOklzc3VlQ29tbWVudDM0MzY0NDk3Ng== | simonw 9599 | 2017-11-11T06:42:23Z | 2017-11-11T06:42:23Z | OWNER | Simplest version of this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Command line tool for uploading one or more DBs to Now 267861210 | |
343645249 | https://github.com/simonw/datasette/issues/26#issuecomment-343645249 | https://api.github.com/repos/simonw/datasette/issues/26 | MDEyOklzc3VlQ29tbWVudDM0MzY0NTI0OQ== | simonw 9599 | 2017-11-11T06:48:59Z | 2017-11-11T06:48:59Z | OWNER | Doing this works:
That creates a link in tmp-blah - and then when I delete that entire directory like so:
The original database is not deleted, just the link. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Command line tool for uploading one or more DBs to Now 267861210 | |
343645327 | https://github.com/simonw/datasette/issues/26#issuecomment-343645327 | https://api.github.com/repos/simonw/datasette/issues/26 | MDEyOklzc3VlQ29tbWVudDM0MzY0NTMyNw== | simonw 9599 | 2017-11-11T06:51:16Z | 2017-11-11T06:51:16Z | OWNER | I can create the temporary directory like so:
And then to delete it all:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Command line tool for uploading one or more DBs to Now 267861210 | |
343646740 | https://github.com/simonw/datasette/issues/40#issuecomment-343646740 | https://api.github.com/repos/simonw/datasette/issues/40 | MDEyOklzc3VlQ29tbWVudDM0MzY0Njc0MA== | simonw 9599 | 2017-11-11T07:27:33Z | 2017-11-11T07:27:33Z | OWNER | I'm happy with this now that I've implemented the publish command in #26 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement command-line tool interface 268470572 | |
343647102 | https://github.com/simonw/datasette/issues/47#issuecomment-343647102 | https://api.github.com/repos/simonw/datasette/issues/47 | MDEyOklzc3VlQ29tbWVudDM0MzY0NzEwMg== | simonw 9599 | 2017-11-11T07:36:00Z | 2017-11-11T07:36:00Z | OWNER | http://2016.padjo.org/tutorials/data-primer-census-acs1-demographics/ has a sqlite database: http://2016.padjo.org/files/data/starterpack/census-acs-1year/acs-1-year-2015.sqlite I tested this by deploying it here: https://datasette-fewuggrvwr.now.sh/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Create neat example database 271831408 | |
343647300 | https://github.com/simonw/datasette/issues/16#issuecomment-343647300 | https://api.github.com/repos/simonw/datasette/issues/16 | MDEyOklzc3VlQ29tbWVudDM0MzY0NzMwMA== | simonw 9599 | 2017-11-11T07:41:19Z | 2017-11-11T07:53:09Z | OWNER | Still needed:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Default HTML/CSS needs to look reasonable and be responsive 267726219 | |
343675165 | https://github.com/simonw/datasette/issues/14#issuecomment-343675165 | https://api.github.com/repos/simonw/datasette/issues/14 | MDEyOklzc3VlQ29tbWVudDM0MzY3NTE2NQ== | simonw 9599 | 2017-11-11T16:07:10Z | 2017-11-11T16:07:10Z | OWNER | The plugin system can also allow alternative providers for the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Datasette Plugins 267707940 | |
343676574 | https://github.com/simonw/datasette/issues/59#issuecomment-343676574 | https://api.github.com/repos/simonw/datasette/issues/59 | MDEyOklzc3VlQ29tbWVudDM0MzY3NjU3NA== | simonw 9599 | 2017-11-11T16:29:48Z | 2017-11-11T16:29:48Z | OWNER | See also #14 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
datasette publish hyper 273157085 | |
343683566 | https://github.com/simonw/datasette/issues/60#issuecomment-343683566 | https://api.github.com/repos/simonw/datasette/issues/60 | MDEyOklzc3VlQ29tbWVudDM0MzY4MzU2Ng== | simonw 9599 | 2017-11-11T18:12:24Z | 2017-11-11T18:12:24Z | OWNER | I’m going to solve this by making it an optional argument you can pass to the serve command. Then the Dockerfile can still build and use it but it won’t interfere with tests or dev. If argument is not passed, we will calculate hashes on startup and calculate table row counts on demand. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Rethink how metadata is generated and stored 273163905 | |
343690060 | https://github.com/simonw/datasette/issues/47#issuecomment-343690060 | https://api.github.com/repos/simonw/datasette/issues/47 | MDEyOklzc3VlQ29tbWVudDM0MzY5MDA2MA== | simonw 9599 | 2017-11-11T19:56:08Z | 2017-11-11T19:56:08Z | OWNER |
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Create neat example database 271831408 | |
343691342 | https://github.com/simonw/datasette/issues/16#issuecomment-343691342 | https://api.github.com/repos/simonw/datasette/issues/16 | MDEyOklzc3VlQ29tbWVudDM0MzY5MTM0Mg== | simonw 9599 | 2017-11-11T20:19:07Z | 2017-11-11T20:19:07Z | OWNER | Closing this, opening a fresh ticket for the navigation stuff. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Default HTML/CSS needs to look reasonable and be responsive 267726219 | |
343697291 | https://github.com/simonw/datasette/issues/63#issuecomment-343697291 | https://api.github.com/repos/simonw/datasette/issues/63 | MDEyOklzc3VlQ29tbWVudDM0MzY5NzI5MQ== | simonw 9599 | 2017-11-11T22:05:06Z | 2017-11-11T22:11:49Z | OWNER | I'm going to bundle sql and sql_params together into a query nested object like this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Review design of JSON output 273174447 | |
343698214 | https://github.com/simonw/datasette/issues/50#issuecomment-343698214 | https://api.github.com/repos/simonw/datasette/issues/50 | MDEyOklzc3VlQ29tbWVudDM0MzY5ODIxNA== | simonw 9599 | 2017-11-11T22:23:21Z | 2017-11-11T22:23:21Z | OWNER | I'm closing #50 - more tests will be added in the future, but the framework is neatly in place for them now. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Unit tests against application itself 272694136 | |
343699115 | https://github.com/simonw/datasette/issues/53#issuecomment-343699115 | https://api.github.com/repos/simonw/datasette/issues/53 | MDEyOklzc3VlQ29tbWVudDM0MzY5OTExNQ== | simonw 9599 | 2017-11-11T22:41:38Z | 2017-11-11T22:41:38Z | OWNER | This needs to incorporate a sensible way of presenting custom SQL query results too. And let's get a textarea in there for executing SQL while we're at it. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement a better database index page 273054652 | |
343705966 | https://github.com/simonw/datasette/issues/47#issuecomment-343705966 | https://api.github.com/repos/simonw/datasette/issues/47 | MDEyOklzc3VlQ29tbWVudDM0MzcwNTk2Ng== | simonw 9599 | 2017-11-12T01:00:20Z | 2017-11-12T01:00:20Z | OWNER | https://github.com/fivethirtyeight/data has a ton of CSVs |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Create neat example database 271831408 | |
343707624 | https://github.com/simonw/datasette/issues/53#issuecomment-343707624 | https://api.github.com/repos/simonw/datasette/issues/53 | MDEyOklzc3VlQ29tbWVudDM0MzcwNzYyNA== | simonw 9599 | 2017-11-12T01:47:45Z | 2017-11-12T01:47:45Z | OWNER | Split the SQL thing out into #65 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement a better database index page 273054652 | |
343707676 | https://github.com/simonw/datasette/issues/53#issuecomment-343707676 | https://api.github.com/repos/simonw/datasette/issues/53 | MDEyOklzc3VlQ29tbWVudDM0MzcwNzY3Ng== | simonw 9599 | 2017-11-12T01:49:07Z | 2017-11-12T01:49:07Z | OWNER | Here's the new design: Also lists views at the bottom (refs #54): |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Implement a better database index page 273054652 | |
343708447 | https://github.com/simonw/datasette/issues/42#issuecomment-343708447 | https://api.github.com/repos/simonw/datasette/issues/42 | MDEyOklzc3VlQ29tbWVudDM0MzcwODQ0Nw== | simonw 9599 | 2017-11-12T02:12:15Z | 2017-11-12T02:12:15Z | OWNER | I ditched the metadata file concept. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Homepage UI for editing metadata file 268591332 | |
343709217 | https://github.com/simonw/datasette/issues/65#issuecomment-343709217 | https://api.github.com/repos/simonw/datasette/issues/65 | MDEyOklzc3VlQ29tbWVudDM0MzcwOTIxNw== | simonw 9599 | 2017-11-12T02:36:37Z | 2017-11-12T02:36:37Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Re-implement ?sql= mode 273191608 | ||
343715915 | https://github.com/simonw/datasette/issues/25#issuecomment-343715915 | https://api.github.com/repos/simonw/datasette/issues/25 | MDEyOklzc3VlQ29tbWVudDM0MzcxNTkxNQ== | simonw 9599 | 2017-11-12T06:08:28Z | 2017-11-12T06:08:28Z | OWNER |
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Endpoint that returns SQL ready to be piped into DB 267857622 | |
343752404 | https://github.com/simonw/datasette/issues/42#issuecomment-343752404 | https://api.github.com/repos/simonw/datasette/issues/42 | MDEyOklzc3VlQ29tbWVudDM0Mzc1MjQwNA== | simonw 9599 | 2017-11-12T17:20:10Z | 2017-11-12T17:20:10Z | OWNER | Re-opening this - I've decided to bring back this concept, see #68 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Homepage UI for editing metadata file 268591332 | |
343752579 | https://github.com/simonw/datasette/issues/69#issuecomment-343752579 | https://api.github.com/repos/simonw/datasette/issues/69 | MDEyOklzc3VlQ29tbWVudDM0Mzc1MjU3OQ== | simonw 9599 | 2017-11-12T17:22:39Z | 2017-11-12T17:22:39Z | OWNER | By default I'll allow LIMIT and OFFSET up to a maximum of X (where X is let's say 50,000 to start with, but can be custom configured to a larger number or set to None for no limit). |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Enforce pagination (or at least limits) for arbitrary custom SQL 273248366 | |
343752683 | https://github.com/simonw/datasette/issues/66#issuecomment-343752683 | https://api.github.com/repos/simonw/datasette/issues/66 | MDEyOklzc3VlQ29tbWVudDM0Mzc1MjY4Mw== | simonw 9599 | 2017-11-12T17:24:05Z | 2017-11-12T17:24:21Z | OWNER | Maybe SQL views should have their own Sanic view class ( |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Show table SQL on table page 273191806 | |
343753999 | https://github.com/simonw/datasette/issues/68#issuecomment-343753999 | https://api.github.com/repos/simonw/datasette/issues/68 | MDEyOklzc3VlQ29tbWVudDM0Mzc1Mzk5OQ== | simonw 9599 | 2017-11-12T17:45:21Z | 2017-11-12T19:38:33Z | OWNER | For initial launch, I could just support this as some optional command line arguments you pass to the publish command:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support for title/source/license metadata 273247186 | |
343754058 | https://github.com/simonw/datasette/issues/68#issuecomment-343754058 | https://api.github.com/repos/simonw/datasette/issues/68 | MDEyOklzc3VlQ29tbWVudDM0Mzc1NDA1OA== | simonw 9599 | 2017-11-12T17:46:13Z | 2017-11-12T17:46:13Z | OWNER | I’m going to store this stuff in a file called metadata.json and move the existing automatically generated metadata to a file called build.json |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support for title/source/license metadata 273247186 | |
343769692 | https://github.com/simonw/datasette/issues/57#issuecomment-343769692 | https://api.github.com/repos/simonw/datasette/issues/57 | MDEyOklzc3VlQ29tbWVudDM0Mzc2OTY5Mg== | simonw 9599 | 2017-11-12T21:32:36Z | 2017-11-12T21:32:36Z | OWNER | I have created a Docker Hub public repository for this: https://hub.docker.com/r/simonwillison/datasette/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ship a Docker image of the whole thing 273127694 |
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