issue_comments
8,883 rows where user = 9599 sorted by updated_at descending
This data as json, CSV (advanced)
user 1
- simonw · 5,050 ✖
id | html_url | issue_url | node_id | user | created_at | updated_at ▲ | author_association | body | reactions | issue | performed_via_github_app |
---|---|---|---|---|---|---|---|---|---|---|---|
855427396 | https://github.com/simonw/datasette/issues/1362#issuecomment-855427396 | https://api.github.com/repos/simonw/datasette/issues/1362 | MDEyOklzc3VlQ29tbWVudDg1NTQyNzM5Ng== | simonw 9599 | 2021-06-06T16:46:17Z | 2021-06-06T16:46:17Z | OWNER | Mind you, since that plugin hook looks like this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Consider using CSP to protect against future XSS 912864936 | |
855426750 | https://github.com/simonw/datasette/issues/1362#issuecomment-855426750 | https://api.github.com/repos/simonw/datasette/issues/1362 | MDEyOklzc3VlQ29tbWVudDg1NTQyNjc1MA== | simonw 9599 | 2021-06-06T16:41:30Z | 2021-06-06T16:44:49Z | OWNER | This is from the current Which includes this: https://github.com/simonw/datasette/blob/030deb4b25cda842ff7129ab7c18550c44dd8379/datasette/templates/_close_open_menus.html#L1-L16 The |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Consider using CSP to protect against future XSS 912864936 | |
855426516 | https://github.com/simonw/datasette/issues/1362#issuecomment-855426516 | https://api.github.com/repos/simonw/datasette/issues/1362 | MDEyOklzc3VlQ29tbWVudDg1NTQyNjUxNg== | simonw 9599 | 2021-06-06T16:39:34Z | 2021-06-06T16:39:34Z | OWNER | The reason Datasette uses small inline scripts right now is to avoid the overhead of an extra HTTP request for a JavaScript file - but these are both inherently cachable and perform much better under HTTP/2 so that's likely a false optimization. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Consider using CSP to protect against future XSS 912864936 | |
855426314 | https://github.com/simonw/datasette/issues/1362#issuecomment-855426314 | https://api.github.com/repos/simonw/datasette/issues/1362 | MDEyOklzc3VlQ29tbWVudDg1NTQyNjMxNA== | simonw 9599 | 2021-06-06T16:38:04Z | 2021-06-06T16:38:04Z | OWNER | The other option for inline scripts is the CSP nonce:
Then:
Since an attacker can't guess what the nonce will be it prevents them from injecting their own script block - this seems easier to make available to plugins than a full hashing mechanism, just make That template function can then be smart enough to set a flag which Datasette uses to decide if the Presumably this would also require adding |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Consider using CSP to protect against future XSS 912864936 | |
855418899 | https://github.com/simonw/datasette/issues/1362#issuecomment-855418899 | https://api.github.com/repos/simonw/datasette/issues/1362 | MDEyOklzc3VlQ29tbWVudDg1NTQxODg5OQ== | simonw 9599 | 2021-06-06T15:42:55Z | 2021-06-06T15:42:55Z | OWNER | Another consideration: testing that this works correctly could require adoption of a real browser test environment (probably Cypress or maybe Playwright) to execute tests that will fail if CSP is violated. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Consider using CSP to protect against future XSS 912864936 | |
855418698 | https://github.com/simonw/datasette/issues/1362#issuecomment-855418698 | https://api.github.com/repos/simonw/datasette/issues/1362 | MDEyOklzc3VlQ29tbWVudDg1NTQxODY5OA== | simonw 9599 | 2021-06-06T15:41:24Z | 2021-06-06T15:41:24Z | OWNER | I think the best way to answer these questions is with some prototyping - of both Datasette and some of the existing JavaScript plugins. I can start with a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Consider using CSP to protect against future XSS 912864936 | |
855418401 | https://github.com/simonw/datasette/issues/1362#issuecomment-855418401 | https://api.github.com/repos/simonw/datasette/issues/1362 | MDEyOklzc3VlQ29tbWVudDg1NTQxODQwMQ== | simonw 9599 | 2021-06-06T15:39:38Z | 2021-06-06T15:39:38Z | OWNER | The security benefit of forcing all JavaScript plugins to be written as CSP-friendly external scripts is very compelling though. Other plugin-heavy ecosystems such as WordPress have suffered greatly from insecurely written plugins - could this be a huge security win for the Datasette ecosystem generally? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Consider using CSP to protect against future XSS 912864936 | |
855418065 | https://github.com/simonw/datasette/issues/1362#issuecomment-855418065 | https://api.github.com/repos/simonw/datasette/issues/1362 | MDEyOklzc3VlQ29tbWVudDg1NTQxODA2NQ== | simonw 9599 | 2021-06-06T15:37:11Z | 2021-06-06T15:37:11Z | OWNER | The easiest way to apply CSP is to remove all inline It's possible to keep inline script blocks by calculating a hash of their content and adding a This could be achieved with some Django template tricks, but it feels very risky - and done carelessly could end up calculating a hash of a reflected XSS attack! The biggest challenge I see around here involves plugins and custom templates. Adopting CSP would require plugins to avoid using any inline scripts, instead keeping their entire implementations in That's maybe not a bad thing, but it represents a big commitment. It would need to be adopted before Datasette 1.0. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Consider using CSP to protect against future XSS 912864936 | |
855369819 | https://github.com/simonw/datasette/issues/283#issuecomment-855369819 | https://api.github.com/repos/simonw/datasette/issues/283 | MDEyOklzc3VlQ29tbWVudDg1NTM2OTgxOQ== | simonw 9599 | 2021-06-06T09:40:18Z | 2021-06-06T09:40:18Z | OWNER |
That issue is fixed in #1276. |
{ "total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 1, "rocket": 0, "eyes": 0 } |
Support cross-database joins 325958506 | |
855308811 | https://github.com/simonw/datasette/issues/1361#issuecomment-855308811 | https://api.github.com/repos/simonw/datasette/issues/1361 | MDEyOklzc3VlQ29tbWVudDg1NTMwODgxMQ== | simonw 9599 | 2021-06-05T23:16:21Z | 2021-06-05T23:16:21Z | OWNER | That seems to have fixed it. I'd love to get rid of this |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Intermittent CI failure: restore_working_directory FileNotFoundError 912485040 | |
855307292 | https://github.com/simonw/datasette/issues/1361#issuecomment-855307292 | https://api.github.com/repos/simonw/datasette/issues/1361 | MDEyOklzc3VlQ29tbWVudDg1NTMwNzI5Mg== | simonw 9599 | 2021-06-05T22:59:35Z | 2021-06-05T22:59:35Z | OWNER | That broke things. Here's how See also https://github.com/nedbat/coveragepy/issues/881 and https://github.com/pytest-dev/pytest-cov/issues/306 and https://github.com/nedbat/coveragepy/issues/824 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Intermittent CI failure: restore_working_directory FileNotFoundError 912485040 | |
855306497 | https://github.com/simonw/datasette/issues/1361#issuecomment-855306497 | https://api.github.com/repos/simonw/datasette/issues/1361 | MDEyOklzc3VlQ29tbWVudDg1NTMwNjQ5Nw== | simonw 9599 | 2021-06-05T22:51:01Z | 2021-06-05T22:51:01Z | OWNER | I'm going to try removing that |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Intermittent CI failure: restore_working_directory FileNotFoundError 912485040 | |
855306347 | https://github.com/simonw/datasette/issues/1361#issuecomment-855306347 | https://api.github.com/repos/simonw/datasette/issues/1361 | MDEyOklzc3VlQ29tbWVudDg1NTMwNjM0Nw== | simonw 9599 | 2021-06-05T22:49:30Z | 2021-06-05T22:49:30Z | OWNER | Stack Overflow: https://stackoverflow.com/a/49367679/6083
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Intermittent CI failure: restore_working_directory FileNotFoundError 912485040 | |
855303776 | https://github.com/simonw/datasette/issues/1360#issuecomment-855303776 | https://api.github.com/repos/simonw/datasette/issues/1360 | MDEyOklzc3VlQ29tbWVudDg1NTMwMzc3Ng== | simonw 9599 | 2021-06-05T22:23:23Z | 2021-06-05T22:23:23Z | OWNER | Worth noting that I found this issue myself, and to my knowledge it has not been uncovered by anyone else prior to the patch being released. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Security flaw, to be fixed in 0.56.1 and 0.57 912464443 | |
855303649 | https://github.com/simonw/datasette/issues/1360#issuecomment-855303649 | https://api.github.com/repos/simonw/datasette/issues/1360 | MDEyOklzc3VlQ29tbWVudDg1NTMwMzY0OQ== | simonw 9599 | 2021-06-05T22:22:06Z | 2021-06-05T22:22:06Z | OWNER | I've released fixes in both 0.56.1 and 0.57. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Security flaw, to be fixed in 0.56.1 and 0.57 912464443 | |
855302339 | https://github.com/simonw/datasette/issues/1358#issuecomment-855302339 | https://api.github.com/repos/simonw/datasette/issues/1358 | MDEyOklzc3VlQ29tbWVudDg1NTMwMjMzOQ== | simonw 9599 | 2021-06-05T22:08:16Z | 2021-06-05T22:08:16Z | OWNER | Release notes are in, pushing the release now. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release Datasette 0.57 912418094 | |
855302320 | https://github.com/simonw/datasette/issues/1358#issuecomment-855302320 | https://api.github.com/repos/simonw/datasette/issues/1358 | MDEyOklzc3VlQ29tbWVudDg1NTMwMjMyMA== | simonw 9599 | 2021-06-05T22:08:06Z | 2021-06-05T22:08:06Z | OWNER | See #1360 for the security fix. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release Datasette 0.57 912418094 | |
855288228 | https://github.com/simonw/datasette/issues/1358#issuecomment-855288228 | https://api.github.com/repos/simonw/datasette/issues/1358 | MDEyOklzc3VlQ29tbWVudDg1NTI4ODIyOA== | simonw 9599 | 2021-06-05T19:57:18Z | 2021-06-05T19:57:18Z | OWNER | There's also a security fix I need to make, so I'm not going to block this on wrapping up the work on the new Docker image testing from #1344 before putting out this release. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Release Datasette 0.57 912418094 | |
855287200 | https://github.com/simonw/datasette/pull/1291#issuecomment-855287200 | https://api.github.com/repos/simonw/datasette/issues/1291 | MDEyOklzc3VlQ29tbWVudDg1NTI4NzIwMA== | simonw 9599 | 2021-06-05T19:48:36Z | 2021-06-05T19:48:36Z | OWNER | This is great, thank you. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Update docs: explain allow_download setting 849582643 | |
855282466 | https://github.com/simonw/datasette/issues/1356#issuecomment-855282466 | https://api.github.com/repos/simonw/datasette/issues/1356 | MDEyOklzc3VlQ29tbWVudDg1NTI4MjQ2Ng== | simonw 9599 | 2021-06-05T19:05:06Z | 2021-06-05T19:05:06Z | OWNER | Yeah that's a good point. I avoided making them sub-commands because |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: syntactic sugar for using --get with SQL queries, maybe "datasette query" 910092577 | |
855278998 | https://github.com/simonw/datasette/issues/1238#issuecomment-855278998 | https://api.github.com/repos/simonw/datasette/issues/1238 | MDEyOklzc3VlQ29tbWVudDg1NTI3ODk5OA== | simonw 9599 | 2021-06-05T18:37:16Z | 2021-06-05T18:37:16Z | OWNER | Alternative idea: populate |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Custom pages don't work with base_url setting 813899472 | |
855278540 | https://github.com/simonw/datasette/issues/1238#issuecomment-855278540 | https://api.github.com/repos/simonw/datasette/issues/1238 | MDEyOklzc3VlQ29tbWVudDg1NTI3ODU0MA== | simonw 9599 | 2021-06-05T18:33:25Z | 2021-06-05T18:33:25Z | OWNER | Got the test to pass by ensuring the tests don't accidentally double-rewrite the path. Ran into a new problem: ``` @pytest.mark.asyncio @pytest.mark.parametrize( "prefix,expected_path", [(None, "/asgi-scope"), ("/prefix/", "/prefix/asgi-scope")] ) async def test_client_path(datasette, prefix, expected_path): original_base_url = datasette._settings["base_url"] try: if prefix is not None: datasette._settings["base_url"] = prefix response = await datasette.client.get("/asgi-scope") path = response.json()["path"]
The question raised here is: should the ASGI scope stay unmodified when I think it should. It doesn't make sense to obscure the "real" path just to get custom pages to work properly. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Custom pages don't work with base_url setting 813899472 | |
855272693 | https://github.com/simonw/datasette/issues/1238#issuecomment-855272693 | https://api.github.com/repos/simonw/datasette/issues/1238 | MDEyOklzc3VlQ29tbWVudDg1NTI3MjY5Mw== | simonw 9599 | 2021-06-05T17:45:42Z | 2021-06-05T17:45:42Z | OWNER | Applying this fix worked when I manually tested it:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Custom pages don't work with base_url setting 813899472 | |
855270917 | https://github.com/simonw/datasette/issues/1238#issuecomment-855270917 | https://api.github.com/repos/simonw/datasette/issues/1238 | MDEyOklzc3VlQ29tbWVudDg1NTI3MDkxNw== | simonw 9599 | 2021-06-05T17:32:29Z | 2021-06-05T17:32:29Z | OWNER | This looks like the cause: https://github.com/simonw/datasette/blob/6e9b07be92905011211d8df7a872fb7c1f2737b2/datasette/app.py#L1087-L1092 Note how |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Custom pages don't work with base_url setting 813899472 | |
853567861 | https://github.com/simonw/sqlite-utils/issues/264#issuecomment-853567861 | https://api.github.com/repos/simonw/sqlite-utils/issues/264 | MDEyOklzc3VlQ29tbWVudDg1MzU2Nzg2MQ== | simonw 9599 | 2021-06-03T05:12:21Z | 2021-06-03T05:12:21Z | OWNER | I think this is more likely to happen in Datasette than in sqlite-utils - see https://github.com/simonw/datasette/issues/1356 for thoughts on this. |
{ "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Supporting additional output formats, like GeoJSON 907642546 | |
853567413 | https://github.com/simonw/datasette/issues/526#issuecomment-853567413 | https://api.github.com/repos/simonw/datasette/issues/526 | MDEyOklzc3VlQ29tbWVudDg1MzU2NzQxMw== | simonw 9599 | 2021-06-03T05:11:27Z | 2021-06-03T05:11:27Z | OWNER | Another potential way to implement this would be to hold the SQLite connection open and execute the full query there. I've avoided this in the past due to concerns of resource exhaustion - if multiple requests attempt this at the same time all of the connections in the pool will become tied up and the site will be unable to respond to further requests. But... now that Datasette has authentication there's the possibility of making this feature only available to specific authenticated users - the Not to mention people who are running Datasette privately on their own laptop, or the proposed |
{ "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Stream all results for arbitrary SQL and canned queries 459882902 | |
853566337 | https://github.com/simonw/datasette/issues/1356#issuecomment-853566337 | https://api.github.com/repos/simonw/datasette/issues/1356 | MDEyOklzc3VlQ29tbWVudDg1MzU2NjMzNw== | simonw 9599 | 2021-06-03T05:08:32Z | 2021-06-03T05:08:32Z | OWNER | Also relevant: CSV streaming for canned queries in #526 - even better if we could stream ANY SQL query. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: syntactic sugar for using --get with SQL queries, maybe "datasette query" 910092577 | |
853566011 | https://github.com/simonw/datasette/issues/1062#issuecomment-853566011 | https://api.github.com/repos/simonw/datasette/issues/1062 | MDEyOklzc3VlQ29tbWVudDg1MzU2NjAxMQ== | simonw 9599 | 2021-06-03T05:07:42Z | 2021-06-03T05:07:42Z | OWNER | Implementing this would make #1356 a whole lot more interesting. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Refactor .csv to be an output renderer - and teach register_output_renderer to stream all rows 732674148 | |
853565850 | https://github.com/simonw/datasette/issues/1356#issuecomment-853565850 | https://api.github.com/repos/simonw/datasette/issues/1356 | MDEyOklzc3VlQ29tbWVudDg1MzU2NTg1MA== | simonw 9599 | 2021-06-03T05:07:21Z | 2021-06-03T05:07:21Z | OWNER | A problem with this is that if you're using So there's not much point implementing this unless we first make plugins able to add custom streaming formats. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: syntactic sugar for using --get with SQL queries, maybe "datasette query" 910092577 | |
853562891 | https://github.com/simonw/datasette/issues/1356#issuecomment-853562891 | https://api.github.com/repos/simonw/datasette/issues/1356 | MDEyOklzc3VlQ29tbWVudDg1MzU2Mjg5MQ== | simonw 9599 | 2021-06-03T04:59:40Z | 2021-06-03T04:59:40Z | OWNER | It's weird that If I implement this I should build a new "Datasette on the command-line" documentation page to cover both |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: syntactic sugar for using --get with SQL queries, maybe "datasette query" 910092577 | |
853560870 | https://github.com/simonw/datasette/issues/1356#issuecomment-853560870 | https://api.github.com/repos/simonw/datasette/issues/1356 | MDEyOklzc3VlQ29tbWVudDg1MzU2MDg3MA== | simonw 9599 | 2021-06-03T04:53:47Z | 2021-06-03T04:53:56Z | OWNER | This is also interesting when used in conjunction with the proposed |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: syntactic sugar for using --get with SQL queries, maybe "datasette query" 910092577 | |
853560389 | https://github.com/simonw/datasette/issues/1356#issuecomment-853560389 | https://api.github.com/repos/simonw/datasette/issues/1356 | MDEyOklzc3VlQ29tbWVudDg1MzU2MDM4OQ== | simonw 9599 | 2021-06-03T04:52:13Z | 2021-06-03T04:52:13Z | OWNER | I should implement #1355 for more efficient |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: syntactic sugar for using --get with SQL queries, maybe "datasette query" 910092577 | |
853560237 | https://github.com/simonw/datasette/issues/1356#issuecomment-853560237 | https://api.github.com/repos/simonw/datasette/issues/1356 | MDEyOklzc3VlQ29tbWVudDg1MzU2MDIzNw== | simonw 9599 | 2021-06-03T04:51:49Z | 2021-06-03T04:51:49Z | OWNER | This feels like a relatively simple feature to implement that unlocks a whole new set of possible uses for Datasette - as described by @eyeseast in https://github.com/simonw/sqlite-utils/issues/264#issue-907642546. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: syntactic sugar for using --get with SQL queries, maybe "datasette query" 910092577 | |
853559915 | https://github.com/simonw/datasette/issues/1356#issuecomment-853559915 | https://api.github.com/repos/simonw/datasette/issues/1356 | MDEyOklzc3VlQ29tbWVudDg1MzU1OTkxNQ== | simonw 9599 | 2021-06-03T04:50:52Z | 2021-06-03T04:50:52Z | OWNER | What happens if you pass multiple databases? The Key thing here is that output plugins are supported (also plugins that add new SQL functions), making many Datasette plugins usable from the command-line. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Research: syntactic sugar for using --get with SQL queries, maybe "datasette query" 910092577 | |
853558741 | https://github.com/simonw/sqlite-utils/issues/264#issuecomment-853558741 | https://api.github.com/repos/simonw/sqlite-utils/issues/264 | MDEyOklzc3VlQ29tbWVudDg1MzU1ODc0MQ== | simonw 9599 | 2021-06-03T04:47:19Z | 2021-06-03T04:47:19Z | OWNER | This inspired me to re-examine how |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Supporting additional output formats, like GeoJSON 907642546 | |
853557439 | https://github.com/simonw/datasette/issues/1355#issuecomment-853557439 | https://api.github.com/repos/simonw/datasette/issues/1355 | MDEyOklzc3VlQ29tbWVudDg1MzU1NzQzOQ== | simonw 9599 | 2021-06-03T04:43:14Z | 2021-06-03T04:43:14Z | OWNER | It's using Maybe the fix here is to switch the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
datasette --get should efficiently handle streaming CSV 910088936 | |
853553754 | https://github.com/simonw/sqlite-utils/issues/264#issuecomment-853553754 | https://api.github.com/repos/simonw/sqlite-utils/issues/264 | MDEyOklzc3VlQ29tbWVudDg1MzU1Mzc1NA== | simonw 9599 | 2021-06-03T04:32:42Z | 2021-06-03T04:36:36Z | OWNER | This is a really interesting thought. I've so far resisted the temptation to add plugins to There's actually a way for you to do what you're describing using Here's an example using datasette-yaml:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Supporting additional output formats, like GeoJSON 907642546 | |
853554550 | https://github.com/simonw/sqlite-utils/issues/263#issuecomment-853554550 | https://api.github.com/repos/simonw/sqlite-utils/issues/263 | MDEyOklzc3VlQ29tbWVudDg1MzU1NDU1MA== | simonw 9599 | 2021-06-03T04:34:38Z | 2021-06-03T04:34:38Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`sqlite-utils indexes` command 906356331 | ||
853548442 | https://github.com/simonw/sqlite-utils/issues/263#issuecomment-853548442 | https://api.github.com/repos/simonw/sqlite-utils/issues/263 | MDEyOklzc3VlQ29tbWVudDg1MzU0ODQ0Mg== | simonw 9599 | 2021-06-03T04:16:49Z | 2021-06-03T04:16:49Z | OWNER | Needs to show the table each index applies to. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`sqlite-utils indexes` command 906356331 | |
853547681 | https://github.com/simonw/sqlite-utils/issues/263#issuecomment-853547681 | https://api.github.com/repos/simonw/sqlite-utils/issues/263 | MDEyOklzc3VlQ29tbWVudDg1MzU0NzY4MQ== | simonw 9599 | 2021-06-03T04:14:28Z | 2021-06-03T04:14:28Z | OWNER | This looks good:
```
% sqlite-utils indexes /tmp/covid.db -t idx_johns_hopkins_csse_daily_reports_combined_key 0 12 combined_key 0 BINARY 1 idx_johns_hopkins_csse_daily_reports_country_or_region 0 1 country_or_region 0 BINARY 1 idx_johns_hopkins_csse_daily_reports_province_or_state 0 2 province_or_state 0 BINARY 1 idx_johns_hopkins_csse_daily_reports_day 0 0 day 0 BINARY 1 idx_ny_times_us_counties_date 0 0 date 1 BINARY 1 idx_ny_times_us_counties_fips 0 3 fips 0 BINARY 1 idx_ny_times_us_counties_county 0 1 county 0 BINARY 1 idx_ny_times_us_counties_state 0 2 state 0 BINARY 1 % sqlite-utils indexes /tmp/covid.db -t --aux index_name seqno cid name desc coll key idx_johns_hopkins_csse_daily_reports_combined_key 0 12 combined_key 0 BINARY 1 idx_johns_hopkins_csse_daily_reports_combined_key 1 -1 0 BINARY 0 idx_johns_hopkins_csse_daily_reports_country_or_region 0 1 country_or_region 0 BINARY 1 idx_johns_hopkins_csse_daily_reports_country_or_region 1 -1 0 BINARY 0 idx_johns_hopkins_csse_daily_reports_province_or_state 0 2 province_or_state 0 BINARY 1 idx_johns_hopkins_csse_daily_reports_province_or_state 1 -1 0 BINARY 0 idx_johns_hopkins_csse_daily_reports_day 0 0 day 0 BINARY 1 idx_johns_hopkins_csse_daily_reports_day 1 -1 0 BINARY 0 idx_ny_times_us_counties_date 0 0 date 1 BINARY 1 idx_ny_times_us_counties_date 1 -1 0 BINARY 0 idx_ny_times_us_counties_fips 0 3 fips 0 BINARY 1 idx_ny_times_us_counties_fips 1 -1 0 BINARY 0 idx_ny_times_us_counties_county 0 1 county 0 BINARY 1 idx_ny_times_us_counties_county 1 -1 0 BINARY 0 idx_ny_times_us_counties_state 0 2 state 0 BINARY 1 idx_ny_times_us_counties_state 1 -1 0 BINARY 0 ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`sqlite-utils indexes` command 906356331 | |
853546818 | https://github.com/simonw/sqlite-utils/issues/263#issuecomment-853546818 | https://api.github.com/repos/simonw/sqlite-utils/issues/263 | MDEyOklzc3VlQ29tbWVudDg1MzU0NjgxOA== | simonw 9599 | 2021-06-03T04:11:46Z | 2021-06-03T04:11:46Z | OWNER | By default I won't return auxiliary columns, but I'll offer a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`sqlite-utils indexes` command 906356331 | |
853545743 | https://github.com/simonw/sqlite-utils/issues/263#issuecomment-853545743 | https://api.github.com/repos/simonw/sqlite-utils/issues/263 | MDEyOklzc3VlQ29tbWVudDg1MzU0NTc0Mw== | simonw 9599 | 2021-06-03T04:08:04Z | 2021-06-03T04:08:04Z | OWNER | Figuring out the right queries: This query shows all columns across all indexes across all tables:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`sqlite-utils indexes` command 906356331 | |
853544493 | https://github.com/simonw/sqlite-utils/issues/263#issuecomment-853544493 | https://api.github.com/repos/simonw/sqlite-utils/issues/263 | MDEyOklzc3VlQ29tbWVudDg1MzU0NDQ5Mw== | simonw 9599 | 2021-06-03T04:03:59Z | 2021-06-03T04:03:59Z | OWNER | Here's how Running it from a SQL query makes it easy to support modifiers like |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`sqlite-utils indexes` command 906356331 | |
853541869 | https://github.com/simonw/sqlite-utils/issues/261#issuecomment-853541869 | https://api.github.com/repos/simonw/sqlite-utils/issues/261 | MDEyOklzc3VlQ29tbWVudDg1MzU0MTg2OQ== | simonw 9599 | 2021-06-03T03:54:14Z | 2021-06-03T03:54:14Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`table.xindexes` using `PRAGMA index_xinfo(table)` 906345899 | ||
853535559 | https://github.com/simonw/sqlite-utils/issues/261#issuecomment-853535559 | https://api.github.com/repos/simonw/sqlite-utils/issues/261 | MDEyOklzc3VlQ29tbWVudDg1MzUzNTU1OQ== | simonw 9599 | 2021-06-03T03:32:47Z | 2021-06-03T03:32:47Z | OWNER | New design:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`table.xindexes` using `PRAGMA index_xinfo(table)` 906345899 | |
853534732 | https://github.com/simonw/sqlite-utils/issues/261#issuecomment-853534732 | https://api.github.com/repos/simonw/sqlite-utils/issues/261 | MDEyOklzc3VlQ29tbWVudDg1MzUzNDczMg== | simonw 9599 | 2021-06-03T03:30:10Z | 2021-06-03T03:30:10Z | OWNER | I'm going to return |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`table.xindexes` using `PRAGMA index_xinfo(table)` 906345899 | |
853530348 | https://github.com/simonw/sqlite-utils/issues/261#issuecomment-853530348 | https://api.github.com/repos/simonw/sqlite-utils/issues/261 | MDEyOklzc3VlQ29tbWVudDg1MzUzMDM0OA== | simonw 9599 | 2021-06-03T03:16:33Z | 2021-06-03T03:16:33Z | OWNER | In prototyping this out I realize that I actually want to get back the name of each index, then for each of them the detailed list of index columns. Here's the test from my initial prototype:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`table.xindexes` using `PRAGMA index_xinfo(table)` 906345899 | |
853525036 | https://github.com/simonw/sqlite-utils/issues/261#issuecomment-853525036 | https://api.github.com/repos/simonw/sqlite-utils/issues/261 | MDEyOklzc3VlQ29tbWVudDg1MzUyNTAzNg== | simonw 9599 | 2021-06-03T03:02:22Z | 2021-06-03T03:02:22Z | OWNER | This would be a breaking change - and the fact that it returns auxiliary columns isn't particularly useful for most cases - "Auxiliary columns are additional columns needed to locate the table entry that corresponds to each index entry". Instead, I'm going to add a new property |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`table.xindexes` using `PRAGMA index_xinfo(table)` 906345899 | |
852712469 | https://github.com/simonw/datasette/issues/893#issuecomment-852712469 | https://api.github.com/repos/simonw/datasette/issues/893 | MDEyOklzc3VlQ29tbWVudDg1MjcxMjQ2OQ== | simonw 9599 | 2021-06-02T04:29:56Z | 2021-06-02T04:29:56Z | OWNER | I think I fixed this a while ago, though I can't find the commit now. Please re-open if the bug still happens! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
pip3 install datasette not serving static on linuxbrew. 656959584 | |
852712106 | https://github.com/simonw/datasette/issues/1127#issuecomment-852712106 | https://api.github.com/repos/simonw/datasette/issues/1127 | MDEyOklzc3VlQ29tbWVudDg1MjcxMjEwNg== | simonw 9599 | 2021-06-02T04:28:55Z | 2021-06-02T04:28:55Z | OWNER | This became resizable in #1236. |
{ "total_count": 1, "+1": 0, "-1": 0, "laugh": 0, "hooray": 1, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make the custom SQL query text box larger or resizable 756818250 | |
852710117 | https://github.com/simonw/datasette/pull/1306#issuecomment-852710117 | https://api.github.com/repos/simonw/datasette/issues/1306 | MDEyOklzc3VlQ29tbWVudDg1MjcxMDExNw== | simonw 9599 | 2021-06-02T04:24:33Z | 2021-06-02T04:24:33Z | OWNER | I have a test - I'll merge this and then add that test. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Avoid error sorting by relationships if related tables are not allowed 864979486 | |
852708574 | https://github.com/simonw/datasette/pull/1306#issuecomment-852708574 | https://api.github.com/repos/simonw/datasette/issues/1306 | MDEyOklzc3VlQ29tbWVudDg1MjcwODU3NA== | simonw 9599 | 2021-06-02T04:20:18Z | 2021-06-02T04:20:18Z | OWNER | https://github.com/simonw/datasette/blob/115332ce76c0e867d9936406aaf4bcee6b1ef3cb/datasette/views/index.py#L77 helps here - looks like we can pass |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Avoid error sorting by relationships if related tables are not allowed 864979486 | |
852707676 | https://github.com/simonw/datasette/pull/1306#issuecomment-852707676 | https://api.github.com/repos/simonw/datasette/issues/1306 | MDEyOklzc3VlQ29tbWVudDg1MjcwNzY3Ng== | simonw 9599 | 2021-06-02T04:17:41Z | 2021-06-02T04:17:41Z | OWNER | We need to add a test that illustrates the bug in #1305 so we can prove that this definitely fixes it. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Avoid error sorting by relationships if related tables are not allowed 864979486 | |
852706970 | https://github.com/simonw/datasette/issues/619#issuecomment-852706970 | https://api.github.com/repos/simonw/datasette/issues/619 | MDEyOklzc3VlQ29tbWVudDg1MjcwNjk3MA== | simonw 9599 | 2021-06-02T04:15:54Z | 2021-06-02T04:15:54Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"Invalid SQL" page should let you edit the SQL 520655983 | ||
852703357 | https://github.com/simonw/datasette/issues/619#issuecomment-852703357 | https://api.github.com/repos/simonw/datasette/issues/619 | MDEyOklzc3VlQ29tbWVudDg1MjcwMzM1Nw== | simonw 9599 | 2021-06-02T04:08:03Z | 2021-06-02T04:08:03Z | OWNER | A SQL error now looks like this: https://latest.datasette.io/fixtures?sql=select%0D%0A++*%0D%0Afrom%0D%0A++%5Bfoo%5D I'm going to get rid of that "0 results" message if an error is shown. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"Invalid SQL" page should let you edit the SQL 520655983 | |
852686827 | https://github.com/simonw/datasette/issues/1257#issuecomment-852686827 | https://api.github.com/repos/simonw/datasette/issues/1257 | MDEyOklzc3VlQ29tbWVudDg1MjY4NjgyNw== | simonw 9599 | 2021-06-02T03:26:27Z | 2021-06-02T03:26:27Z | OWNER | I tried and failed to get this fix working for tables with double quotes in their name - I couldn't figure out what the double-quote-in-a-table-name version of this code would look like: https://github.com/simonw/datasette/blob/807de378d08752a0f05bb1b980a0a62620a70520/datasette/utils/init.py#L538-L548 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Table names containing single quotes break things 828811618 | |
852681622 | https://github.com/simonw/datasette/issues/1257#issuecomment-852681622 | https://api.github.com/repos/simonw/datasette/issues/1257 | MDEyOklzc3VlQ29tbWVudDg1MjY4MTYyMg== | simonw 9599 | 2021-06-02T03:12:18Z | 2021-06-02T03:12:18Z | OWNER | Created a test database like this: ``` % sqlite-utils create-table quote-in-name.db "this'hasquoteinname" id integer name text --pk id % datasette quote-in-name.db -p 8025 --pdb INFO: Started server process [86046] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://127.0.0.1:8025 (Press CTRL+C to quit)
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Table names containing single quotes break things 828811618 | |
852673695 | https://github.com/simonw/datasette/pull/1352#issuecomment-852673695 | https://api.github.com/repos/simonw/datasette/issues/1352 | MDEyOklzc3VlQ29tbWVudDg1MjY3MzY5NQ== | simonw 9599 | 2021-06-02T02:52:26Z | 2021-06-02T02:52:26Z | OWNER | @dependabot recreate |
{ "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Bump black from 21.5b1 to 21.5b2 908276134 | |
852256784 | https://github.com/simonw/datasette/issues/263#issuecomment-852256784 | https://api.github.com/repos/simonw/datasette/issues/263 | MDEyOklzc3VlQ29tbWVudDg1MjI1Njc4NA== | simonw 9599 | 2021-06-01T16:20:09Z | 2021-06-01T16:20:09Z | OWNER | This is a lot easier to implement now that we have a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Facets should not execute for ?shape=array|object 323671577 | |
852256454 | https://github.com/simonw/datasette/issues/1350#issuecomment-852256454 | https://api.github.com/repos/simonw/datasette/issues/1350 | MDEyOklzc3VlQ29tbWVudDg1MjI1NjQ1NA== | simonw 9599 | 2021-06-01T16:19:38Z | 2021-06-01T16:19:38Z | OWNER | I renamed this to |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_nofacets=1 query string argument for disabling facets and suggested facets 906977719 | |
852255951 | https://github.com/simonw/datasette/issues/1353#issuecomment-852255951 | https://api.github.com/repos/simonw/datasette/issues/1353 | MDEyOklzc3VlQ29tbWVudDg1MjI1NTk1MQ== | simonw 9599 | 2021-06-01T16:18:54Z | 2021-06-01T16:18:54Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_nocount=1 for opting out of table counts 908446997 | ||
852254298 | https://github.com/simonw/datasette/issues/1354#issuecomment-852254298 | https://api.github.com/repos/simonw/datasette/issues/1354 | MDEyOklzc3VlQ29tbWVudDg1MjI1NDI5OA== | simonw 9599 | 2021-06-01T16:16:32Z | 2021-06-01T16:16:32Z | OWNER | Running |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Update help in tests for latest Click 908465747 | |
852238201 | https://github.com/simonw/datasette/issues/1353#issuecomment-852238201 | https://api.github.com/repos/simonw/datasette/issues/1353 | MDEyOklzc3VlQ29tbWVudDg1MjIzODIwMQ== | simonw 9599 | 2021-06-01T15:53:57Z | 2021-06-01T15:53:57Z | OWNER | I'm going to rename |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_nocount=1 for opting out of table counts 908446997 | |
852237347 | https://github.com/simonw/datasette/issues/1349#issuecomment-852237347 | https://api.github.com/repos/simonw/datasette/issues/1349 | MDEyOklzc3VlQ29tbWVudDg1MjIzNzM0Nw== | simonw 9599 | 2021-06-01T15:52:50Z | 2021-06-01T15:52:50Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
CSV ?_stream=on redundantly calculates facets for every page 906385991 | ||
851133471 | https://github.com/simonw/datasette/issues/1351#issuecomment-851133471 | https://api.github.com/repos/simonw/datasette/issues/1351 | MDEyOklzc3VlQ29tbWVudDg1MTEzMzQ3MQ== | simonw 9599 | 2021-05-31T03:02:59Z | 2021-05-31T03:02:59Z | OWNER | Since traces only work with |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get `?_trace=1` working with CSV and streaming CSVs 906993731 | |
851133125 | https://github.com/simonw/datasette/issues/1349#issuecomment-851133125 | https://api.github.com/repos/simonw/datasette/issues/1349 | MDEyOklzc3VlQ29tbWVudDg1MTEzMzEyNQ== | simonw 9599 | 2021-05-31T03:01:48Z | 2021-05-31T03:01:48Z | OWNER | I think it's worth getting |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
CSV ?_stream=on redundantly calculates facets for every page 906385991 | |
851131999 | https://github.com/simonw/datasette/issues/1349#issuecomment-851131999 | https://api.github.com/repos/simonw/datasette/issues/1349 | MDEyOklzc3VlQ29tbWVudDg1MTEzMTk5OQ== | simonw 9599 | 2021-05-31T02:57:25Z | 2021-05-31T02:57:25Z | OWNER | I'm having a really hard time figuring out how to unit test this - ideally I'd monitor which SQL queries are executed using the tracing mechanism, but that's not set up to work with anything other than HTML or JSON outputs: https://github.com/simonw/datasette/blob/c5ae1197a208e1b034c88882e3ac865813a40980/datasette/tracer.py#L125-L134 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
CSV ?_stream=on redundantly calculates facets for every page 906385991 | |
851129464 | https://github.com/simonw/datasette/issues/1349#issuecomment-851129464 | https://api.github.com/repos/simonw/datasette/issues/1349 | MDEyOklzc3VlQ29tbWVudDg1MTEyOTQ2NA== | simonw 9599 | 2021-05-31T02:48:06Z | 2021-05-31T02:48:06Z | OWNER | Actually there is precedent for swapping out |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
CSV ?_stream=on redundantly calculates facets for every page 906385991 | |
851129019 | https://github.com/simonw/datasette/issues/1349#issuecomment-851129019 | https://api.github.com/repos/simonw/datasette/issues/1349 | MDEyOklzc3VlQ29tbWVudDg1MTEyOTAxOQ== | simonw 9599 | 2021-05-31T02:46:38Z | 2021-05-31T02:46:38Z | OWNER | I think the right way to do this is to construct a new |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
CSV ?_stream=on redundantly calculates facets for every page 906385991 | |
851128524 | https://github.com/simonw/datasette/issues/1349#issuecomment-851128524 | https://api.github.com/repos/simonw/datasette/issues/1349 | MDEyOklzc3VlQ29tbWVudDg1MTEyODUyNA== | simonw 9599 | 2021-05-31T02:44:44Z | 2021-05-31T02:44:44Z | OWNER | Now that I have |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
CSV ?_stream=on redundantly calculates facets for every page 906385991 | |
851127314 | https://github.com/simonw/datasette/issues/1345#issuecomment-851127314 | https://api.github.com/repos/simonw/datasette/issues/1345 | MDEyOklzc3VlQ29tbWVudDg1MTEyNzMxNA== | simonw 9599 | 2021-05-31T02:40:26Z | 2021-05-31T02:40:44Z | OWNER | Demo: https://latest.datasette.io/fixtures/facetable?_facet=state&_nocol=state - the state column is not selected but facet by state still works: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_nocol= does not interact well with default facets 904071938 | |
851122934 | https://github.com/simonw/datasette/issues/1350#issuecomment-851122934 | https://api.github.com/repos/simonw/datasette/issues/1350 | MDEyOklzc3VlQ29tbWVudDg1MTEyMjkzNA== | simonw 9599 | 2021-05-31T02:23:47Z | 2021-05-31T02:23:47Z | OWNER | I think I considered So it definitely needs to be a separate named option. Actually, since I have |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_nofacets=1 query string argument for disabling facets and suggested facets 906977719 | |
851120306 | https://github.com/simonw/datasette/issues/1345#issuecomment-851120306 | https://api.github.com/repos/simonw/datasette/issues/1345 | MDEyOklzc3VlQ29tbWVudDg1MTEyMDMwNg== | simonw 9599 | 2021-05-31T02:14:36Z | 2021-05-31T02:14:36Z | OWNER | Yes! This was easier than I thought. I'm going with that solution - where facets are calculated against all columns, ignoring |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_nocol= does not interact well with default facets 904071938 | |
851117233 | https://github.com/simonw/datasette/issues/1345#issuecomment-851117233 | https://api.github.com/repos/simonw/datasette/issues/1345 | MDEyOklzc3VlQ29tbWVudDg1MTExNzIzMw== | simonw 9599 | 2021-05-31T02:04:35Z | 2021-05-31T02:04:35Z | OWNER | That long-term solution may not be too difficult. The facets are calculated against And used here: Crucially, |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_nocol= does not interact well with default facets 904071938 | |
851116105 | https://github.com/simonw/datasette/issues/1345#issuecomment-851116105 | https://api.github.com/repos/simonw/datasette/issues/1345 | MDEyOklzc3VlQ29tbWVudDg1MTExNjEwNQ== | simonw 9599 | 2021-05-31T02:00:44Z | 2021-05-31T02:00:44Z | OWNER | Maybe there's a short-term and longer-term solution for this - where the long-term solution is to use different columns in the faceting selects, while the short-term solution is to disable "Hide this column" for certain things. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_nocol= does not interact well with default facets 904071938 | |
851115805 | https://github.com/simonw/datasette/issues/1345#issuecomment-851115805 | https://api.github.com/repos/simonw/datasette/issues/1345 | MDEyOklzc3VlQ29tbWVudDg1MTExNTgwNQ== | simonw 9599 | 2021-05-31T01:59:39Z | 2021-05-31T01:59:39Z | OWNER | Maybe there's a concept here of the columns that are required by a selected facet? Those can then be included as I can also use them to provide a better error message than "no such column: state" - I can verify that There is one other option here: I could still include the columns that are known to be needed for faceting in the faceting SQL queries, but leave them out of the query that is used to return the results! That's actually a pretty tempting (albeit more complex) option. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_nocol= does not interact well with default facets 904071938 | |
851114806 | https://github.com/simonw/datasette/issues/1345#issuecomment-851114806 | https://api.github.com/repos/simonw/datasette/issues/1345 | MDEyOklzc3VlQ29tbWVudDg1MTExNDgwNg== | simonw 9599 | 2021-05-31T01:55:56Z | 2021-05-31T01:55:56Z | OWNER | Two options here:
I think I like the first option more. I could partially implement that in the Instead the JavaScript should look for evidence in the DOM that specific facets are enabled. This could also help me cover other types of faceting, such as |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_nocol= does not interact well with default facets 904071938 | |
851113886 | https://github.com/simonw/datasette/issues/1345#issuecomment-851113886 | https://api.github.com/repos/simonw/datasette/issues/1345 | MDEyOklzc3VlQ29tbWVudDg1MTExMzg4Ng== | simonw 9599 | 2021-05-31T01:52:27Z | 2021-05-31T01:52:27Z | OWNER | Related issue: visit https://latest.datasette.io/fixtures/facetable?_facet=state and click "Hide this column" on the "state" cog menu and you get https://latest.datasette.io/fixtures/facetable?_facet=state&_nocol=state which shows an error:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
?_nocol= does not interact well with default facets 904071938 | |
850778311 | https://github.com/simonw/datasette/issues/1349#issuecomment-850778311 | https://api.github.com/repos/simonw/datasette/issues/1349 | MDEyOklzc3VlQ29tbWVudDg1MDc3ODMxMQ== | simonw 9599 | 2021-05-29T06:12:21Z | 2021-05-29T06:12:21Z | OWNER | It's not just facets, I think it's trying to execute suggested facets too! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
CSV ?_stream=on redundantly calculates facets for every page 906385991 | |
850778273 | https://github.com/simonw/datasette/issues/1349#issuecomment-850778273 | https://api.github.com/repos/simonw/datasette/issues/1349 | MDEyOklzc3VlQ29tbWVudDg1MDc3ODI3Mw== | simonw 9599 | 2021-05-29T06:11:59Z | 2021-05-29T06:11:59Z | OWNER | Related issue: https://github.com/simonw/datasette/issues/263 - "Facets should not execute for ?shape=array|object" |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
CSV ?_stream=on redundantly calculates facets for every page 906385991 | |
850778230 | https://github.com/simonw/datasette/issues/1349#issuecomment-850778230 | https://api.github.com/repos/simonw/datasette/issues/1349 | MDEyOklzc3VlQ29tbWVudDg1MDc3ODIzMA== | simonw 9599 | 2021-05-29T06:11:28Z | 2021-05-29T06:11:28Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
CSV ?_stream=on redundantly calculates facets for every page 906385991 | ||
850772428 | https://github.com/simonw/sqlite-utils/issues/250#issuecomment-850772428 | https://api.github.com/repos/simonw/sqlite-utils/issues/250 | MDEyOklzc3VlQ29tbWVudDg1MDc3MjQyOA== | simonw 9599 | 2021-05-29T05:16:02Z | 2021-05-29T05:28:57Z | OWNER | I needed to find some CSV files on my computer with a BOM at the beginning - I figured out this recipe:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Handle byte order marks (BOMs) in CSV files 838148087 | |
850771264 | https://github.com/simonw/sqlite-utils/issues/250#issuecomment-850771264 | https://api.github.com/repos/simonw/sqlite-utils/issues/250 | MDEyOklzc3VlQ29tbWVudDg1MDc3MTI2NA== | simonw 9599 | 2021-05-29T05:06:13Z | 2021-05-29T05:06:13Z | OWNER | The other option is to check if the file starts with |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Handle byte order marks (BOMs) in CSV files 838148087 | |
850771017 | https://github.com/simonw/sqlite-utils/issues/250#issuecomment-850771017 | https://api.github.com/repos/simonw/sqlite-utils/issues/250 | MDEyOklzc3VlQ29tbWVudDg1MDc3MTAxNw== | simonw 9599 | 2021-05-29T05:04:28Z | 2021-05-29T05:04:28Z | OWNER | https://stackoverflow.com/a/44573867/6083 says:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Handle byte order marks (BOMs) in CSV files 838148087 | |
850769067 | https://github.com/simonw/sqlite-utils/issues/260#issuecomment-850769067 | https://api.github.com/repos/simonw/sqlite-utils/issues/260 | MDEyOklzc3VlQ29tbWVudDg1MDc2OTA2Nw== | simonw 9599 | 2021-05-29T04:48:10Z | 2021-05-29T04:48:10Z | OWNER | I confirmed and it's possible to have a SQLite column with a hyphen at the start, confirmed using: ``` % sqlite-utils create-table demo.db demo -- id integer name text -blah integer % sqlite-utils tables --schema demo.db -t table schema demo CREATE TABLE [demo] ( [id] INTEGER, [name] TEXT, [-blah] INTEGER ) ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support creating descending order indexes 906330187 | |
850768315 | https://github.com/simonw/sqlite-utils/issues/260#issuecomment-850768315 | https://api.github.com/repos/simonw/sqlite-utils/issues/260 | MDEyOklzc3VlQ29tbWVudDg1MDc2ODMxNQ== | simonw 9599 | 2021-05-29T04:39:33Z | 2021-05-29T04:39:33Z | OWNER | This doesn't work:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support creating descending order indexes 906330187 | |
850767210 | https://github.com/simonw/sqlite-utils/issues/260#issuecomment-850767210 | https://api.github.com/repos/simonw/sqlite-utils/issues/260 | MDEyOklzc3VlQ29tbWVudDg1MDc2NzIxMA== | simonw 9599 | 2021-05-29T04:26:26Z | 2021-05-29T04:28:31Z | OWNER | It's weird having to use |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support creating descending order indexes 906330187 | |
850766552 | https://github.com/simonw/sqlite-utils/issues/260#issuecomment-850766552 | https://api.github.com/repos/simonw/sqlite-utils/issues/260 | MDEyOklzc3VlQ29tbWVudDg1MDc2NjU1Mg== | simonw 9599 | 2021-05-29T04:20:40Z | 2021-05-29T04:24:01Z | OWNER |
Example output: https://covid-19.datasettes.com/covid?sql=select+*+from+pragma_index_xinfo%28%27idx_ny_times_us_counties_date%27%29 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support creating descending order indexes 906330187 | |
850766335 | https://github.com/simonw/sqlite-utils/issues/260#issuecomment-850766335 | https://api.github.com/repos/simonw/sqlite-utils/issues/260 | MDEyOklzc3VlQ29tbWVudDg1MDc2NjMzNQ== | simonw 9599 | 2021-05-29T04:18:19Z | 2021-05-29T04:18:19Z | OWNER | Annoyingly the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support creating descending order indexes 906330187 | |
850765450 | https://github.com/simonw/sqlite-utils/issues/260#issuecomment-850765450 | https://api.github.com/repos/simonw/sqlite-utils/issues/260 | MDEyOklzc3VlQ29tbWVudDg1MDc2NTQ1MA== | simonw 9599 | 2021-05-29T04:09:13Z | 2021-05-29T04:09:13Z | OWNER | Decisions: for the Python API I'm going with For the CLI I'm going to do the "-age" thing. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support creating descending order indexes 906330187 | |
850765291 | https://github.com/simonw/sqlite-utils/issues/260#issuecomment-850765291 | https://api.github.com/repos/simonw/sqlite-utils/issues/260 | MDEyOklzc3VlQ29tbWVudDg1MDc2NTI5MQ== | simonw 9599 | 2021-05-29T04:07:48Z | 2021-05-29T04:08:21Z | OWNER | For the CLI version I could say that you can use a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support creating descending order indexes 906330187 | |
850765050 | https://github.com/simonw/sqlite-utils/issues/260#issuecomment-850765050 | https://api.github.com/repos/simonw/sqlite-utils/issues/260 | MDEyOklzc3VlQ29tbWVudDg1MDc2NTA1MA== | simonw 9599 | 2021-05-29T04:05:24Z | 2021-05-29T04:05:40Z | OWNER | Need to solve this for the CLI tool too. Currently that works like this: https://sqlite-utils.datasette.io/en/stable/cli.html#creating-indexes
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support creating descending order indexes 906330187 | |
850764700 | https://github.com/simonw/sqlite-utils/issues/260#issuecomment-850764700 | https://api.github.com/repos/simonw/sqlite-utils/issues/260 | MDEyOklzc3VlQ29tbWVudDg1MDc2NDcwMA== | simonw 9599 | 2021-05-29T04:02:10Z | 2021-05-29T04:02:10Z | OWNER | I could use |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support creating descending order indexes 906330187 | |
850764655 | https://github.com/simonw/sqlite-utils/issues/260#issuecomment-850764655 | https://api.github.com/repos/simonw/sqlite-utils/issues/260 | MDEyOklzc3VlQ29tbWVudDg1MDc2NDY1NQ== | simonw 9599 | 2021-05-29T04:01:41Z | 2021-05-29T04:01:41Z | OWNER | Maybe:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support creating descending order indexes 906330187 | |
850764594 | https://github.com/simonw/sqlite-utils/issues/260#issuecomment-850764594 | https://api.github.com/repos/simonw/sqlite-utils/issues/260 | MDEyOklzc3VlQ29tbWVudDg1MDc2NDU5NA== | simonw 9599 | 2021-05-29T04:00:54Z | 2021-05-29T04:00:54Z | OWNER | A few options: ```python db["dogs"].create_index([("age", "desc"), "name"]) db["dogs"].create_index([desc("age"), "name"]) db["dogs"].create_index([db.desc("age"), "name"])
I don't like using the term |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support creating descending order indexes 906330187 | |
850764253 | https://github.com/simonw/sqlite-utils/issues/260#issuecomment-850764253 | https://api.github.com/repos/simonw/sqlite-utils/issues/260 | MDEyOklzc3VlQ29tbWVudDg1MDc2NDI1Mw== | simonw 9599 | 2021-05-29T03:57:54Z | 2021-05-29T03:57:54Z | OWNER | The problem here is differentiating between a column with the name This won't work:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Support creating descending order indexes 906330187 | |
850583584 | https://github.com/simonw/datasette/pull/1296#issuecomment-850583584 | https://api.github.com/repos/simonw/datasette/issues/1296 | MDEyOklzc3VlQ29tbWVudDg1MDU4MzU4NA== | simonw 9599 | 2021-05-28T18:06:11Z | 2021-05-28T18:06:11Z | OWNER |
That's a huge surprise to me! And most welcome. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Dockerfile: use Ubuntu 20.10 as base 855446829 | |
850059328 | https://github.com/simonw/datasette/pull/1346#issuecomment-850059328 | https://api.github.com/repos/simonw/datasette/issues/1346 | MDEyOklzc3VlQ29tbWVudDg1MDA1OTMyOA== | simonw 9599 | 2021-05-28T02:08:10Z | 2021-05-28T02:09:25Z | OWNER | This is the current test failure, but it actually another problem that we don't have tests in place for errors with different formats and shapes: ``` def test_magic_parameters_cannot_be_used_in_arbitrary_queries(magic_parameters_client): response = magic_parameters_client.get( "/data.json?sql=select+:_header_host&_shape=array" ) assert 400 == response.status
The test fails because |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Re-display user's query with an error message if an error occurs 904537568 | |
850059607 | https://github.com/simonw/datasette/issues/619#issuecomment-850059607 | https://api.github.com/repos/simonw/datasette/issues/619 | MDEyOklzc3VlQ29tbWVudDg1MDA1OTYwNw== | simonw 9599 | 2021-05-28T02:08:58Z | 2021-05-28T02:08:58Z | OWNER | Remaining work will happen in #1346 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
"Invalid SQL" page should let you edit the SQL 520655983 | |
850058851 | https://github.com/simonw/datasette/pull/1346#issuecomment-850058851 | https://api.github.com/repos/simonw/datasette/issues/1346 | MDEyOklzc3VlQ29tbWVudDg1MDA1ODg1MQ== | simonw 9599 | 2021-05-28T02:06:46Z | 2021-05-28T02:06:46Z | OWNER | The one test failure here actually illustrates a larger problem: if the user specifies Prior to this change we return the following JSON:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Re-display user's query with an error message if an error occurs 904537568 |
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]);
issue >30