issue_comments
10,495 rows sorted by updated_at descending
This data as json, CSV (advanced)
issue >30
- Show column metadata plus links for foreign keys on arbitrary query results 50
- Redesign default .json format 48
- JavaScript plugin hooks mechanism similar to pluggy 47
- Updated Dockerfile with SpatiaLite version 5.0 45
- Complete refactor of TableView and table.html template 45
- Port Datasette to ASGI 42
- Authentication (and permissions) as a core concept 40
- Deploy a live instance of demos/apache-proxy 34
- await datasette.client.get(path) mechanism for executing internal requests 33
- Maintain an in-memory SQLite table of connected databases and their tables 32
- 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
- Optimize all those calls to index_list and foreign_key_list 27
- Support cross-database joins 26
- Ability for a canned query to write to the database 26
- table.transform() method for advanced alter table 26
- Proof of concept for Datasette on AWS Lambda with EFS 25
- New pattern for views that return either JSON or HTML, available for plugins 25
- WIP: Add Gmail takeout mbox import 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
- Idea: import CSV to memory, run SQL, export in a single command 22
- base_url is omitted in JSON and CSV views 22
- table.extract(...) method and "sqlite-utils extract" command 21
- Database page loads too slowly with many large tables (due to table counts) 21
- …
id | html_url | issue_url | node_id | user | created_at | updated_at ▲ | author_association | body | reactions | issue | performed_via_github_app |
---|---|---|---|---|---|---|---|---|---|---|---|
1029317527 | https://github.com/simonw/sqlite-utils/issues/79#issuecomment-1029317527 | https://api.github.com/repos/simonw/sqlite-utils/issues/79 | IC_kwDOCGYnMM49WiOX | eyeseast 25778 | 2022-02-03T19:18:02Z | 2022-02-03T19:18:02Z | CONTRIBUTOR | Taking part of the conversation from #385 here.
Yes. And also |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Helper methods for working with SpatiaLite 557842245 | |
1029306428 | https://github.com/simonw/sqlite-utils/pull/385#issuecomment-1029306428 | https://api.github.com/repos/simonw/sqlite-utils/issues/385 | IC_kwDOCGYnMM49Wfg8 | eyeseast 25778 | 2022-02-03T19:03:43Z | 2022-02-03T19:03:43Z | CONTRIBUTOR | I thought about adding these as methods on I do sort of like having all the Spatialite stuff in its own module, just because it's built around an extension you might not have or want, but I don't know if that's a good reason to have a different API. You could have |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add new spatialite helper methods 1102899312 | |
1029297971 | https://github.com/simonw/sqlite-utils/pull/385#issuecomment-1029297971 | https://api.github.com/repos/simonw/sqlite-utils/issues/385 | IC_kwDOCGYnMM49Wdcz | simonw 9599 | 2022-02-03T18:52:50Z | 2022-02-03T18:52:50Z | OWNER | I'm not sure I like |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add new spatialite helper methods 1102899312 | |
1029296782 | https://github.com/simonw/sqlite-utils/pull/385#issuecomment-1029296782 | https://api.github.com/repos/simonw/sqlite-utils/issues/385 | IC_kwDOCGYnMM49WdKO | simonw 9599 | 2022-02-03T18:51:21Z | 2022-02-03T18:51:21Z | OWNER | What do you think about adding these as methods on the ```python This is with an optional argument, which if omitted runs find_spatialite() for you:db.init_spatialite() Instead of:init_spatialite(db, find_spatialite())
Instead of this:add_geometry_column(db["locations"], "POINT", "geometry") create_spatial_index(db["locations"], "geometry") Could have this:db["locations"].add_geometry_column("POINT")
db["locations"].create_spatial_index("geometry")
But on the other hand... this is mixing SpatiaLite functionality directly into the core classes. Is that a good idea, seeing as SpatiaLite is both an optional extension (which can be tricky to install) AND something that has a very different release cadence and quality-of-documentation from SQLite itself? There's a third option: the SpatiaLite could exist on subclasses of ```python from sqlite_utils.gis import SpatiaLiteDatabase db = SpatiaLiteDatabase("geo.db") db.init_spatialite() db["locations"].add_geometry_column("POINT") db["locations"].create_spatial_index("geometry") ``` On the one hand, this would keep the SpatiaLite-specific stuff out of the core Database/Table classes. But it feels a bit untidy to me, especially since it raises the spectre of someone who was already subclassing Database for some reason now needing to instead subclass So I don't have a strong opinion formed on this question yet! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add new spatialite helper methods 1102899312 | |
1029285985 | https://github.com/simonw/sqlite-utils/pull/385#issuecomment-1029285985 | https://api.github.com/repos/simonw/sqlite-utils/issues/385 | IC_kwDOCGYnMM49Wahh | simonw 9599 | 2022-02-03T18:37:48Z | 2022-02-03T18:37:48Z | OWNER |
https://sqlite-utils.datasette.io/en/3.22.1/python-api.html#finding-spatialite To avoid needing to bump the major version number to 4 to indicate a backwards incompatible change, we should keep a |
{ "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add new spatialite helper methods 1102899312 | |
1029273853 | https://github.com/simonw/sqlite-utils/pull/385#issuecomment-1029273853 | https://api.github.com/repos/simonw/sqlite-utils/issues/385 | IC_kwDOCGYnMM49WXj9 | simonw 9599 | 2022-02-03T18:23:30Z | 2022-02-03T18:31:21Z | OWNER | OK, this change makes a bunch of sense to me - and also raises some interesting questions about future additions to I see you've already talked about that in #79 - moving this conversation there! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add new spatialite helper methods 1102899312 | |
1029180984 | https://github.com/simonw/sqlite-utils/pull/385#issuecomment-1029180984 | https://api.github.com/repos/simonw/sqlite-utils/issues/385 | IC_kwDOCGYnMM49WA44 | eyeseast 25778 | 2022-02-03T16:42:04Z | 2022-02-03T16:42:04Z | CONTRIBUTOR | Fixed my spelling. That's a useful thing. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add new spatialite helper methods 1102899312 | |
1029177015 | https://github.com/simonw/sqlite-utils/pull/385#issuecomment-1029177015 | https://api.github.com/repos/simonw/sqlite-utils/issues/385 | IC_kwDOCGYnMM49V_63 | simonw 9599 | 2022-02-03T16:38:02Z | 2022-02-03T16:38:02Z | OWNER | Sorry had missed this - tests should run now. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add new spatialite helper methods 1102899312 | |
1029175907 | https://github.com/simonw/sqlite-utils/pull/385#issuecomment-1029175907 | https://api.github.com/repos/simonw/sqlite-utils/issues/385 | IC_kwDOCGYnMM49V_pj | eyeseast 25778 | 2022-02-03T16:36:54Z | 2022-02-03T16:36:54Z | CONTRIBUTOR | @simonw Not sure if you've seen this, but any chance you can run the tests? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add new spatialite helper methods 1102899312 | |
1028535868 | https://github.com/simonw/datasette/issues/1545#issuecomment-1028535868 | https://api.github.com/repos/simonw/datasette/issues/1545 | IC_kwDOBm6k_c49TjY8 | simonw 9599 | 2022-02-03T02:08:30Z | 2022-02-03T02:08:30Z | OWNER | Filed an issue with Jinja suggesting a documentation update: - https://github.com/pallets/jinja/issues/1578 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Custom pages don't work on windows 1075893249 | |
1028419517 | https://github.com/simonw/datasette/pull/1617#issuecomment-1028419517 | https://api.github.com/repos/simonw/datasette/issues/1617 | IC_kwDOBm6k_c49TG-9 | codecov[bot] 22429695 | 2022-02-02T22:30:26Z | 2022-02-03T01:36:07Z | NONE | Codecov Report
```diff @@ Coverage Diff @@ main #1617 +/-==========================================
+ Coverage 92.09% 92.16% +0.06% | Impacted Files | Coverage Δ | |
|---|---|---|
| datasette/app.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 } |
Ensure template_path always uses "/" to match jinja 1120990806 | |
1028519382 | https://github.com/simonw/datasette/pull/1617#issuecomment-1028519382 | https://api.github.com/repos/simonw/datasette/issues/1617 | IC_kwDOBm6k_c49TfXW | simonw 9599 | 2022-02-03T01:31:25Z | 2022-02-03T01:31:25Z | OWNER | I was hoping to get the test suite running on Windows before merging this PR but that looks like it will be a BIG job, see: - #1627 So I'm going to merge this one as-is for the moment. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ensure template_path always uses "/" to match jinja 1120990806 | |
1028517268 | https://github.com/simonw/datasette/issues/1545#issuecomment-1028517268 | https://api.github.com/repos/simonw/datasette/issues/1545 | IC_kwDOBm6k_c49Te2U | simonw 9599 | 2022-02-03T01:26:53Z | 2022-02-03T01:26:53Z | OWNER | I understand the problem now! https://github.com/pallets/jinja/issues/1378#issuecomment-812410922
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Custom pages don't work on windows 1075893249 | |
1028517073 | https://github.com/simonw/datasette/pull/1617#issuecomment-1028517073 | https://api.github.com/repos/simonw/datasette/issues/1617 | IC_kwDOBm6k_c49TezR | simonw 9599 | 2022-02-03T01:26:32Z | 2022-02-03T01:26:32Z | OWNER | Aha I understand the problem now! https://github.com/pallets/jinja/issues/1378#issuecomment-812410922
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ensure template_path always uses "/" to match jinja 1120990806 | |
1028515161 | https://github.com/simonw/datasette/pull/1626#issuecomment-1028515161 | https://api.github.com/repos/simonw/datasette/issues/1626 | IC_kwDOBm6k_c49TeVZ | simonw 9599 | 2022-02-03T01:22:43Z | 2022-02-03T01:22:43Z | OWNER | OK, the tests do NOT pass against Windows! https://github.com/simonw/datasette/runs/5044105941 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Try test suite against macOS and Windows 1122451096 | |
1028461220 | https://github.com/simonw/datasette/issues/1534#issuecomment-1028461220 | https://api.github.com/repos/simonw/datasette/issues/1534 | IC_kwDOBm6k_c49TRKk | simonw 9599 | 2022-02-02T23:39:33Z | 2022-02-02T23:39:33Z | OWNER | I've decided not to do this, because of the risk that Cloudflare could cache the JSON version for an HTML page or vice-versa. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Maybe return JSON from HTML pages if `Accept: application/json` is sent 1065432388 | |
1028423514 | https://github.com/simonw/datasette/pull/1626#issuecomment-1028423514 | https://api.github.com/repos/simonw/datasette/issues/1626 | IC_kwDOBm6k_c49TH9a | codecov[bot] 22429695 | 2022-02-02T22:36:37Z | 2022-02-02T22:39:52Z | NONE | Codecov Report
```diff @@ Coverage Diff @@ main #1626 +/-=======================================
Coverage 92.16% 92.16% 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 } |
Try test suite against macOS and Windows 1122451096 | |
1028420821 | https://github.com/simonw/datasette/pull/1626#issuecomment-1028420821 | https://api.github.com/repos/simonw/datasette/issues/1626 | IC_kwDOBm6k_c49THTV | simonw 9599 | 2022-02-02T22:32:26Z | 2022-02-02T22:33:31Z | OWNER | That broke on a macOS test: https://github.com/simonw/datasette/runs/5044036993?check_suite_focus=true I'm going to remove macOS and Ubuntu and just try Windows purely to see what happens there. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Try test suite against macOS and Windows 1122451096 | |
1028414871 | https://github.com/simonw/datasette/pull/1616#issuecomment-1028414871 | https://api.github.com/repos/simonw/datasette/issues/1616 | IC_kwDOBm6k_c49TF2X | simonw 9599 | 2022-02-02T22:23:45Z | 2022-02-02T22:23:45Z | OWNER | First stable Black release! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Bump black from 21.12b0 to 22.1.0 1119413338 | |
1028397935 | https://github.com/simonw/datasette/issues/1623#issuecomment-1028397935 | https://api.github.com/repos/simonw/datasette/issues/1623 | IC_kwDOBm6k_c49TBtv | simonw 9599 | 2022-02-02T21:59:43Z | 2022-02-02T21:59:43Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/-/patterns returns link: alternate JSON header to 404 1122416919 | ||
1028396866 | https://github.com/simonw/datasette/issues/1624#issuecomment-1028396866 | https://api.github.com/repos/simonw/datasette/issues/1624 | IC_kwDOBm6k_c49TBdC | simonw 9599 | 2022-02-02T21:58:06Z | 2022-02-02T21:58:06Z | OWNER | It looks like this is because Another thing I should address with the refactor project in: - #878 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Index page `/` has no CORS headers 1122427321 | |
1028393259 | https://github.com/simonw/datasette/issues/1620#issuecomment-1028393259 | https://api.github.com/repos/simonw/datasette/issues/1620 | IC_kwDOBm6k_c49TAkr | simonw 9599 | 2022-02-02T21:53:02Z | 2022-02-02T21:53:02Z | OWNER | I ran the following on https://www.google.com/ in the console to demonstrate that these work as intended:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Link: rel="alternate" to JSON for queries too 1121618041 | |
1028389953 | https://github.com/simonw/datasette/issues/1623#issuecomment-1028389953 | https://api.github.com/repos/simonw/datasette/issues/1623 | IC_kwDOBm6k_c49S_xB | simonw 9599 | 2022-02-02T21:48:34Z | 2022-02-02T21:48:34Z | OWNER | A few other pages do that too, including: - https://latest.datasette.io/-/messages - https://latest.datasette.io/-/allow-debug |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
/-/patterns returns link: alternate JSON header to 404 1122416919 | |
1028387529 | https://github.com/simonw/datasette/pull/1622#issuecomment-1028387529 | https://api.github.com/repos/simonw/datasette/issues/1622 | IC_kwDOBm6k_c49S_LJ | codecov[bot] 22429695 | 2022-02-02T21:45:21Z | 2022-02-02T21:45:21Z | NONE | Codecov Report
```diff @@ Coverage Diff @@ main #1622 +/-=======================================
Coverage 92.11% 92.11% 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 } |
Test against Python 3.11-dev 1122414274 | |
1028385067 | https://github.com/simonw/datasette/issues/1620#issuecomment-1028385067 | https://api.github.com/repos/simonw/datasette/issues/1620 | IC_kwDOBm6k_c49S-kr | simonw 9599 | 2022-02-02T21:42:23Z | 2022-02-02T21:42:23Z | OWNER |
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Link: rel="alternate" to JSON for queries too 1121618041 | |
1028374330 | https://github.com/simonw/datasette/issues/1620#issuecomment-1028374330 | https://api.github.com/repos/simonw/datasette/issues/1620 | IC_kwDOBm6k_c49S786 | simonw 9599 | 2022-02-02T21:28:16Z | 2022-02-02T21:28:16Z | OWNER | I just realized I can refactor this to make it much simpler. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Link: rel="alternate" to JSON for queries too 1121618041 | |
1028294089 | https://github.com/simonw/datasette/issues/1618#issuecomment-1028294089 | https://api.github.com/repos/simonw/datasette/issues/1618 | IC_kwDOBm6k_c49SoXJ | strada 770231 | 2022-02-02T19:42:03Z | 2022-02-02T19:42:03Z | NONE | Thanks for looking into this. It might have been nice if ``` sqlite-utils fixtures.db 'explain query plan select * from pragma_function_list(), pragma_database_list(), pragma_module_list()' -t id parent notused detail 4 0 0 SCAN pragma_function_list VIRTUAL TABLE INDEX 0: 8 0 0 SCAN pragma_database_list VIRTUAL TABLE INDEX 0: 12 0 0 SCAN pragma_module_list VIRTUAL TABLE INDEX 0: ``` ``` sqlite-utils fixtures.db 'explain query plan select * from pragma_function_list() as fl, pragma_database_list() as dl, pragma_module_list() as ml' -t id parent notused detail 4 0 0 SCAN fl VIRTUAL TABLE INDEX 0: 8 0 0 SCAN dl VIRTUAL TABLE INDEX 0: 12 0 0 SCAN ml VIRTUAL TABLE INDEX 0: ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Reconsider policy on blocking queries containing the string "pragma" 1121121305 | |
1027672617 | https://github.com/simonw/datasette/issues/1533#issuecomment-1027672617 | https://api.github.com/repos/simonw/datasette/issues/1533 | IC_kwDOBm6k_c49QQop | simonw 9599 | 2022-02-02T07:56:51Z | 2022-02-02T07:56:51Z | OWNER | Demos - these pages both have And you can hit them with % curl -I 'https://latest.datasette.io/fixtures/sortable/a,a' HTTP/1.1 200 OK link: https://latest.datasette.io/fixtures/sortable/a,a.json; rel="alternate"; type="application/json+datasette" cache-control: max-age=5 referrer-policy: no-referrer access-control-allow-origin: * access-control-allow-headers: Authorization access-control-expose-headers: Link content-type: text/html; charset=utf-8 x-databases: _memory, _internal, fixtures, extra_database Date: Wed, 02 Feb 2022 07:56:24 GMT Server: Google Frontend Transfer-Encoding: chunked ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add `Link: rel="alternate"` header pointing to JSON for a table/query 1065431383 | |
1027669851 | https://github.com/simonw/datasette/issues/1533#issuecomment-1027669851 | https://api.github.com/repos/simonw/datasette/issues/1533 | IC_kwDOBm6k_c49QP9b | simonw 9599 | 2022-02-02T07:51:57Z | 2022-02-02T07:51:57Z | OWNER | Documentation: https://docs.datasette.io/en/latest/json_api.html#discovering-the-json-for-a-page https://docs.datasette.io/en/latest/json_api.html top |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add `Link: rel="alternate"` header pointing to JSON for a table/query 1065431383 | |
1027659890 | https://github.com/simonw/datasette/issues/1615#issuecomment-1027659890 | https://api.github.com/repos/simonw/datasette/issues/1615 | IC_kwDOBm6k_c49QNhy | simonw 9599 | 2022-02-02T07:34:17Z | 2022-02-02T07:34:17Z | OWNER | I've been thinking about this a bunch too. If I build anything along these lines it will be as part of the Datasette Cloud hosted service I'm working on, maybe as a free tier. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Potential simplified publishing mechanism 1117132741 | |
1027659018 | https://github.com/simonw/datasette/issues/1618#issuecomment-1027659018 | https://api.github.com/repos/simonw/datasette/issues/1618 | IC_kwDOBm6k_c49QNUK | simonw 9599 | 2022-02-02T07:32:47Z | 2022-02-02T07:32:47Z | OWNER | I was hoping that
``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Reconsider policy on blocking queries containing the string "pragma" 1121121305 | |
1027656518 | https://github.com/simonw/datasette/issues/1618#issuecomment-1027656518 | https://api.github.com/repos/simonw/datasette/issues/1618 | IC_kwDOBm6k_c49QMtG | simonw 9599 | 2022-02-02T07:28:14Z | 2022-02-02T07:31:30Z | OWNER | I also need to consider if supposedly harmless side-effect free pragma functions could be used to work around the Datasette permissions system. My hunch is that wouldn't be a problem, because if you're allowing arbitrary SQL queries you're already letting people ignore the permissions system. One example: ``` sqlite-utils fixtures.db 'pragma database_list' -t seq name file
``` Though it looks like I already allow-listed that one in #761: https://latest.datasette.io/_memory?sql=select+*+from+pragma_database_list%28%29 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Reconsider policy on blocking queries containing the string "pragma" 1121121305 | |
1027656000 | https://github.com/simonw/datasette/issues/1618#issuecomment-1027656000 | https://api.github.com/repos/simonw/datasette/issues/1618 | IC_kwDOBm6k_c49QMlA | simonw 9599 | 2022-02-02T07:27:14Z | 2022-02-02T07:27:14Z | OWNER | I also just realized that
| name | |---------------------------| | analysis_limit | | application_id | | auto_vacuum | | automatic_index | | busy_timeout | | cache_size | | cache_spill | | case_sensitive_like | | cell_size_check | | checkpoint_fullfsync | | collation_list | | compile_options | | count_changes | | data_version | | database_list | | default_cache_size | | defer_foreign_keys | | empty_result_callbacks | | encoding | | foreign_key_check | | foreign_key_list | | foreign_keys | | freelist_count | | full_column_names | | fullfsync | | function_list | | hard_heap_limit | | ignore_check_constraints | | incremental_vacuum | | index_info | | index_list | | index_xinfo | | integrity_check | | journal_mode | | journal_size_limit | | legacy_alter_table | | lock_proxy_file | | locking_mode | | max_page_count | | mmap_size | | module_list | | optimize | | page_count | | page_size | | pragma_list | | query_only | | quick_check | | read_uncommitted | | recursive_triggers | | reverse_unordered_selects | | schema_version | | secure_delete | | short_column_names | | shrink_memory | | soft_heap_limit | | synchronous | | table_info | | table_list | | table_xinfo | | temp_store | | temp_store_directory | | threads | | trusted_schema | | user_version | | wal_autocheckpoint | | wal_checkpoint | | writable_schema | So I could use that list to create a much more specific regular expression, which would then allow the word "pragma" to be used more freely while still protecting against any known pragma function being called. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Reconsider policy on blocking queries containing the string "pragma" 1121121305 | |
1027654979 | https://github.com/simonw/datasette/issues/1618#issuecomment-1027654979 | https://api.github.com/repos/simonw/datasette/issues/1618 | IC_kwDOBm6k_c49QMVD | simonw 9599 | 2022-02-02T07:25:22Z | 2022-02-02T07:25:22Z | OWNER | But... I just noticed something I had missed in the docs for https://www.sqlite.org/pragma.html#pragfunc
So it's possible I'm being overly paranoid here after all: what I want to block here is people running things like So maybe I should allow all pragma functions. I previously allowed an allow-list of them in: - #761 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Reconsider policy on blocking queries containing the string "pragma" 1121121305 | |
1027653005 | https://github.com/simonw/datasette/issues/1618#issuecomment-1027653005 | https://api.github.com/repos/simonw/datasette/issues/1618 | IC_kwDOBm6k_c49QL2N | simonw 9599 | 2022-02-02T07:22:13Z | 2022-02-02T07:22:13Z | OWNER | There's a workaround for this at the moment, which is to use parameterized SQL queries. For example, this: So the SQL query is The reason behind the quite aggressive pragma filtering is that SQLite allows you to execute pragmas using function calls, like this one:
I'm open to relaxing the regex a bit, but I need to be very confident that it's safe to do so. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Reconsider policy on blocking queries containing the string "pragma" 1121121305 | |
1027648180 | https://github.com/simonw/datasette/issues/1586#issuecomment-1027648180 | https://api.github.com/repos/simonw/datasette/issues/1586 | IC_kwDOBm6k_c49QKq0 | simonw 9599 | 2022-02-02T07:13:31Z | 2022-02-02T07:13:31Z | OWNER | Running it as part of But there's no reason for that expectation to exist, and I doubt anyone is relying on that. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
run analyze on all databases as part of start up or publishing 1096536240 | |
1027647257 | https://github.com/simonw/datasette/issues/1619#issuecomment-1027647257 | https://api.github.com/repos/simonw/datasette/issues/1619 | IC_kwDOBm6k_c49QKcZ | simonw 9599 | 2022-02-02T07:11:43Z | 2022-02-02T07:11:43Z | OWNER | Weirdly the bug does NOT exhibit itself on this demo: https://datasette-apache-proxy-demo.datasette.io/prefix/fixtures/no_primary_key/1 - which correctly links to https://datasette-apache-proxy-demo.datasette.io/prefix/fixtures/no_primary_key/1.json |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
JSON link on row page is 404 if base_url setting is used 1121583414 | |
1027646659 | https://github.com/simonw/datasette/issues/1619#issuecomment-1027646659 | https://api.github.com/repos/simonw/datasette/issues/1619 | IC_kwDOBm6k_c49QKTD | simonw 9599 | 2022-02-02T07:10:37Z | 2022-02-02T07:10:37Z | OWNER | It's not just the table with slashes in the name. Same thing on http://127.0.0.1:3344/foo/bar/fixtures/attraction_characteristic/1 - the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
JSON link on row page is 404 if base_url setting is used 1121583414 | |
1027635925 | https://github.com/simonw/datasette/issues/1576#issuecomment-1027635925 | https://api.github.com/repos/simonw/datasette/issues/1576 | IC_kwDOBm6k_c49QHrV | simonw 9599 | 2022-02-02T06:47:20Z | 2022-02-02T06:47:20Z | OWNER | Here's what I was hacking around with when I uncovered this problem: ```diff diff --git a/datasette/views/table.py b/datasette/views/table.py index 77fb285..8c57d08 100644 --- a/datasette/views/table.py +++ b/datasette/views/table.py @@ -1,3 +1,4 @@ +import asyncio import urllib import itertools import json @@ -615,44 +616,37 @@ class TableView(RowTableShared): if request.args.get("_timelimit"): extra_args["custom_time_limit"] = int(request.args.get("_timelimit"))
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Traces should include SQL executed by subtasks created with `asyncio.gather` 1087181951 | |
1027635175 | https://github.com/simonw/datasette/issues/1611#issuecomment-1027635175 | https://api.github.com/repos/simonw/datasette/issues/1611 | IC_kwDOBm6k_c49QHfn | simonw 9599 | 2022-02-02T06:45:47Z | 2022-02-02T06:45:47Z | OWNER | Prototype, not sure that this actually works yet:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Avoid ever running count(*) against SpatiaLite KNN table 1113384383 | |
1027634490 | https://github.com/simonw/datasette/issues/1607#issuecomment-1027634490 | https://api.github.com/repos/simonw/datasette/issues/1607 | IC_kwDOBm6k_c49QHU6 | simonw 9599 | 2022-02-02T06:44:30Z | 2022-02-02T06:44:30Z | OWNER | Prototype:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
More detailed information about installed SpatiaLite version 1109783030 | |
1027633686 | https://github.com/simonw/datasette/issues/1533#issuecomment-1027633686 | https://api.github.com/repos/simonw/datasette/issues/1533 | IC_kwDOBm6k_c49QHIW | simonw 9599 | 2022-02-02T06:42:53Z | 2022-02-02T06:42:53Z | OWNER | I'm going to apply the hack, then fix it again in: - #1518 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add `Link: rel="alternate"` header pointing to JSON for a table/query 1065431383 | |
1025732071 | https://github.com/simonw/datasette/pull/1616#issuecomment-1025732071 | https://api.github.com/repos/simonw/datasette/issues/1616 | IC_kwDOBm6k_c49I23n | codecov[bot] 22429695 | 2022-01-31T13:20:18Z | 2022-01-31T13:20:18Z | NONE | Codecov Report
```diff @@ Coverage Diff @@ main #1616 +/-=======================================
Coverage 92.09% 92.09% 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.12b0 to 22.1.0 1119413338 | |
1024727476 | https://github.com/simonw/sqlite-utils/issues/352#issuecomment-1024727476 | https://api.github.com/repos/simonw/sqlite-utils/issues/352 | IC_kwDOCGYnMM49FBm0 | simonw 9599 | 2022-01-28T23:01:06Z | 2022-01-28T23:01:06Z | OWNER | Manual test run with that prototype:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`sqlite-utils insert --extract colname` 1072792507 | |
1024726879 | https://github.com/simonw/sqlite-utils/issues/352#issuecomment-1024726879 | https://api.github.com/repos/simonw/sqlite-utils/issues/352 | IC_kwDOCGYnMM49FBdf | simonw 9599 | 2022-01-28T22:59:44Z | 2022-01-28T22:59:44Z | OWNER | Rough prototype, seems to work:; ```diff diff --git a/sqlite_utils/cli.py b/sqlite_utils/cli.py index 771d432..431b93e 100644 --- a/sqlite_utils/cli.py +++ b/sqlite_utils/cli.py @@ -867,6 +867,12 @@ def insert_upsert_options(*, require_pk=False): ), load_extension_option, click.option("--silent", is_flag=True, help="Do not show progress bar"), + click.option( + "--extract", + "extracts", + multiple=True, + help="Columns to extract to another table", + ), ) ): fn = decorator(fn) @@ -906,6 +912,7 @@ def insert_upsert_implementation( load_extension=None, silent=False, bulk_sql=None, + extracts=None, ): db = sqlite_utils.Database(path) _load_extensions(db, load_extension) @@ -1008,6 +1015,8 @@ def insert_upsert_implementation( extra_kwargs["defaults"] = dict(default) if upsert: extra_kwargs["upsert"] = upsert + if extracts is not None: + extra_kwargs["extracts"] = extracts
@@ -1117,6 +1126,7 @@ def insert( truncate, not_null, default, + extracts, ): """ Insert records from FILE into a table, creating the table if it @@ -1174,6 +1184,7 @@ def insert( silent=silent, not_null=not_null, default=default, + extracts=extracts, ) except UnicodeDecodeError as ex: raise click.ClickException(UNICODE_ERROR.format(ex)) @@ -1207,6 +1218,7 @@ def upsert( analyze, load_extension, silent, + extracts, ): """ Upsert records based on their primary key. Works like 'insert' but if ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`sqlite-utils insert --extract colname` 1072792507 | |
1023997327 | https://github.com/simonw/datasette/issues/1615#issuecomment-1023997327 | https://api.github.com/repos/simonw/datasette/issues/1615 | IC_kwDOBm6k_c49CPWP | aidansteele 369053 | 2022-01-28T08:37:36Z | 2022-01-28T08:37:36Z | NONE | Oops, it feels like this should perhaps be migrated to GitHub Discussions - sorry! I don't think I have the ability to do that 😅 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Potential simplified publishing mechanism 1117132741 | |
1022466476 | https://github.com/simonw/sqlite-utils/issues/392#issuecomment-1022466476 | https://api.github.com/repos/simonw/sqlite-utils/issues/392 | IC_kwDOCGYnMM488Zms | simonw 9599 | 2022-01-26T18:17:43Z | 2022-01-26T18:17:43Z | OWNER | Manually tested it like this: ``` Create database with an empty "lines" tablesqlite-utils create-table bulk-test.db lines line text Stream records every 0.5s, commit every 5 recordsstream-delay docs/python-api.rst -d 500 | \
sqlite-utils bulk bulk-test.db 'insert into lines (line) values (:line)' - \
--lines --batch-size 5
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`sqlite-utils bulk --batch-size` option 1114640101 | |
1022381732 | https://github.com/simonw/datasette/issues/1613#issuecomment-1022381732 | https://api.github.com/repos/simonw/datasette/issues/1613 | IC_kwDOBm6k_c488E6k | simonw 9599 | 2022-01-26T16:41:45Z | 2022-01-26T16:41:45Z | OWNER | A better interface for modifying the columns used in the SELECT clause would be useful too. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Improvements to help make Datasette a better tool for learning SQL 1114628238 | |
1022255862 | https://github.com/simonw/datasette/issues/1613#issuecomment-1022255862 | https://api.github.com/repos/simonw/datasette/issues/1613 | IC_kwDOBm6k_c487mL2 | simonw 9599 | 2022-01-26T14:35:31Z | 2022-01-26T14:37:44Z | OWNER | Joins are really hard. A mechanism for constructing them in the table view would help a lot: - https://github.com/simonw/datasette/issues/613 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Improvements to help make Datasette a better tool for learning SQL 1114628238 | |
1022254258 | https://github.com/simonw/datasette/issues/1613#issuecomment-1022254258 | https://api.github.com/repos/simonw/datasette/issues/1613 | IC_kwDOBm6k_c487lyy | simonw 9599 | 2022-01-26T14:33:46Z | 2022-01-26T14:37:31Z | OWNER | Tool for setting up foreign key relationships. It could even verify the relationship before you apply it - checking that every value in the column does indeed correspond to a value in the other table. Could also detect and suggest possible ones. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Improvements to help make Datasette a better tool for learning SQL 1114628238 | |
1022257496 | https://github.com/simonw/datasette/issues/1613#issuecomment-1022257496 | https://api.github.com/repos/simonw/datasette/issues/1613 | IC_kwDOBm6k_c487mlY | simonw 9599 | 2022-01-26T14:37:14Z | 2022-01-26T14:37:14Z | OWNER | Better contextual help on the SQL editor - like in Django SQL Dashboard which shows all available tables and columns. Fancy inline autocomplete would be great too, but that's pretty hard for SQL based on past research. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Improvements to help make Datasette a better tool for learning SQL 1114628238 | |
1021877769 | https://github.com/simonw/sqlite-utils/issues/392#issuecomment-1021877769 | https://api.github.com/repos/simonw/sqlite-utils/issues/392 | IC_kwDOCGYnMM486J4J | simonw 9599 | 2022-01-26T05:19:48Z | 2022-01-26T05:19:48Z | OWNER | Can use this utility function: https://github.com/simonw/sqlite-utils/blob/a9fca7efa4184fbb2a65ca1275c326950ed9d3c1/sqlite_utils/utils.py#L322-L325 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`sqlite-utils bulk --batch-size` option 1114640101 | |
1021877058 | https://github.com/simonw/sqlite-utils/issues/392#issuecomment-1021877058 | https://api.github.com/repos/simonw/sqlite-utils/issues/392 | IC_kwDOCGYnMM486JtC | simonw 9599 | 2022-01-26T05:18:12Z | 2022-01-26T05:18:18Z | OWNER | Help for |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`sqlite-utils bulk --batch-size` option 1114640101 | |
1021876914 | https://github.com/simonw/sqlite-utils/issues/392#issuecomment-1021876914 | https://api.github.com/repos/simonw/sqlite-utils/issues/392 | IC_kwDOCGYnMM486Jqy | simonw 9599 | 2022-01-26T05:17:49Z | 2022-01-26T05:17:49Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`sqlite-utils bulk --batch-size` option 1114640101 | ||
1021876463 | https://github.com/simonw/sqlite-utils/issues/391#issuecomment-1021876463 | https://api.github.com/repos/simonw/sqlite-utils/issues/391 | IC_kwDOCGYnMM486Jjv | simonw 9599 | 2022-01-26T05:16:51Z | 2022-01-26T05:16:51Z | OWNER | Actually adding a progress bar may not make sense here: it's designed to work with streaming input from stdin, in which case it's impossible for it to know the overall number of rows to be processed. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`sqlite-utils bulk` progress bar 1114638930 | |
1021876055 | https://github.com/simonw/sqlite-utils/issues/391#issuecomment-1021876055 | https://api.github.com/repos/simonw/sqlite-utils/issues/391 | IC_kwDOCGYnMM486JdX | simonw 9599 | 2022-01-26T05:15:58Z | 2022-01-26T05:15:58Z | OWNER | Could add support for |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`sqlite-utils bulk` progress bar 1114638930 | |
1021860694 | https://github.com/simonw/datasette/issues/1613#issuecomment-1021860694 | https://api.github.com/repos/simonw/datasette/issues/1613 | IC_kwDOBm6k_c486FtW | simonw 9599 | 2022-01-26T04:57:53Z | 2022-01-26T04:57:53Z | OWNER | The existing flow where you can apply filters to a table and then click "View and edit SQL" to see the query is a good starting point. Group by queries are both crucially important and difficult to assemble for beginners. Providing a way to see the query that was used by a facet (since facets are really just group-by-counts) would be very useful, which could come out of this:
|
{ "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Improvements to help make Datasette a better tool for learning SQL 1114628238 | |
1021825322 | https://github.com/simonw/sqlite-utils/issues/390#issuecomment-1021825322 | https://api.github.com/repos/simonw/sqlite-utils/issues/390 | IC_kwDOCGYnMM4859Eq | simonw 9599 | 2022-01-26T03:20:12Z | 2022-01-26T03:20:25Z | OWNER | ``` % sqlite-utils upsert trees.db blah - Usage: sqlite-utils upsert [OPTIONS] PATH TABLE FILE Try 'sqlite-utils upsert -h' for help. Error: Missing option '--pk'. ``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
`sqlite-utils upsert` should require `--pk` more elegantly 1114557284 | |
1021790707 | https://github.com/simonw/sqlite-utils/issues/48#issuecomment-1021790707 | https://api.github.com/repos/simonw/sqlite-utils/issues/48 | IC_kwDOCGYnMM4850nz | simonw 9599 | 2022-01-26T02:08:39Z | 2022-01-26T02:08:39Z | OWNER | This is a dupe of #308. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Jupyter notebook demo of the library, launchable on Binder 471818939 | |
1021790136 | https://github.com/simonw/sqlite-utils/issues/389#issuecomment-1021790136 | https://api.github.com/repos/simonw/sqlite-utils/issues/389 | IC_kwDOCGYnMM4850e4 | simonw 9599 | 2022-01-26T02:07:41Z | 2022-01-26T02:07:41Z | OWNER | That fixed it. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Plausible analytics for documentation 1114544727 | |
1021789016 | https://github.com/simonw/sqlite-utils/issues/389#issuecomment-1021789016 | https://api.github.com/repos/simonw/sqlite-utils/issues/389 | IC_kwDOCGYnMM4850NY | simonw 9599 | 2022-01-26T02:05:41Z | 2022-01-26T02:05:41Z | OWNER | Oops, wrong domain in that - https://plausible.io/sqlite-utils.datasette.io is not yet showing data. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Plausible analytics for documentation 1114544727 | |
1021788260 | https://github.com/simonw/sqlite-utils/issues/388#issuecomment-1021788260 | https://api.github.com/repos/simonw/sqlite-utils/issues/388 | IC_kwDOCGYnMM4850Bk | simonw 9599 | 2022-01-26T02:04:17Z | 2022-01-26T02:04:17Z | OWNER | https://sqlite-utils.datasette.io/en/3.20/ now also shows the version warning banner. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Link to stable docs from older versions 1114543475 | |
1021787822 | https://github.com/simonw/sqlite-utils/issues/388#issuecomment-1021787822 | https://api.github.com/repos/simonw/sqlite-utils/issues/388 | IC_kwDOCGYnMM485z6u | simonw 9599 | 2022-01-26T02:03:25Z | 2022-01-26T02:03:25Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Link to stable docs from older versions 1114543475 | ||
1021785268 | https://github.com/simonw/sqlite-utils/issues/388#issuecomment-1021785268 | https://api.github.com/repos/simonw/sqlite-utils/issues/388 | IC_kwDOCGYnMM485zS0 | simonw 9599 | 2022-01-26T01:58:19Z | 2022-01-26T01:58:19Z | OWNER | While I'm modifying that template I'm also going to add Plausible analytics: ```html <script defer data-domain="sqlite-utils.datasette.io" src="https://plausible.io/js/plausible.js"></script>``` |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Link to stable docs from older versions 1114543475 | |
1021784593 | https://github.com/simonw/sqlite-utils/issues/388#issuecomment-1021784593 | https://api.github.com/repos/simonw/sqlite-utils/issues/388 | IC_kwDOCGYnMM485zIR | simonw 9599 | 2022-01-26T01:56:48Z | 2022-01-26T01:56:48Z | OWNER | On https://readthedocs.org/dashboard/sqlite-utils/advanced/ I checked this box (previously unchecked): |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Link to stable docs from older versions 1114543475 | |
1021773056 | https://github.com/simonw/sqlite-utils/issues/387#issuecomment-1021773056 | https://api.github.com/repos/simonw/sqlite-utils/issues/387 | IC_kwDOCGYnMM485wUA | simonw 9599 | 2022-01-26T01:37:17Z | 2022-01-26T01:37:17Z | OWNER | { "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Python library docs should start with a self contained example 1111293050 | ||
1021497165 | https://github.com/simonw/datasette/issues/1612#issuecomment-1021497165 | https://api.github.com/repos/simonw/datasette/issues/1612 | IC_kwDOBm6k_c484s9N | jsfenfen 639012 | 2022-01-25T18:44:23Z | 2022-01-25T18:44:23Z | CONTRIBUTOR | OMG, this might be the fastest OS ticket I've ever filed, thanks so much @simonw |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Move canned queries closer to the SQL input area 1114147905 | |
1021489826 | https://github.com/simonw/datasette/issues/1612#issuecomment-1021489826 | https://api.github.com/repos/simonw/datasette/issues/1612 | IC_kwDOBm6k_c484rKi | simonw 9599 | 2022-01-25T18:34:21Z | 2022-01-25T18:34:21Z | OWNER | OK, that's live on https://latest.datasette.io/fixtures now - I really like it. Thanks for the suggestion! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Move canned queries closer to the SQL input area 1114147905 | |
1021477220 | https://github.com/simonw/datasette/issues/1612#issuecomment-1021477220 | https://api.github.com/repos/simonw/datasette/issues/1612 | IC_kwDOBm6k_c484oFk | simonw 9599 | 2022-01-25T18:19:31Z | 2022-01-25T18:19:31Z | OWNER | Here's something I like: I also added a "Tables" |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Move canned queries closer to the SQL input area 1114147905 | |
1021472918 | https://github.com/simonw/datasette/issues/1612#issuecomment-1021472918 | https://api.github.com/repos/simonw/datasette/issues/1612 | IC_kwDOBm6k_c484nCW | simonw 9599 | 2022-01-25T18:14:27Z | 2022-01-25T18:15:54Z | OWNER | They're currently shown at the very bottom of the page, under the list of tables and far away from the SQL query box: https://latest.datasette.io/fixtures I'm also questioning if "Queries" is the best header for this. Other options:
Maybe "Queries" is right after all. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Move canned queries closer to the SQL input area 1114147905 | |
1021413700 | https://github.com/simonw/datasette/issues/1612#issuecomment-1021413700 | https://api.github.com/repos/simonw/datasette/issues/1612 | IC_kwDOBm6k_c484YlE | simonw 9599 | 2022-01-25T17:07:29Z | 2022-01-25T17:07:29Z | OWNER | That's a much better place for them, I like this idea. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Move canned queries closer to the SQL input area 1114147905 | |
1021264135 | https://github.com/dogsheep/dogsheep.github.io/pull/6#issuecomment-1021264135 | https://api.github.com/repos/dogsheep/dogsheep.github.io/issues/6 | IC_kwDODMzF1s4830EH | ligurio 1151557 | 2022-01-25T14:52:40Z | 2022-01-25T14:52:40Z | NONE | @simonw, could you review? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Add testres-db tool 842765105 | |
1020456608 | https://github.com/simonw/datasette/issues/1609#issuecomment-1020456608 | https://api.github.com/repos/simonw/datasette/issues/1609 | IC_kwDOBm6k_c480u6g | simonw 9599 | 2022-01-24T19:20:09Z | 2022-01-24T19:20:09Z | OWNER | Uvicorn have a release out now that would have fixed this issue if I hadn't shipped my own fix: https://github.com/encode/uvicorn/releases/tag/0.17.0.post1 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ensure "pip install datasette" still works with Python 3.6 1109884720 | |
1018778667 | https://github.com/simonw/datasette/issues/1605#issuecomment-1018778667 | https://api.github.com/repos/simonw/datasette/issues/1605 | IC_kwDOBm6k_c48uVQr | eyeseast 25778 | 2022-01-21T19:00:01Z | 2022-01-21T19:00:01Z | CONTRIBUTOR | Let me know if you want help prototyping any of this, because I'm thinking about it and trying stuff out. Happy to be a sounding board, if it helps. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Scripted exports 1108671952 | |
1018766727 | https://github.com/simonw/datasette/issues/1605#issuecomment-1018766727 | https://api.github.com/repos/simonw/datasette/issues/1605 | IC_kwDOBm6k_c48uSWH | simonw 9599 | 2022-01-21T18:41:21Z | 2022-01-21T18:42:03Z | OWNER | Yeah I think this all hinges on: - #1101 Also this comment about streaming full JSON arrays (not just newline-delimited) using this trick: - https://github.com/simonw/datasette/issues/1356#issuecomment-1017016553 I'm about ready to figure these out, as with so much it's still a little bit blocked on the refactor stuff from: - #1518 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Scripted exports 1108671952 | |
1018741262 | https://github.com/simonw/datasette/issues/1605#issuecomment-1018741262 | https://api.github.com/repos/simonw/datasette/issues/1605 | IC_kwDOBm6k_c48uMIO | eyeseast 25778 | 2022-01-21T18:05:09Z | 2022-01-21T18:05:09Z | CONTRIBUTOR | Thinking about this more, as well as #1356 and various other tickets related to output formats, I think there's a missing plugin hook for formatting results, separate from Right now, as I understand it, getting output in any format goes through the normal view stack -- a table, a row or a query -- and so by the time It's possible this could be done using Another option is some kind of registry of serializers, which |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Scripted exports 1108671952 | |
1018104868 | https://github.com/simonw/datasette/issues/1609#issuecomment-1018104868 | https://api.github.com/repos/simonw/datasette/issues/1609 | IC_kwDOBm6k_c48rwwk | simonw 9599 | 2022-01-21T02:24:13Z | 2022-01-21T02:24:13Z | OWNER | Just shipped 0.60.1 with the fix - and tested that |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ensure "pip install datasette" still works with Python 3.6 1109884720 | |
1018094767 | https://github.com/simonw/datasette/issues/1609#issuecomment-1018094767 | https://api.github.com/repos/simonw/datasette/issues/1609 | IC_kwDOBm6k_c48ruSv | simonw 9599 | 2022-01-21T02:04:14Z | 2022-01-21T02:04:14Z | OWNER | So I don't need to release 0.60.1 AND 0.60.2 after all - I can just release 0.60.1 with a bug fix that it no longer breaks installation for Python 3.6. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ensure "pip install datasette" still works with Python 3.6 1109884720 | |
1018092984 | https://github.com/simonw/datasette/issues/1609#issuecomment-1018092984 | https://api.github.com/repos/simonw/datasette/issues/1609 | IC_kwDOBm6k_c48rt24 | simonw 9599 | 2022-01-21T02:00:38Z | 2022-01-21T02:00:38Z | OWNER | Out of curiosity, I installed this latest From that, it looks like the Python packages in my dependencies which have released new versions that don't work with Python 3.6 are:
Sure enough, for the first three of those browsing through their recent versions on PyPI confirms that they switched from e.g. "Requires: Python >=3.6" on https://pypi.org/project/janus/0.7.0/ to "Requires: Python >=3.7" on https://pypi.org/project/janus/1.0.0/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ensure "pip install datasette" still works with Python 3.6 1109884720 | |
1018091322 | https://github.com/simonw/datasette/issues/1609#issuecomment-1018091322 | https://api.github.com/repos/simonw/datasette/issues/1609 | IC_kwDOBm6k_c48rtc6 | simonw 9599 | 2022-01-21T01:56:42Z | 2022-01-21T01:56:42Z | OWNER | OK, the environment markers approach seems to work! |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ensure "pip install datasette" still works with Python 3.6 1109884720 | |
1018086697 | https://github.com/simonw/datasette/issues/1609#issuecomment-1018086697 | https://api.github.com/repos/simonw/datasette/issues/1609 | IC_kwDOBm6k_c48rsUp | simonw 9599 | 2022-01-21T01:46:43Z | 2022-01-21T01:46:43Z | OWNER | https://github.com/simonw/datasette/runs/4890775227?check_suite_focus=true - the tests passed on Python 3.6 for this commit with the pinned dependencies: https://github.com/simonw/datasette/commit/41060e7e7cb838328c879de6a98ae794dc1886d0 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ensure "pip install datasette" still works with Python 3.6 1109884720 | |
1018086273 | https://github.com/simonw/datasette/issues/1609#issuecomment-1018086273 | https://api.github.com/repos/simonw/datasette/issues/1609 | IC_kwDOBm6k_c48rsOB | simonw 9599 | 2022-01-21T01:45:46Z | 2022-01-21T01:45:46Z | OWNER | This whole thing reminds me of my ongoing internal debate about version pinning: should the Datasette package released to PyPI pin to the exact versions of the dependencies that are known to work, or should it allow a range of dependencies so users can pick other versions of the dependencies to use in their environment? As I understand it, the general rule is to use exact pinning for applications but use ranges for libraries. Datasette is almost entirely an application... but it can also be used as a library - and in fact I'm hoping to encourage that usage more in the future, see: - #1398 I'd also like to release a packaged version of Datasette that doesn't require Uvicorn, for running on AWS Lambda and other function-as-a-service platforms. Those platforms have their own HTTP layer and hence don't need the Uvicorn dependency. Maybe the answer is to have a |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ensure "pip install datasette" still works with Python 3.6 1109884720 | |
1018082792 | https://github.com/simonw/datasette/issues/1609#issuecomment-1018082792 | https://api.github.com/repos/simonw/datasette/issues/1609 | IC_kwDOBm6k_c48rrXo | simonw 9599 | 2022-01-21T01:37:11Z | 2022-01-21T01:37:11Z | OWNER | Another option from https://twitter.com/samuel_hames/status/1484327636860293121 - environment markers, described in https://www.python.org/dev/peps/pep-0508/#environment-markers Found some examples of those in use using GitHub code search: https://cs.github.com/?scopeName=All+repos&scope=&q=%22%3Bpython_version%22+path%3Asetup.py - in particular https://github.com/xmendez/wfuzz/blob/1b695ee9a87d66a7d7bf6cae70d60a33fae51541/setup.py#L31-L38
Here's my One other problem: there might be packages in that list right now which don't specify their 3.6 Python version but which will, at some point in the future, release a new version that doesn't work with 3.6 (like Uvicorn did) - in which case Python 3.6 installs would break in the future. I think what I'll do then is ship the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ensure "pip install datasette" still works with Python 3.6 1109884720 | |
1018077009 | https://github.com/simonw/datasette/issues/1609#issuecomment-1018077009 | https://api.github.com/repos/simonw/datasette/issues/1609 | IC_kwDOBm6k_c48rp9R | simonw 9599 | 2022-01-21T01:24:15Z | 2022-01-21T01:24:43Z | OWNER | Problem: if I ship this, it will be the most recent release of Datasette - but unlike other previous releases it has exactly pinned versions of all of the dependencies. Which is bad for people who run So maybe I ship this as 0.60.1, then ship a 0.60.2 release directly afterwards which unpins the dependencies again and requires Python 3.7? |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ensure "pip install datasette" still works with Python 3.6 1109884720 | |
1018075357 | https://github.com/simonw/datasette/issues/1609#issuecomment-1018075357 | https://api.github.com/repos/simonw/datasette/issues/1609 | IC_kwDOBm6k_c48rpjd | simonw 9599 | 2022-01-21T01:20:56Z | 2022-01-21T01:20:56Z | OWNER | I used the combo of
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ensure "pip install datasette" still works with Python 3.6 1109884720 | |
1018064620 | https://github.com/simonw/datasette/issues/1609#issuecomment-1018064620 | https://api.github.com/repos/simonw/datasette/issues/1609 | IC_kwDOBm6k_c48rm7s | simonw 9599 | 2022-01-21T01:00:12Z | 2022-01-21T01:00:12Z | OWNER | I think there are two possible solutions then:
I've made the request for 1) in Uvicorn Gitter here: https://gitter.im/encode/community?at=61ea044a6d9ba23328d0fa28 I'm going to investigate option 2) myself now. |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ensure "pip install datasette" still works with Python 3.6 1109884720 | |
1018063681 | https://github.com/simonw/datasette/issues/1609#issuecomment-1018063681 | https://api.github.com/repos/simonw/datasette/issues/1609 | IC_kwDOBm6k_c48rmtB | simonw 9599 | 2022-01-21T00:58:25Z | 2022-01-21T00:58:32Z | OWNER | On Twitter: https://twitter.com/simonw/status/1484317711672877065 Here's the problem: Uvicorn only added |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Ensure "pip install datasette" still works with Python 3.6 1109884720 | |
1018017637 | https://github.com/simonw/datasette/issues/1608#issuecomment-1018017637 | https://api.github.com/repos/simonw/datasette/issues/1608 | IC_kwDOBm6k_c48rbdl | simonw 9599 | 2022-01-20T23:27:59Z | 2022-01-20T23:27:59Z | OWNER | Got a couple of TILs out of this: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation should clarify /stable/ vs /latest/ 1109808154 | |
1017998993 | https://github.com/simonw/datasette/issues/1608#issuecomment-1017998993 | https://api.github.com/repos/simonw/datasette/issues/1608 | IC_kwDOBm6k_c48rW6R | simonw 9599 | 2022-01-20T22:56:00Z | 2022-01-20T22:56:00Z | OWNER |
Correction! That tool DOES support that, as can be seen in their example configuration for their own documentation:
|
{ "total_count": 1, "+1": 1, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation should clarify /stable/ vs /latest/ 1109808154 | |
1017994925 | https://github.com/simonw/datasette/issues/1608#issuecomment-1017994925 | https://api.github.com/repos/simonw/datasette/issues/1608 | IC_kwDOBm6k_c48rV6t | simonw 9599 | 2022-01-20T22:48:43Z | 2022-01-20T22:54:02Z | OWNER | https://sphinx-version-warning.readthedocs.io/ looks like it can show a banner for "You are looking at v0.36 but you should be looking at 0.40" but doesn't hand the case I need here which is "you are looking at /latest/ but you should be looking at /stable/". Just shipped my fix here: https://docs.datasette.io/en/latest/ |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation should clarify /stable/ vs /latest/ 1109808154 | |
1017993482 | https://github.com/simonw/datasette/issues/1608#issuecomment-1017993482 | https://api.github.com/repos/simonw/datasette/issues/1608 | IC_kwDOBm6k_c48rVkK | astrojuanlu 316517 | 2022-01-20T22:46:16Z | 2022-01-20T22:46:16Z | NONE | Or you can use https://sphinx-version-warning.readthedocs.io/! 😄 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation should clarify /stable/ vs /latest/ 1109808154 | |
1017988556 | https://github.com/simonw/datasette/issues/1608#issuecomment-1017988556 | https://api.github.com/repos/simonw/datasette/issues/1608 | IC_kwDOBm6k_c48rUXM | simonw 9599 | 2022-01-20T22:37:51Z | 2022-01-20T22:37:51Z | OWNER | Here's a jQuery recipe that seems to do the right thing:
|
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation should clarify /stable/ vs /latest/ 1109808154 | |
1017975322 | https://github.com/simonw/datasette/issues/1608#issuecomment-1017975322 | https://api.github.com/repos/simonw/datasette/issues/1608 | IC_kwDOBm6k_c48rRIa | simonw 9599 | 2022-01-20T22:17:01Z | 2022-01-20T22:27:07Z | OWNER | Turns out that banner is something that ReadTheDocs implemented - I found it using GitHub code search, it's produced by this piece of JavaScript: https://github.com/readthedocs/readthedocs.org/blob/0852d7c10d725d954d3e9a93513171baa1116d9f/readthedocs/core/static-src/core/js/doc-embed/version-compare.js#L13-L21 ```javascript function init(data) { var rtd = rtddata.get();
} ``` And here's where that module is called from the rest of their code: https://github.com/readthedocs/readthedocs.org/blob/bc3e147770e5740314a8e8c33fec5d111c850498/readthedocs/core/static-src/core/js/doc-embed/footer.js#L66-L86 |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation should clarify /stable/ vs /latest/ 1109808154 | |
1017981599 | https://github.com/simonw/datasette/issues/1608#issuecomment-1017981599 | https://api.github.com/repos/simonw/datasette/issues/1608 | IC_kwDOBm6k_c48rSqf | simonw 9599 | 2022-01-20T22:26:32Z | 2022-01-20T22:26:32Z | OWNER | I'm tempted to imitate their JavaScript but check for |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation should clarify /stable/ vs /latest/ 1109808154 | |
1017971905 | https://github.com/simonw/datasette/issues/1608#issuecomment-1017971905 | https://api.github.com/repos/simonw/datasette/issues/1608 | IC_kwDOBm6k_c48rQTB | simonw 9599 | 2022-01-20T22:11:40Z | 2022-01-20T22:11:40Z | OWNER | Huh, I had forgotten I already have a banner on older versions: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation should clarify /stable/ vs /latest/ 1109808154 | |
1017970132 | https://github.com/simonw/datasette/issues/1608#issuecomment-1017970132 | https://api.github.com/repos/simonw/datasette/issues/1608 | IC_kwDOBm6k_c48rP3U | simonw 9599 | 2022-01-20T22:08:55Z | 2022-01-20T22:08:55Z | OWNER | Might want to consider SEO here too - I want people from search engines to land on |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation should clarify /stable/ vs /latest/ 1109808154 | |
1017969452 | https://github.com/simonw/datasette/issues/1608#issuecomment-1017969452 | https://api.github.com/repos/simonw/datasette/issues/1608 | IC_kwDOBm6k_c48rPss | simonw 9599 | 2022-01-20T22:07:55Z | 2022-01-20T22:07:55Z | OWNER | I think I want a banner at the top of the page making it obvious which version the documentation is talking about. This can be pretty low key for the current stable release, but should be visually more prominent for the |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
Documentation should clarify /stable/ vs /latest/ 1109808154 | |
1017842366 | https://github.com/simonw/datasette/issues/1603#issuecomment-1017842366 | https://api.github.com/repos/simonw/datasette/issues/1603 | IC_kwDOBm6k_c48qwq- | simonw 9599 | 2022-01-20T19:19:54Z | 2022-01-20T19:19:54Z | OWNER | Wrote up a TIL: https://til.simonwillison.net/pixelmator/pixel-editing-favicon |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
A proper favicon 1108235694 | |
1017808898 | https://github.com/simonw/datasette/issues/1603#issuecomment-1017808898 | https://api.github.com/repos/simonw/datasette/issues/1603 | IC_kwDOBm6k_c48qogC | simonw 9599 | 2022-01-20T18:42:35Z | 2022-01-20T18:42:35Z | OWNER | Resized it down to 208 bytes with https://squoosh.app |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
A proper favicon 1108235694 | |
1017806497 | https://github.com/simonw/datasette/issues/1603#issuecomment-1017806497 | https://api.github.com/repos/simonw/datasette/issues/1603 | IC_kwDOBm6k_c48qn6h | simonw 9599 | 2022-01-20T18:39:27Z | 2022-01-20T18:39:57Z | OWNER | Here's a comparison between my hand-edited version and the one I have now: The new 32x32 image: |
{ "total_count": 0, "+1": 0, "-1": 0, "laugh": 0, "hooray": 0, "confused": 0, "heart": 0, "rocket": 0, "eyes": 0 } |
A proper favicon 1108235694 |
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