issue_comments
10,495 rows sorted by updated_at descending
This data as json, CSV (advanced)
issue >30
- JavaScript plugin hooks mechanism similar to pluggy 47
- Redesign default .json format 46
- Updated Dockerfile with SpatiaLite version 5.0 45
- Port Datasette to ASGI 42
- Authentication (and permissions) as a core concept 40
- await datasette.client.get(path) mechanism for executing internal requests 33
- Maintain an in-memory SQLite table of connected databases and their tables 32
- Ability to sort (and paginate) by column 31
- link_or_copy_directory() error - Invalid cross-device link 28
- Export to CSV 27
- base_url configuration setting 27
- Documentation with recommendations on running Datasette in production without using Docker 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
- Proof of concept for Datasette on AWS Lambda with EFS 25
- Redesign register_output_renderer callback 24
- "datasette insert" command and plugin hook 23
- Datasette Plugins 22
- .json and .csv exports fail to apply base_url 22
- table.extract(...) method and "sqlite-utils extract" command 21
- Handle spatialite geometry columns better 20
- "flash messages" mechanism 20
- Move CI to GitHub Issues 20
- load_template hook doesn't work for include/extends 20
- WIP: Add Gmail takeout mbox import 20
- ?sort=colname~numeric to sort by by column cast to real 19
- Better way of representing binary data in .csv output 19
- Introspect if table is FTS4 or FTS5 19
- Mechanism for storing metadata in _metadata tables 19
- …
id | html_url | issue_url | node_id | user | created_at | updated_at ▲ | author_association | body | reactions | issue | performed_via_github_app |
---|---|---|---|---|---|---|---|---|---|---|---|
861497548 | https://github.com/simonw/datasette/pull/1130#issuecomment-861497548 | https://api.github.com/repos/simonw/datasette/issues/1130 | MDEyOklzc3VlQ29tbWVudDg2MTQ5NzU0OA== | abdusco 3243482 | 2021-06-15T13:27:48Z | 2021-06-15T13:27:48Z | CONTRIBUTOR | There's a workaround: https://css-tricks.com/css-fix-for-100vh-in-mobile-webkit/ and a future fix: https://css-tricks.com/safari-15-new-ui-theme-colors-and-a-css-tricks-cameo/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Fix footer not sticking to bottom in short pages 756876238 | |
861103967 | https://github.com/simonw/sqlite-utils/issues/269#issuecomment-861103967 | https://api.github.com/repos/simonw/sqlite-utils/issues/269 | MDEyOklzc3VlQ29tbWVudDg2MTEwMzk2Nw== | simonw 9599 | 2021-06-15T01:34:10Z | 2021-06-15T01:34:10Z | OWNER | SQLite doesn't have the concept of a boolean column, so there's not much I can do here: https://www.sqlite.org/datatype3.html#boolean_datatype |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
bool type not supported 919250621 | |
861103684 | https://github.com/simonw/sqlite-utils/issues/266#issuecomment-861103684 | https://api.github.com/repos/simonw/sqlite-utils/issues/266 | MDEyOklzc3VlQ29tbWVudDg2MTEwMzY4NA== | simonw 9599 | 2021-06-15T01:33:13Z | 2021-06-15T01:33:13Z | OWNER | Dupe of #37 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add some types, enforce with mypy 913135723 | |
861089794 | https://github.com/simonw/datasette/issues/1377#issuecomment-861089794 | https://api.github.com/repos/simonw/datasette/issues/1377 | MDEyOklzc3VlQ29tbWVudDg2MTA4OTc5NA== | simonw 9599 | 2021-06-15T00:53:29Z | 2021-06-15T00:53:29Z | OWNER | Potential hook names:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Mechanism for plugins to exclude certain paths from CSRF checks 920884085 | |
861087949 | https://github.com/simonw/datasette/issues/1377#issuecomment-861087949 | https://api.github.com/repos/simonw/datasette/issues/1377 | MDEyOklzc3VlQ29tbWVudDg2MTA4Nzk0OQ== | simonw 9599 | 2021-06-15T00:49:19Z | 2021-06-15T00:49:19Z | OWNER | The new Now I need to design a plugin hook that allows plugins to have an opinion on whether a specific |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Mechanism for plugins to exclude certain paths from CSRF checks 920884085 | |
861087651 | https://github.com/dogsheep/github-to-sqlite/issues/64#issuecomment-861087651 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/64 | MDEyOklzc3VlQ29tbWVudDg2MTA4NzY1MQ== | khimaros 231498 | 2021-06-15T00:48:37Z | 2021-06-15T00:48:37Z | NONE | @simonw -- i've created an omega-query that fetched most of what was interesting to me for a single user. found by poking around in the "Explorer" tab in https://docs.github.com/en/graphql/overview/explorer note: pagination is still required via
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
feature: support "events" 920636216 | |
861042050 | https://github.com/dogsheep/github-to-sqlite/issues/64#issuecomment-861042050 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/64 | MDEyOklzc3VlQ29tbWVudDg2MTA0MjA1MA== | simonw 9599 | 2021-06-14T22:45:42Z | 2021-06-14T22:45:42Z | MEMBER | I'm definitely interested in supporting events in this tool - see #14. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
feature: support "events" 920636216 | |
861041597 | https://github.com/dogsheep/github-to-sqlite/issues/64#issuecomment-861041597 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/64 | MDEyOklzc3VlQ29tbWVudDg2MTA0MTU5Nw== | simonw 9599 | 2021-06-14T22:44:54Z | 2021-06-14T22:44:54Z | MEMBER | Have you found a way to access events in GraphQL? I can only see way to access a timeline of events for a single issue or a single pull request. See also https://github.community/t/get-event-equivalent-for-v4/13600/2 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
feature: support "events" 920636216 | |
861035862 | https://github.com/dogsheep/github-to-sqlite/issues/64#issuecomment-861035862 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/64 | MDEyOklzc3VlQ29tbWVudDg2MTAzNTg2Mg== | khimaros 231498 | 2021-06-14T22:29:20Z | 2021-06-14T22:29:20Z | NONE | it looks like the v4 GraphQL API is the only way to get data beyond 90 days from GitHub. this is significant change, but may be worth considering in the future. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
feature: support "events" 920636216 | |
860895838 | https://github.com/dogsheep/github-to-sqlite/issues/64#issuecomment-860895838 | https://api.github.com/repos/dogsheep/github-to-sqlite/issues/64 | MDEyOklzc3VlQ29tbWVudDg2MDg5NTgzOA== | khimaros 231498 | 2021-06-14T18:23:21Z | 2021-06-14T21:37:35Z | NONE | i have a basic working version at https://github.com/khimaros/github-to-sqlite this can be tested with caveat: the GitHub API doesn't seem to provide a complete history of events. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
feature: support "events" 920636216 | |
860548546 | https://github.com/simonw/datasette/issues/1375#issuecomment-860548546 | https://api.github.com/repos/simonw/datasette/issues/1375 | MDEyOklzc3VlQ29tbWVudDg2MDU0ODU0Ng== | frafra 4068 | 2021-06-14T09:41:59Z | 2021-06-14T09:41:59Z | NONE |
Thanks :)
If a developer is not sure if the JSON fields are valid, but then retrieves and parse them, it should handle errors too. Handling inconsistent data is necessary due to the nature of SQLite. A global or dataset option to render the data as they have been defined (JSON, boolean, etc.) when requesting JSON could allow the user to download a regular JSON from the browser without having to rely on APIs. I would guess someone could just make a custom template with an extra JSON-parsed download button otherwise :) |
{ "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
JSON export dumps JSON fields as TEXT 919508498 | |
860230663 | https://github.com/simonw/datasette/issues/1376#issuecomment-860230663 | https://api.github.com/repos/simonw/datasette/issues/1376 | MDEyOklzc3VlQ29tbWVudDg2MDIzMDY2Mw== | simonw 9599 | 2021-06-13T15:39:37Z | 2021-06-13T15:39:37Z | OWNER | Actually it looks like there is a PR open already that addresses this: #1296 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Official Datasette Docker image should use SQLite >= 3.31.0 (for generated columns) 919822817 | |
860230385 | https://github.com/simonw/datasette/issues/1375#issuecomment-860230385 | https://api.github.com/repos/simonw/datasette/issues/1375 | MDEyOklzc3VlQ29tbWVudDg2MDIzMDM4NQ== | simonw 9599 | 2021-06-13T15:37:49Z | 2021-06-13T15:37:49Z | OWNER | There is a feature for this at the moment, but it's a little bit hidden: you can use I considered trying to make this automatic - so it detects columns that appear to contain valid JSON and outputs them as nested objects - but the problem with that is that it can lead to inconsistent results - you might hit the API and find that not every column contains valid JSON (compared to the previous day) resulting in the API retuning string instead of the expected dictionary and breaking your code. |
{ "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
JSON export dumps JSON fields as TEXT 919508498 | |
857684605 | https://github.com/simonw/datasette/pull/1373#issuecomment-857684605 | https://api.github.com/repos/simonw/datasette/issues/1373 | MDEyOklzc3VlQ29tbWVudDg1NzY4NDYwNQ== | codecov[bot] 22429695 | 2021-06-09T13:15:31Z | 2021-06-13T15:34:07Z | NONE | Codecov Report
```diff @@ Coverage Diff @@ main #1373 +/-==========================================
+ Coverage 84.02% 91.68% +7.65% | Impacted Files | Coverage Δ | |
|---|---|---|
| datasette/inspect.py | Continue to review full report at Codecov.
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Update trustme requirement from <0.8,>=0.7 to >=0.7,<0.9 916183914 | |
860229397 | https://github.com/simonw/datasette/issues/1376#issuecomment-860229397 | https://api.github.com/repos/simonw/datasette/issues/1376 | MDEyOklzc3VlQ29tbWVudDg2MDIyOTM5Nw== | simonw 9599 | 2021-06-13T15:31:02Z | 2021-06-13T15:31:02Z | OWNER | Alternative fix would be to update that section of the documentation - if the container upgrade proves tricky I can fall back on that. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Official Datasette Docker image should use SQLite >= 3.31.0 (for generated columns) 919822817 | |
860229226 | https://github.com/simonw/datasette/issues/1376#issuecomment-860229226 | https://api.github.com/repos/simonw/datasette/issues/1376 | MDEyOklzc3VlQ29tbWVudDg2MDIyOTIyNg== | simonw 9599 | 2021-06-13T15:29:45Z | 2021-06-13T15:29:45Z | OWNER | Oh good catch - this is a SQLite version issue. The https://latest.datasette.io/-/versions But... it looks like the packaged Datasette Docker container doesn't have that SQLite version! I should fix that. I'm renaming this issue. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Official Datasette Docker image should use SQLite >= 3.31.0 (for generated columns) 919822817 | |
860142489 | https://github.com/simonw/sqlite-utils/issues/271#issuecomment-860142489 | https://api.github.com/repos/simonw/sqlite-utils/issues/271 | MDEyOklzc3VlQ29tbWVudDg2MDE0MjQ4OQ== | simonw 9599 | 2021-06-13T02:53:06Z | 2021-06-13T02:53:06Z | OWNER | Looks like this is the problem: https://github.com/simonw/sqlite-utils/blob/b0f9d1e494c9891ce407e27b0f5c6deeea361d30/sqlite_utils/db.py#L1724-L1742 Note how |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
table.upsert_all() fails if input has a single column that should be a primary key 919702451 | |
860063190 | https://github.com/dogsheep/twitter-to-sqlite/issues/57#issuecomment-860063190 | https://api.github.com/repos/dogsheep/twitter-to-sqlite/issues/57 | MDEyOklzc3VlQ29tbWVudDg2MDA2MzE5MA== | stiles 232237 | 2021-06-12T14:46:44Z | 2021-06-12T14:46:44Z | NONE | I'm having the same issue (same versions of python and twitter-to-sqlite). It's the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Error: Use either --since or --since_id, not both 907645813 | |
860047794 | https://github.com/simonw/datasette/issues/1286#issuecomment-860047794 | https://api.github.com/repos/simonw/datasette/issues/1286 | MDEyOklzc3VlQ29tbWVudDg2MDA0Nzc5NA== | frafra 4068 | 2021-06-12T12:36:15Z | 2021-06-12T12:36:15Z | NONE | @mroswell That is a very nice solution. I wonder if custom classes, like |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Better default display of arrays of items 849220154 | |
860031217 | https://github.com/simonw/sqlite-utils/issues/269#issuecomment-860031217 | https://api.github.com/repos/simonw/sqlite-utils/issues/269 | MDEyOklzc3VlQ29tbWVudDg2MDAzMTIxNw== | frafra 4068 | 2021-06-12T10:01:53Z | 2021-06-12T10:01:53Z | NONE |
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
bool type not supported 919250621 | |
860031071 | https://github.com/simonw/sqlite-utils/issues/270#issuecomment-860031071 | https://api.github.com/repos/simonw/sqlite-utils/issues/270 | MDEyOklzc3VlQ29tbWVudDg2MDAzMTA3MQ== | frafra 4068 | 2021-06-12T10:00:24Z | 2021-06-12T10:00:24Z | NONE | Sure, I am sorry if my message hasn't been clear enough. I am also a new user :) At the beginning, I just call ``` sqlite-utils transform species.sqlite species --type criteria json Usage: sqlite-utils transform [OPTIONS] PATH TABLE Try 'sqlite-utils transform --help' for help. Error: Invalid value for '--type': 'json' is not one of 'INTEGER', 'TEXT', 'FLOAT', 'BLOB'. ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Cannot set type JSON 919314806 | |
859986489 | https://github.com/simonw/sqlite-utils/issues/270#issuecomment-859986489 | https://api.github.com/repos/simonw/sqlite-utils/issues/270 | MDEyOklzc3VlQ29tbWVudDg1OTk4NjQ4OQ== | simonw 9599 | 2021-06-12T02:47:12Z | 2021-06-12T02:47:12Z | OWNER | Can you expand on what you'd like to change here? The library and CLI tool already allow JSON data to be stored in columns: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Cannot set type JSON 919314806 | |
859940977 | https://github.com/simonw/sqlite-utils/issues/269#issuecomment-859940977 | https://api.github.com/repos/simonw/sqlite-utils/issues/269 | MDEyOklzc3VlQ29tbWVudDg1OTk0MDk3Nw== | frafra 4068 | 2021-06-11T22:33:08Z | 2021-06-11T22:33:08Z | NONE |
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
bool type not supported 919250621 | |
859898736 | https://github.com/simonw/sqlite-utils/issues/268#issuecomment-859898736 | https://api.github.com/repos/simonw/sqlite-utils/issues/268 | MDEyOklzc3VlQ29tbWVudDg1OTg5ODczNg== | simonw 9599 | 2021-06-11T20:37:44Z | 2021-06-11T20:37:44Z | OWNER | From the prototype:
I don't think this matters. I see this tool as more for introspection than for recreating table structures. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
db.schema property and sqlite-utils schema command 919181559 | |
859895540 | https://github.com/simonw/sqlite-utils/issues/268#issuecomment-859895540 | https://api.github.com/repos/simonw/sqlite-utils/issues/268 | MDEyOklzc3VlQ29tbWVudDg1OTg5NTU0MA== | simonw 9599 | 2021-06-11T20:30:34Z | 2021-06-11T20:30:34Z | OWNER | You can currently see the
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
db.schema property and sqlite-utils schema command 919181559 | |
859894105 | https://github.com/simonw/sqlite-utils/issues/268#issuecomment-859894105 | https://api.github.com/repos/simonw/sqlite-utils/issues/268 | MDEyOklzc3VlQ29tbWVudDg1OTg5NDEwNQ== | simonw 9599 | 2021-06-11T20:28:52Z | 2021-06-11T20:28:52Z | OWNER | Out of interest, here are the rows from that table where
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
db.schema property and sqlite-utils schema command 919181559 | |
859888469 | https://github.com/simonw/sqlite-utils/issues/268#issuecomment-859888469 | https://api.github.com/repos/simonw/sqlite-utils/issues/268 | MDEyOklzc3VlQ29tbWVudDg1OTg4ODQ2OQ== | simonw 9599 | 2021-06-11T20:26:20Z | 2021-06-11T20:26:20Z | OWNER |
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
db.schema property and sqlite-utils schema command 919181559 | |
859572791 | https://github.com/simonw/datasette/pull/1374#issuecomment-859572791 | https://api.github.com/repos/simonw/datasette/issues/1374 | MDEyOklzc3VlQ29tbWVudDg1OTU3Mjc5MQ== | codecov[bot] 22429695 | 2021-06-11T13:12:58Z | 2021-06-11T13:12:58Z | NONE | Codecov Report
```diff @@ Coverage Diff @@ main #1374 +/-=======================================
Coverage 91.68% 91.68% Continue to review full report at Codecov.
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Bump black from 21.5b2 to 21.6b0 918730335 | |
858831895 | https://github.com/simonw/datasette/issues/858#issuecomment-858831895 | https://api.github.com/repos/simonw/datasette/issues/858 | MDEyOklzc3VlQ29tbWVudDg1ODgzMTg5NQ== | rachelmarconi 56045588 | 2021-06-10T17:44:09Z | 2021-06-10T17:44:09Z | NONE | any fixes for that recursive issue with temp file? I get it using both heroku and cloudrun, although it seems to still publish and deploy fine |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
publish heroku does not work on Windows 10 642388564 | |
858813675 | https://github.com/simonw/datasette/issues/858#issuecomment-858813675 | https://api.github.com/repos/simonw/datasette/issues/858 | MDEyOklzc3VlQ29tbWVudDg1ODgxMzY3NQ== | rachelmarconi 56045588 | 2021-06-10T17:27:46Z | 2021-06-10T17:27:46Z | NONE | shell=True is added to line 56 (I guess it used to be 54) of heroku.py as detailed in the original issue. (for posterity) |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
publish heroku does not work on Windows 10 642388564 | |
858099514 | https://github.com/simonw/datasette/issues/1371#issuecomment-858099514 | https://api.github.com/repos/simonw/datasette/issues/1371 | MDEyOklzc3VlQ29tbWVudDg1ODA5OTUxNA== | simonw 9599 | 2021-06-09T21:03:49Z | 2021-06-09T21:03:49Z | OWNER | I'll release these as an alpha straight away - it makes sense to have plugin hook changes available for people to test as alpha dependencies ASAP. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Menu plugin hooks should include the request 915455228 | |
857298526 | https://github.com/simonw/datasette/pull/1370#issuecomment-857298526 | https://api.github.com/repos/simonw/datasette/issues/1370 | MDEyOklzc3VlQ29tbWVudDg1NzI5ODUyNg== | eyeseast 25778 | 2021-06-09T01:18:59Z | 2021-06-09T01:18:59Z | CONTRIBUTOR | I'm happy to grab some or all of these in this PR, if you want. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ensure db.path is a string before trying to insert into internal database 914130834 | |
857139881 | https://github.com/simonw/datasette/pull/1370#issuecomment-857139881 | https://api.github.com/repos/simonw/datasette/issues/1370 | MDEyOklzc3VlQ29tbWVudDg1NzEzOTg4MQ== | simonw 9599 | 2021-06-08T20:58:41Z | 2021-06-08T20:58:41Z | OWNER | We can remove a bunch of unnecessary |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ensure db.path is a string before trying to insert into internal database 914130834 | |
856182547 | https://github.com/simonw/datasette/pull/1368#issuecomment-856182547 | https://api.github.com/repos/simonw/datasette/issues/1368 | MDEyOklzc3VlQ29tbWVudDg1NjE4MjU0Nw== | brandonrobertz 2670795 | 2021-06-07T18:59:47Z | 2021-06-07T23:04:25Z | CONTRIBUTOR | Note that if we went with a "update_metadata" hook, the hook signature would look something like this (it would return nothing):
The Datasette function |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
DRAFT: A new plugin hook for dynamic metadata 913865304 | |
856231119 | https://github.com/simonw/sqlite-utils/issues/266#issuecomment-856231119 | https://api.github.com/repos/simonw/sqlite-utils/issues/266 | MDEyOklzc3VlQ29tbWVudDg1NjIzMTExOQ== | simonw 9599 | 2021-06-07T20:26:05Z | 2021-06-07T20:26:05Z | OWNER | In Python 3.6 or higher can do this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add some types, enforce with mypy 913135723 | |
856212136 | https://github.com/simonw/datasette/issues/1365#issuecomment-856212136 | https://api.github.com/repos/simonw/datasette/issues/1365 | MDEyOklzc3VlQ29tbWVudDg1NjIxMjEzNg== | simonw 9599 | 2021-06-07T19:54:04Z | 2021-06-07T19:54:04Z | OWNER | I've hit this one too. I agree, fixing this in Datasette itself is better than fixing it in the tests across multiple other projects. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
pathlib.Path breaks internal schema 913017577 | |
856208637 | https://github.com/simonw/datasette/issues/1369#issuecomment-856208637 | https://api.github.com/repos/simonw/datasette/issues/1369 | MDEyOklzc3VlQ29tbWVudDg1NjIwODYzNw== | simonw 9599 | 2021-06-07T19:47:23Z | 2021-06-07T19:47:23Z | OWNER | No point in showing the IDs twice if the blue label doesn't differ from the gray ID |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Don't show foreign key IDs twice if no label 913900374 | |
856160770 | https://github.com/simonw/datasette/issues/1367#issuecomment-856160770 | https://api.github.com/repos/simonw/datasette/issues/1367 | MDEyOklzc3VlQ29tbWVudDg1NjE2MDc3MA== | simonw 9599 | 2021-06-07T18:22:33Z | 2021-06-07T18:22:33Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Navigation menu display bug 913823889 | ||
856147969 | https://github.com/simonw/datasette/issues/1366#issuecomment-856147969 | https://api.github.com/repos/simonw/datasette/issues/1366 | MDEyOklzc3VlQ29tbWVudDg1NjE0Nzk2OQ== | simonw 9599 | 2021-06-07T18:03:03Z | 2021-06-07T18:03:03Z | OWNER | Here's an example of a test that uses it. It's necessary because sometimes fixtures that create temporary directories break in unexpected ways: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get rid of this `restore_working_directory` hack entirely 913809802 | |
856147450 | https://github.com/simonw/datasette/issues/1366#issuecomment-856147450 | https://api.github.com/repos/simonw/datasette/issues/1366 | MDEyOklzc3VlQ29tbWVudDg1NjE0NzQ1MA== | simonw 9599 | 2021-06-07T18:02:13Z | 2021-06-07T18:02:13Z | OWNER | The hack in question is this fixture, which I've been using in an ad-hoc manner to work around errors while running the tests: https://github.com/simonw/datasette/blob/030deb4b25cda842ff7129ab7c18550c44dd8379/tests/conftest.py#L62-L75 I don't understand the underlying issue well enough to know how to get rid of it. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Get rid of this `restore_working_directory` hack entirely 913809802 | |
855611939 | https://github.com/simonw/sqlite-utils/issues/266#issuecomment-855611939 | https://api.github.com/repos/simonw/sqlite-utils/issues/266 | MDEyOklzc3VlQ29tbWVudDg1NTYxMTkzOQ== | simonw 9599 | 2021-06-07T06:07:41Z | 2021-06-07T06:07:41Z | OWNER | Looks like this is the way to do this:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add some types, enforce with mypy 913135723 | |
855430317 | https://github.com/simonw/datasette/issues/1362#issuecomment-855430317 | https://api.github.com/repos/simonw/datasette/issues/1362 | MDEyOklzc3VlQ29tbWVudDg1NTQzMDMxNw== | simonw 9599 | 2021-06-06T17:07:48Z | 2021-06-06T17:07:48Z | OWNER | I guess I can offer a I like the idea of very actively encouraging CSP across all Datasette projects, but I'm nervous about making the software unusable for certain edge cases. Maybe require CSP and wait for someone to complain? |
{ "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 | |
855429111 | https://github.com/simonw/datasette/issues/1362#issuecomment-855429111 | https://api.github.com/repos/simonw/datasette/issues/1362 | MDEyOklzc3VlQ29tbWVudDg1NTQyOTExMQ== | simonw 9599 | 2021-06-06T16:59:05Z | 2021-06-06T17:00:15Z | OWNER | Twitter conversation: https://twitter.com/simonw/status/1401565566045806594 @dracos provided some really useful code examples there:
|
{ "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 | |
855428601 | https://github.com/simonw/datasette/issues/1362#issuecomment-855428601 | https://api.github.com/repos/simonw/datasette/issues/1362 | MDEyOklzc3VlQ29tbWVudDg1NTQyODYwMQ== | simonw 9599 | 2021-06-06T16:55:33Z | 2021-06-06T16:55:33Z | OWNER |
Hah, of course! Thanks for the correction. So the nonce mechanism would actually be pretty great here, especially for 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 | |
855428296 | https://github.com/simonw/datasette/issues/1362#issuecomment-855428296 | https://api.github.com/repos/simonw/datasette/issues/1362 | MDEyOklzc3VlQ29tbWVudDg1NTQyODI5Ng== | dracos 154364 | 2021-06-06T16:53:20Z | 2021-06-06T16:53:20Z | NONE |
No, because Vary header is about request headers that cause the response to vary, not response headers. |
{ "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 | |
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 | |
812815358 | https://github.com/simonw/datasette/pull/1291#issuecomment-812815358 | https://api.github.com/repos/simonw/datasette/issues/1291 | MDEyOklzc3VlQ29tbWVudDgxMjgxNTM1OA== | codecov[bot] 22429695 | 2021-04-03T05:32:50Z | 2021-06-05T19:48:30Z | NONE | Codecov Report
```diff @@ Coverage Diff @@ main #1291 +/-=======================================
Coverage 91.51% 91.51% Continue to review full report at Codecov.
|
{ "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 | |
855281774 | https://github.com/simonw/datasette/pull/1357#issuecomment-855281774 | https://api.github.com/repos/simonw/datasette/issues/1357 | MDEyOklzc3VlQ29tbWVudDg1NTI4MTc3NA== | codecov[bot] 22429695 | 2021-06-05T18:59:07Z | 2021-06-05T18:59:07Z | NONE | Codecov Report
```diff @@ Coverage Diff @@ main #1357 +/-=======================================
Coverage 91.71% 91.72% | Impacted Files | Coverage Δ | |
|---|---|---|
| datasette/utils/testing.py | Continue to review full report at Codecov.
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Make custom pages compatible with base_url setting 912394511 | |
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 | |
853895159 | https://github.com/simonw/datasette/issues/1356#issuecomment-853895159 | https://api.github.com/repos/simonw/datasette/issues/1356 | MDEyOklzc3VlQ29tbWVudDg1Mzg5NTE1OQ== | eyeseast 25778 | 2021-06-03T14:03:59Z | 2021-06-03T14:03:59Z | CONTRIBUTOR | (Putting thoughts here to keep the conversation in one place.) I think using datasette for this use-case is the right approach. I usually have both datasette and sqlite-utils installed in the same project, and that's where I'm trying out queries, so it probably makes the most sense to have datasette also manage the output (and maybe the input, too). It seems like both ```sh run an arbitrary querydatasette query covid.db "select * from ny_times_us_counties limit 1" --format yaml run a canned querydatasette get covid.db some-canned-query --format yaml ``` |
{ "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 | |
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 |
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