{"id": 208719043, "node_id": "MDExOlB1bGxSZXF1ZXN0MjA4NzE5MDQz", "number": 361, "state": "closed", "locked": 0, "title": " Import pysqlite3 if available, closes #360 ", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2018-08-16T00:52:21Z", "updated_at": "2018-08-16T00:58:57Z", "closed_at": "2018-08-16T00:58:57Z", "merged_at": "2018-08-16T00:58:57Z", "merge_commit_sha": "aae49fef3b75848628d824077ec063834e3e5167", "assignee": null, "milestone": null, "draft": 0, "head": "da41daa168af8f29a1beb5278aed833cf3dc48ce", "base": "e1db8194e8c1d7f361fd0c1c3fc1b91d6aa920e5", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/361", "merged_by": null, "auto_merge": null} {"id": 1154884166, "node_id": "PR_kwDOBm6k_c5E1iJG", "number": 1938, "state": "closed", "locked": 0, "title": "\"permissions\" blocks in metadata.json/yaml", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1636\r\n\r\n- [x] Documentation\r\n- [ ] Implementation\r\n- [ ] Validate metadata to check there are no nonsensical permissions (like `debug-menu` set at the table level)\r\n- [ ] Tests\r\n\r\n\r\n----\r\n:books: Documentation preview :books:: https://datasette--1938.org.readthedocs.build/en/1938/\r\n\r\n", "created_at": "2022-12-08T22:07:36Z", "updated_at": "2022-12-13T05:23:19Z", "closed_at": "2022-12-13T05:23:18Z", "merged_at": null, "merge_commit_sha": "271ea3ae0c858de2d392b61a1a4a9f5837cbddf8", "assignee": null, "milestone": {"value": 8711695, "label": " Datasette 1.0a2"}, "draft": 0, "head": "6e35a6b4f7ea9ba3fb6f02f45452eeb41de69786", "base": "e539c1c024bc62d88df91d9107cbe37e7f0fe55f", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1938", "merged_by": null, "auto_merge": null} {"id": 466410755, "node_id": "MDExOlB1bGxSZXF1ZXN0NDY2NDEwNzU1", "number": 927, "state": "closed", "locked": 0, "title": "'datasette --get' option, refs #926", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #926, #898", "created_at": "2020-08-11T23:31:52Z", "updated_at": "2020-08-12T00:24:42Z", "closed_at": "2020-08-12T00:24:41Z", "merged_at": "2020-08-12T00:24:41Z", "merge_commit_sha": "e139a7619f63d45ca2ff1ee108b933e17b5675b3", "assignee": null, "milestone": null, "draft": 0, "head": "2111da01a03cfc62303b6a4b59ea9f96d22c0f78", "base": "83eda049af3f38d4289118d3576f96b2535084b1", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/927", "merged_by": null, "auto_merge": null} {"id": 575940193, "node_id": "MDExOlB1bGxSZXF1ZXN0NTc1OTQwMTkz", "number": 1232, "state": "closed", "locked": 0, "title": "--crossdb option for joining across databases", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #283. Still needs:\r\n\r\n- [x] Unit test for --crossdb queries\r\n- [x] Show warning on console if it truncates at ten databases (or on web interface)\r\n- [x] Show connected databases on the `/_memory` database page\r\n- [x] Documentation\r\n- [x] https://latest.datasette.io/ demo should demonstrate this feature", "created_at": "2021-02-18T19:48:50Z", "updated_at": "2021-02-18T22:09:13Z", "closed_at": "2021-02-18T22:09:12Z", "merged_at": "2021-02-18T22:09:12Z", "merge_commit_sha": "6f41c8a2bef309a66588b2875c3e24d26adb4850", "assignee": null, "milestone": null, "draft": 0, "head": "887649942b02d70a0fe4e205e1e5eff4e745b016", "base": "4df548e7668b5b21d64a267964951e67894f4712", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1232", "merged_by": null, "auto_merge": null} {"id": 375180832, "node_id": "MDExOlB1bGxSZXF1ZXN0Mzc1MTgwODMy", "number": 672, "state": "open", "locked": 0, "title": "--dirs option for scanning directories for SQLite databases", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #417.", "created_at": "2020-02-14T02:25:52Z", "updated_at": "2020-03-27T01:03:53Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "0e0e544f1f23451f04d7ca576ace5b18ce168e6f", "assignee": null, "milestone": null, "draft": 0, "head": "ee718b98b793df2a15b125cbf20816c9864bf7e9", "base": "6aa516d82dea9885cb4db8d56ec2ccfd4cd9b840", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/672", "merged_by": null, "auto_merge": null} {"id": 815164865, "node_id": "PR_kwDOCGYnMM4wlm3B", "number": 361, "state": "closed", "locked": 0, "title": "--lines and --text and --convert and --import", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #356\r\n\r\nStill TODO:\r\n\r\n- [x] Get `--lines` working, with tests\r\n- [x] Get `--text` working, with tests\r\n- [x] Get regular JSON import working with `--convert` with tests\r\n- [x] Get `--lines` working with `--convert` with tests\r\n- [x] Get `--text` working with `--convert` with tests\r\n- [x] Get `--csv` and `--tsv` import working with `--convert` with tests\r\n- [x] Get `--nl` working with `--convert` with tests\r\n- [x] Documentation for all of the above", "created_at": "2022-01-06T01:49:44Z", "updated_at": "2022-01-06T06:37:03Z", "closed_at": "2022-01-06T06:24:54Z", "merged_at": "2022-01-06T06:24:54Z", "merge_commit_sha": "413f8ed754e38d7b190de888c85fe8438336cb11", "assignee": null, "milestone": null, "draft": 0, "head": "b7f0b88d49032a053f0de2dbba356ee1f3b949c0", "base": "f3fd8613113d21d44238a6ec54b375f5aa72c4e0", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/361", "merged_by": null, "auto_merge": null} {"id": 397749653, "node_id": "MDExOlB1bGxSZXF1ZXN0Mzk3NzQ5NjUz", "number": 714, "state": "closed", "locked": 0, "title": "--metadata accepts YAML as well as JSON", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #713. Still needs tests and documentation.", "created_at": "2020-04-02T18:36:02Z", "updated_at": "2020-04-02T19:30:54Z", "closed_at": "2020-04-02T19:30:54Z", "merged_at": "2020-04-02T19:30:54Z", "merge_commit_sha": "6717c719dd36dc2adc0f9da38a8c8e08129e96b4", "assignee": null, "milestone": null, "draft": 0, "head": "5170c31adc44f6ef14b21782ba6f8ecb46dd9450", "base": "2aaad72789c427875426673c1a43e67c86fc970e", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/714", "merged_by": null, "auto_merge": null} {"id": 295065796, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjk1MDY1Nzk2", "number": 544, "state": "closed", "locked": 0, "title": "--plugin-secret option", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #543\r\n\r\n- [x] Zeit Now v1 support\r\n- [x] Solve escaping of ENV in Dockerfile\r\n- [x] Heroku support\r\n- [x] Unit tests\r\n- [x] Cloud Run support\r\n- [x] Documentation\r\n", "created_at": "2019-07-06T22:18:20Z", "updated_at": "2019-07-08T02:06:31Z", "closed_at": "2019-07-08T02:06:31Z", "merged_at": "2019-07-08T02:06:31Z", "merge_commit_sha": "973f8f139df6ad425354711052cfc2256de2e522", "assignee": null, "milestone": {"value": 4471010, "label": "Datasette 0.29"}, "draft": 0, "head": "ccf80604e931fba1893b5bab11de386fed82009e", "base": "fcfcae21e67cc15090942b1d2a47b5f016279337", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/544", "merged_by": null, "auto_merge": null} {"id": 572209243, "node_id": "MDExOlB1bGxSZXF1ZXN0NTcyMjA5MjQz", "number": 1222, "state": "closed", "locked": 0, "title": "--ssl-keyfile and --ssl-certfile, refs #1221", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2021-02-12T00:45:58Z", "updated_at": "2021-02-12T00:52:18Z", "closed_at": "2021-02-12T00:52:17Z", "merged_at": "2021-02-12T00:52:17Z", "merge_commit_sha": "eda652cf6ee28a0babfb30ce3834512e9e33fb8e", "assignee": null, "milestone": null, "draft": 0, "head": "8ec72ea3e3e0a9876d5e61e4a2260224f16db2e3", "base": "aa1fe0692c2abb901216738bfb35f9fcc5090e7d", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1222", "merged_by": null, "auto_merge": null} {"id": 368734500, "node_id": "MDExOlB1bGxSZXF1ZXN0MzY4NzM0NTAw", "number": 663, "state": "closed", "locked": 0, "title": "-p argument for datasette package, plus tests - refs #661", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2020-01-29T19:47:49Z", "updated_at": "2020-01-29T22:46:43Z", "closed_at": "2020-01-29T22:46:43Z", "merged_at": "2020-01-29T22:46:43Z", "merge_commit_sha": "67fc9c5720ed1fcd62b116481f70d4e80b403a22", "assignee": null, "milestone": null, "draft": 0, "head": "8adfc9db7f15e36fed677be4a9c833ff2cdec0bc", "base": "34d77d780f68b778fd9d6ebbaf69f250436f055f", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/663", "merged_by": null, "auto_merge": null} {"id": 1492599485, "node_id": "PR_kwDOBm6k_c5Y90K9", "number": 2161, "state": "closed", "locked": 0, "title": "-s/--setting x y gets merged into datasette.yml, refs #2143, #2156", "user": {"value": 9599, "label": "simonw"}, "body": "This change updates the `-s/--setting` option to `datasette serve` to allow it to be used to set arbitrarily complex nested settings in a way that is compatible with the new `-c datasette.yml` work happening in:\r\n- #2143\r\n\r\nIt will enable things like this:\r\n```\r\ndatasette data.db --setting plugins.datasette-ripgrep.path \"/home/simon/code\"\r\n```\r\nFor the moment though it just affects [settings](https://docs.datasette.io/en/1.0a4/settings.html) - so you can do this:\r\n```\r\ndatasette data.db --setting settings.sql_time_limit_ms 3500\r\n```\r\nI've also implemented a backwards compatibility mechanism, so if you use it this way (the old way):\r\n```\r\ndatasette data.db --setting sql_time_limit_ms 3500\r\n```\r\nIt will notice that the setting you passed is one of Datasette's core settings, and will treat that as if you said `settings.sql_time_limit_ms` instead.\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--2161.org.readthedocs.build/en/2161/\n\r\n", "created_at": "2023-08-28T19:30:42Z", "updated_at": "2023-08-28T20:06:15Z", "closed_at": "2023-08-28T20:06:14Z", "merged_at": "2023-08-28T20:06:14Z", "merge_commit_sha": "d9aad1fd042a25d226f2ace1f7827b4602761038", "assignee": null, "milestone": null, "draft": 0, "head": "a5cbf80d795b599697b2b873566386abb0cd8b32", "base": "527cec66b0403e689c8fb71fc8b381a1d7a46516", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2161", "merged_by": null, "auto_merge": null} {"id": 512545364, "node_id": "MDExOlB1bGxSZXF1ZXN0NTEyNTQ1MzY0", "number": 1061, "state": "closed", "locked": 0, "title": ".blob output renderer", "user": {"value": 9599, "label": "simonw"}, "body": "- [x] Remove the `/-/...blob/...` route I added in #1040 in place of the new `.blob` renderer URLs\r\n- [x] Link to new `.blob` download links on the arbitrary query page (using `_blob_hash=...`) - plus tests for this\r\n\r\nCloses #1050, Closes #1051", "created_at": "2020-10-29T20:25:08Z", "updated_at": "2020-10-29T22:01:40Z", "closed_at": "2020-10-29T22:01:39Z", "merged_at": "2020-10-29T22:01:39Z", "merge_commit_sha": "78b3eeaad9189eb737014f53212082684f4bb0d4", "assignee": null, "milestone": {"value": 6026070, "label": "0.51"}, "draft": 0, "head": "1196d084de6a7a6f68c7705a6cc096bb8df132e3", "base": "d6f9ff71378c4eab34dad181c23cfc143a4aef2d", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1061", "merged_by": null, "auto_merge": null} {"id": 379192258, "node_id": "MDExOlB1bGxSZXF1ZXN0Mzc5MTkyMjU4", "number": 683, "state": "closed", "locked": 0, "title": ".execute_write() and .execute_write_fn() methods on Database", "user": {"value": 9599, "label": "simonw"}, "body": "See #682\r\n\r\n- [x] Come up with design for `.execute_write()` and `.execute_write_fn()`\r\n- [x] Build some quick demo plugins to exercise the design\r\n- [x] Write some unit tests\r\n- [x] Write the documentation", "created_at": "2020-02-24T19:51:58Z", "updated_at": "2020-05-30T18:40:20Z", "closed_at": "2020-02-25T04:45:08Z", "merged_at": "2020-02-25T04:45:08Z", "merge_commit_sha": "a093c5f79fa034a97d2ad8b606745dd3b80365af", "assignee": null, "milestone": {"value": 3268330, "label": "Datasette 1.0"}, "draft": 0, "head": "ec6e2edfe18446c9d77e3f30efbc299d27ea5c1b", "base": "411056c4c43e74f2b3d0e3bc1175e7998516b1b3", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/683", "merged_by": null, "auto_merge": null} {"id": 297459797, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjk3NDU5Nzk3", "number": 40, "state": "closed", "locked": 0, "title": ".get() method plus support for compound primary keys", "user": {"value": 9599, "label": "simonw"}, "body": "- [x] Tests for the `NotFoundError` exception\r\n- [x] Documentation for `.get()` method\r\n- [x] Support `--pk` multiple times to define CLI compound primary keys\r\n- [x] Documentation for compound primary keys", "created_at": "2019-07-15T03:43:13Z", "updated_at": "2019-07-15T04:28:57Z", "closed_at": "2019-07-15T04:28:52Z", "merged_at": "2019-07-15T04:28:52Z", "merge_commit_sha": "c65b67ca46f70e2da46a5b945f4ed358173262e9", "assignee": null, "milestone": null, "draft": 0, "head": "b5a5df6d0ed47f33f6e1b4873948ead9a7c71060", "base": "65b2156d9cc0aa6b5c3dc7a6bd600d98b281a13b", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/40", "merged_by": null, "auto_merge": null} {"id": 1479795255, "node_id": "PR_kwDOCGYnMM5YM-I3", "number": 584, "state": "closed", "locked": 0, "title": ".transform() instead of modifying sqlite_master for add_foreign_keys", "user": {"value": 9599, "label": "simonw"}, "body": "Refs:\r\n- #577\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://sqlite-utils--584.org.readthedocs.build/en/584/\n\r\n", "created_at": "2023-08-17T23:32:45Z", "updated_at": "2023-08-18T00:48:13Z", "closed_at": "2023-08-18T00:48:08Z", "merged_at": "2023-08-18T00:48:08Z", "merge_commit_sha": "509857ee8724f73760f3631b69c26f9047381187", "assignee": null, "milestone": null, "draft": 0, "head": "291505084e652972ad806383250757d41d596d38", "base": "1dc6b5aa644a92d3654f7068110ed7930989ce71", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/584", "merged_by": null, "auto_merge": null} {"id": 1507097949, "node_id": "PR_kwDOCGYnMM5Z1H1d", "number": 593, "state": "closed", "locked": 0, "title": ".transform() now preserves rowid values, refs #592", "user": {"value": 9599, "label": "simonw"}, "body": "Refs:\r\n- #592\r\n\r\n- [x] Tests against weird shaped tables\r\n\r\nI need to test that this works against:\r\n\r\n- `rowid` tables\r\n- Tables that have a column called `rowid` even though they are not rowid tables\r\n\r\n\r\n\r\n----\r\n:books: Documentation preview :books:: https://sqlite-utils--593.org.readthedocs.build/en/593/\r\n\r\n", "created_at": "2023-09-08T01:02:28Z", "updated_at": "2023-09-10T17:44:59Z", "closed_at": "2023-09-09T00:45:30Z", "merged_at": "2023-09-09T00:45:30Z", "merge_commit_sha": "1c6ea54338e24fcebcee4e2f9c170ee300a5d946", "assignee": null, "milestone": null, "draft": 0, "head": "b86374f705d1f4143a51634b30289cb48add0ea2", "base": "5d123f031fc4fadc98f508e0ef6b7b6671e86155", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/593", "merged_by": null, "auto_merge": null} {"id": 507903392, "node_id": "MDExOlB1bGxSZXF1ZXN0NTA3OTAzMzky", "number": 1040, "state": "closed", "locked": 0, "title": "/db/table/-/blob/pk/column.blob download URL", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1036. Still needs:\r\n\r\n- [x] Comprehensive tests across all of the code branches, plus permissions\r\n- [x] A bit more refactoring to share logic cleanly with `RowView`\r\n- ~~A configuration option to disable this feature (probably)~~", "created_at": "2020-10-21T22:39:15Z", "updated_at": "2020-10-24T23:09:20Z", "closed_at": "2020-10-24T23:09:19Z", "merged_at": "2020-10-24T23:09:19Z", "merge_commit_sha": "5a1519796037105bc20bcf2f91a76e022926c204", "assignee": null, "milestone": {"value": 6026070, "label": "0.51"}, "draft": 0, "head": "4f3165f25fd9241fcf1291c797f4c77766b954dc", "base": "bf82b3d6a605c9ddadd5fb739249dfe6defaf635", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1040", "merged_by": null, "auto_merge": null} {"id": 1144085408, "node_id": "PR_kwDOBm6k_c5EMVug", "number": 1931, "state": "closed", "locked": 0, "title": "/db/table/-/upsert", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1878\r\n\r\nStill todo:\r\n- [x] Support `\"return\": true` properly for upserts (with tests)\r\n- [x] Require both `insert-row` and `update-row` permissions\r\n- [x] Tests are going to need to cover both rowid-only and compound primary key tables, including all of the error states\r\n- [x] Documentation\r\n\r\n\r\n----\r\n:books: Documentation preview :books:: https://datasette--1931.org.readthedocs.build/en/1931/\r\n\r\n", "created_at": "2022-12-03T07:01:44Z", "updated_at": "2022-12-08T01:12:17Z", "closed_at": "2022-12-08T01:12:16Z", "merged_at": "2022-12-08T01:12:16Z", "merge_commit_sha": "272982e8a6f45700ff93c3917b4688a86de0e672", "assignee": null, "milestone": {"value": 8711695, "label": " Datasette 1.0a2"}, "draft": 0, "head": "7cd6fd9f76913196d4f99a194a30e406f33aa363", "base": "93ababe6f7150454d2cf278dae08569e505d2a5b", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1931", "merged_by": null, "auto_merge": null} {"id": 651492888, "node_id": "MDExOlB1bGxSZXF1ZXN0NjUxNDkyODg4", "number": 1339, "state": "closed", "locked": 0, "title": "?_col=/?_nocol= to show/hide columns on the table page", "user": {"value": 9599, "label": "simonw"}, "body": "See #615. Still to do:\r\n\r\n- [x] Allow combination of `?_col=` and `?_nocol=` (`_nocol` wins)\r\n- [x] Deduplicate same column if passed in `?_col=` multiple times\r\n- [x] Validate that user did not try to remove a primary key\r\n- [x] Add tests\r\n- [x] Ensure this works correctly for SQL views\r\n- [x] Add documentation\r\n", "created_at": "2021-05-24T17:15:20Z", "updated_at": "2021-05-27T04:17:44Z", "closed_at": "2021-05-27T04:17:43Z", "merged_at": "2021-05-27T04:17:43Z", "merge_commit_sha": "f1c29fd6a184254aa68efadf096bcf21e848f921", "assignee": null, "milestone": null, "draft": 0, "head": "387c8379b92e559180098f73017a1bf2e6370205", "base": "2bd9d54b2762c991e11950c22c88c0336158d49b", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1339", "merged_by": null, "auto_merge": null} {"id": 1212277427, "node_id": "PR_kwDOBm6k_c5IQeKz", "number": 1999, "state": "closed", "locked": 0, "title": "?_extra= support (draft)", "user": {"value": 9599, "label": "simonw"}, "body": "Refs:\r\n- #262\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1999.org.readthedocs.build/en/1999/\n\r\n", "created_at": "2023-01-21T04:55:18Z", "updated_at": "2023-03-22T22:49:41Z", "closed_at": "2023-03-22T22:49:40Z", "merged_at": "2023-03-22T22:49:40Z", "merge_commit_sha": "d97e82df3c8a3f2e97038d7080167be9bb74a68d", "assignee": null, "milestone": null, "draft": 0, "head": "69a31cd5b61f0b62938efdeec5972090f1a1a508", "base": "56b0758a5fbf85d01ff80a40c9b028469d7bb65f", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1999", "merged_by": null, "auto_merge": null} {"id": 195339111, "node_id": "MDExOlB1bGxSZXF1ZXN0MTk1MzM5MTEx", "number": 311, "state": "closed", "locked": 0, "title": "?_labels=1 to expand foreign keys (in csv and json), refs #233", "user": {"value": 9599, "label": "simonw"}, "body": "Output looks something like this:\r\n\r\n {\r\n \"rowid\": 233,\r\n \"TreeID\": 121240,\r\n \"qLegalStatus\": {\r\n \"value\" 2,\r\n \"label\": \"Private\"\r\n }\r\n \"qSpecies\": {\r\n \"value\": 16,\r\n \"label\": \"Sycamore\"\r\n }\r\n \"qAddress\": \"91 Commonwealth Ave\",\r\n ...\r\n }", "created_at": "2018-06-16T16:31:12Z", "updated_at": "2018-06-16T22:20:31Z", "closed_at": "2018-06-16T22:20:31Z", "merged_at": null, "merge_commit_sha": "9fe59e54ad65eb1c8239b1a78edb5219d3ab8ab0", "assignee": null, "milestone": null, "draft": 0, "head": "40287b1ba09d6e75f0db1458fe78d8c055f128af", "base": "d0a578c0fc07b9d9208cd9de981bdf7385a26c49", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/311", "merged_by": null, "auto_merge": null} {"id": 379378780, "node_id": "MDExOlB1bGxSZXF1ZXN0Mzc5Mzc4Nzgw", "number": 686, "state": "closed", "locked": 0, "title": "?_searchmode=raw option", "user": {"value": 9599, "label": "simonw"}, "body": "Closes #676", "created_at": "2020-02-25T05:45:50Z", "updated_at": "2020-02-25T05:56:09Z", "closed_at": "2020-02-25T05:56:04Z", "merged_at": "2020-02-25T05:56:04Z", "merge_commit_sha": "6cb65555f46456eb31b62e855e21b1d8c809b1a2", "assignee": null, "milestone": null, "draft": 0, "head": "abc782cb342c21b565142e44e70502e61ac6756b", "base": "a093c5f79fa034a97d2ad8b606745dd3b80365af", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/686", "merged_by": null, "auto_merge": null} {"id": 185307407, "node_id": "MDExOlB1bGxSZXF1ZXN0MTg1MzA3NDA3", "number": 246, "state": "closed", "locked": 0, "title": "?_shape=array and _timelimit=", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2018-05-02T00:18:54Z", "updated_at": "2018-05-02T00:20:41Z", "closed_at": "2018-05-02T00:20:40Z", "merged_at": "2018-05-02T00:20:40Z", "merge_commit_sha": "690736436bac599ca042d1caa465c6d66d2651f9", "assignee": null, "milestone": null, "draft": 0, "head": "3807d93b98573e142858c5871b8b4aadda71d28f", "base": "aa954382c3776d596f459897b0d984161293529d", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/246", "merged_by": null, "auto_merge": null} {"id": 270191084, "node_id": "MDExOlB1bGxSZXF1ZXN0MjcwMTkxMDg0", "number": 430, "state": "closed", "locked": 0, "title": "?_where= parameter on table views, closes #429", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2019-04-13T01:15:09Z", "updated_at": "2019-04-13T01:37:23Z", "closed_at": "2019-04-13T01:37:23Z", "merged_at": "2019-04-13T01:37:23Z", "merge_commit_sha": "bc6a9b45646610f362b4287bc4110440991aa4d6", "assignee": null, "milestone": null, "draft": 0, "head": "3ee087c7b60da7ec3e5d2f73611fc6ea99ff82fc", "base": "e11cb4c66442abca2a6b6159521a6cf4da8739c1", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/430", "merged_by": null, "auto_merge": null} {"id": 657373726, "node_id": "MDExOlB1bGxSZXF1ZXN0NjU3MzczNzI2", "number": 262, "state": "closed", "locked": 0, "title": "Ability to add descending order indexes", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #260", "created_at": "2021-05-29T04:51:04Z", "updated_at": "2021-05-29T05:01:42Z", "closed_at": "2021-05-29T05:01:39Z", "merged_at": "2021-05-29T05:01:39Z", "merge_commit_sha": "51d01da30d45c1fbc1e587e6046a933529cf915e", "assignee": null, "milestone": null, "draft": 0, "head": "50a4fb722d29c3e53f7b148a41aeda901d02a264", "base": "b2302875c97f723e02cc39136d0b20fd706369aa", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/262", "merged_by": null, "auto_merge": null} {"id": 716262829, "node_id": "MDExOlB1bGxSZXF1ZXN0NzE2MjYyODI5", "number": 1444, "state": "closed", "locked": 0, "title": "Ability to deploy demos of branches", "user": {"value": 9599, "label": "simonw"}, "body": "See #1442.", "created_at": "2021-08-19T21:08:04Z", "updated_at": "2021-08-19T21:09:44Z", "closed_at": "2021-08-19T21:09:39Z", "merged_at": "2021-08-19T21:09:39Z", "merge_commit_sha": "d84e574e59c51ddcd6cf60a6f9b3d45182daf824", "assignee": null, "milestone": null, "draft": 0, "head": "75f9fe6d6bc642ce5587dd74eed70064c11868be", "base": "adb5b70de5cec3c3dd37184defe606a082c232cf", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1444", "merged_by": null, "auto_merge": null} {"id": 719109709, "node_id": "MDExOlB1bGxSZXF1ZXN0NzE5MTA5NzA5", "number": 321, "state": "closed", "locked": 0, "title": "Ability to insert file contents as text, in addition to blob", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #319.", "created_at": "2021-08-24T22:37:18Z", "updated_at": "2021-08-24T23:31:17Z", "closed_at": "2021-08-24T23:31:13Z", "merged_at": "2021-08-24T23:31:13Z", "merge_commit_sha": "49a010c93d90bc68ce1c6fff7639927248912b54", "assignee": null, "milestone": null, "draft": 0, "head": "db2dd6d9f30b347f4ed22b07f59b5a615184fbfd", "base": "9258f4bd8450c951900de998a7bf81ca9b45a014", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/321", "merged_by": null, "auto_merge": null} {"id": 308292447, "node_id": "MDExOlB1bGxSZXF1ZXN0MzA4MjkyNDQ3", "number": 55, "state": "closed", "locked": 0, "title": "Ability to introspect and run queries against views", "user": {"value": 9599, "label": "simonw"}, "body": "See #54 ", "created_at": "2019-08-17T13:40:56Z", "updated_at": "2019-08-23T12:19:42Z", "closed_at": "2019-08-23T12:19:42Z", "merged_at": "2019-08-23T12:19:42Z", "merge_commit_sha": "9faa98222669723d31e918bb16a42c13c363817f", "assignee": null, "milestone": null, "draft": 0, "head": "4441d6d838fd7518ce715184361f549a04ec8b70", "base": "0e7b461eb3e925aef713206c15794ceae9259c57", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/55", "merged_by": null, "auto_merge": null} {"id": 434055752, "node_id": "MDExOlB1bGxSZXF1ZXN0NDM0MDU1NzUy", "number": 844, "state": "closed", "locked": 0, "title": "Action to run tests and upload coverage report", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #843", "created_at": "2020-06-13T20:52:47Z", "updated_at": "2020-06-13T21:36:52Z", "closed_at": "2020-06-13T21:36:50Z", "merged_at": "2020-06-13T21:36:50Z", "merge_commit_sha": "cf7a2bdb404734910ec07abc7571351a2d934828", "assignee": null, "milestone": null, "draft": 0, "head": "1210d9f41841bdca450f85a2342cdb0ff339c1b4", "base": "80c18a18fc444b89cc12b73599d56e091f3a3c87", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/844", "merged_by": null, "auto_merge": null} {"id": 707490789, "node_id": "MDExOlB1bGxSZXF1ZXN0NzA3NDkwNzg5", "number": 312, "state": "closed", "locked": 0, "title": "Add reference page to documentation using Sphinx autodoc", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #311.", "created_at": "2021-08-10T16:59:17Z", "updated_at": "2021-08-10T23:09:32Z", "closed_at": "2021-08-10T23:09:28Z", "merged_at": "2021-08-10T23:09:28Z", "merge_commit_sha": "6155da72c8939b5d9bdacb7853e5e8d1767ce1d5", "assignee": null, "milestone": null, "draft": 0, "head": "43bc06481783c3cfcee70c0cb541a686e8894adb", "base": "ee469e3122d6f5973ec2584c1580d930daca2e7c", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/312", "merged_by": null, "auto_merge": null} {"id": 293992382, "node_id": "MDExOlB1bGxSZXF1ZXN0MjkzOTkyMzgy", "number": 535, "state": "closed", "locked": 0, "title": "Added asgi_wrapper plugin hook, closes #520", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2019-07-03T03:58:00Z", "updated_at": "2019-07-03T04:06:26Z", "closed_at": "2019-07-03T04:06:26Z", "merged_at": "2019-07-03T04:06:26Z", "merge_commit_sha": "4d2fdafe39159c9a8aa83f7e9bfe768bbbbb56a3", "assignee": null, "milestone": null, "draft": 0, "head": "93bfa26bfd25a3cc911d637596e364d3474325bd", "base": "b9ede4c1898616512b5d204f9c941deff473cbe4", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/535", "merged_by": null, "auto_merge": null} {"id": 1358254580, "node_id": "PR_kwDOCGYnMM5Q9VH0", "number": 546, "state": "closed", "locked": 0, "title": "Analyze tables options: --common-limit, --no-most, --no-least", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #544\r\n\r\n- [x] Documentation for CLI options\r\n- [x] Documentation for new Python API parameters: `most_common: bool` and `least_common: bool`\r\n- [x] Tests for CLI\r\n- [x] Tests for Python API", "created_at": "2023-05-21T15:54:39Z", "updated_at": "2023-05-21T16:19:30Z", "closed_at": "2023-05-21T16:19:30Z", "merged_at": "2023-05-21T16:19:30Z", "merge_commit_sha": "d2a7b15b2b930fe384e1f1715fc4af23386f4935", "assignee": null, "milestone": null, "draft": 0, "head": "2eca17d46eca2cff52c78553085ec64d9029c969", "base": "e047cc32e9d5de7025d4d3c16554d4290f4bd3d1", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/546", "merged_by": null, "auto_merge": null} {"id": 275861559, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjc1ODYxNTU5", "number": 449, "state": "closed", "locked": 0, "title": "Apply black to everything", "user": {"value": 9599, "label": "simonw"}, "body": "I've been hesitating on this for literally months, because I'm not at all excited about the giant diff that will result. But I've been using black on many of my other projects (most actively [sqlite-utils](https://github.com/simonw/sqlite-utils)) and the productivity boost is undeniable: I don't have to spend a single second thinking about code formatting any more!\r\n\r\nSo it's worth swallowing the one-off pain and moving on in a new, black-enabled world.", "created_at": "2019-05-03T21:57:26Z", "updated_at": "2019-05-04T02:17:14Z", "closed_at": "2019-05-04T02:15:15Z", "merged_at": "2019-05-04T02:15:15Z", "merge_commit_sha": "35d6ee2790e41e96f243c1ff58be0c9c0519a8ce", "assignee": null, "milestone": null, "draft": 0, "head": "9683aeb2394a4b7e44499b8a0240af3baafda832", "base": "66c87cee0c7344c7877373c60b180c766c206101", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/449", "merged_by": null, "auto_merge": null} {"id": 425531205, "node_id": "MDExOlB1bGxSZXF1ZXN0NDI1NTMxMjA1", "number": 783, "state": "closed", "locked": 0, "title": "Authentication: plugin hooks plus default --root auth mechanism", "user": {"value": 9599, "label": "simonw"}, "body": "See #699", "created_at": "2020-05-30T22:25:47Z", "updated_at": "2020-06-01T01:16:44Z", "closed_at": "2020-06-01T01:16:43Z", "merged_at": "2020-06-01T01:16:43Z", "merge_commit_sha": "57cf5139c552cb7feab9947daa949ca434cc0a66", "assignee": null, "milestone": null, "draft": 0, "head": "116a26ce2d4af26c928e361e1b24dd6a6bb14eca", "base": "c4fbe50676929b512940aab90de590a78ac5d7fc", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/783", "merged_by": null, "auto_merge": null} {"id": 424032445, "node_id": "MDExOlB1bGxSZXF1ZXN0NDI0MDMyNDQ1", "number": 769, "state": "closed", "locked": 0, "title": "Backport of Python 3.8 shutil.copytree", "user": {"value": 9599, "label": "simonw"}, "body": "Closes #744", "created_at": "2020-05-27T18:17:15Z", "updated_at": "2020-05-27T20:21:56Z", "closed_at": "2020-05-27T18:17:44Z", "merged_at": "2020-05-27T18:17:44Z", "merge_commit_sha": "2d099ad9c657d2cab59de91cdb8bfed2da236ef6", "assignee": null, "milestone": {"value": 5471110, "label": "Datasette 0.43"}, "draft": 0, "head": "6f80757f27e4651e6533856ea87b676dbc0d9c37", "base": "cee671a58f417f827d1735b1abaa40716534ea67", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/769", "merged_by": null, "auto_merge": null} {"id": 201075532, "node_id": "MDExOlB1bGxSZXF1ZXN0MjAxMDc1NTMy", "number": 341, "state": "closed", "locked": 0, "title": "Bump aiohttp to fix compatibility with Python 3.7", "user": {"value": 9599, "label": "simonw"}, "body": "Tests failed here: https://travis-ci.org/simonw/datasette/jobs/403223333", "created_at": "2018-07-12T17:41:24Z", "updated_at": "2018-07-12T18:07:38Z", "closed_at": "2018-07-12T18:07:38Z", "merged_at": "2018-07-12T18:07:38Z", "merge_commit_sha": "31a5d8fa77be68d4f837f0a80a611675dce49f4b", "assignee": null, "milestone": null, "draft": 0, "head": "8d34ed776168dcac530859c51f22e8b48829a513", "base": "130dc8823ebdcc1834fc7c4a03c996b13fc1e444", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/341", "merged_by": null, "auto_merge": null} {"id": 232172106, "node_id": "MDExOlB1bGxSZXF1ZXN0MjMyMTcyMTA2", "number": 389, "state": "closed", "locked": 0, "title": "Bump dependency versions", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2018-11-20T02:23:12Z", "updated_at": "2019-11-13T19:13:41Z", "closed_at": "2019-11-13T19:13:41Z", "merged_at": null, "merge_commit_sha": "9194c0165aef411e0784ba49939b1005306f1f38", "assignee": null, "milestone": null, "draft": 0, "head": "f8349b45916e68d2f89c57694bd0e6afaf1bd508", "base": "5e3a432a0caa23837fa58134f69e2f82e4f632a6", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/389", "merged_by": null, "auto_merge": null} {"id": 339244888, "node_id": "MDExOlB1bGxSZXF1ZXN0MzM5MjQ0ODg4", "number": 624, "state": "closed", "locked": 0, "title": "Bump pint to 0.9", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2019-11-11T04:07:07Z", "updated_at": "2019-11-11T04:19:02Z", "closed_at": "2019-11-11T04:19:02Z", "merged_at": "2019-11-11T04:19:02Z", "merge_commit_sha": "42ee3e16a9ba7cc513b8da944cc1609a5407cf42", "assignee": null, "milestone": null, "draft": 0, "head": "ed17117a2ad675cbf2430f28069bb1854846a6f0", "base": "1c063fae9dba70f70244db010d55a18846640f07", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/624", "merged_by": null, "auto_merge": null} {"id": 297243073, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjk3MjQzMDcz", "number": 559, "state": "closed", "locked": 0, "title": "Bump to uvicorn 0.8.4", "user": {"value": 9599, "label": "simonw"}, "body": "https://github.com/encode/uvicorn/commits/0.8.4\r\n\r\nQuery strings will now be included in log files: https://github.com/encode/uvicorn/pull/384", "created_at": "2019-07-12T22:30:29Z", "updated_at": "2019-07-13T22:34:58Z", "closed_at": "2019-07-13T22:34:58Z", "merged_at": "2019-07-13T22:34:58Z", "merge_commit_sha": "d224ee2c98ac39c2c6e21a0ac0c62e5c3e1ccd11", "assignee": null, "milestone": null, "draft": 0, "head": "029e3d53634cc38690d5b56427a3c87851a61b09", "base": "f2006cca80040871439055ae6ccbc14e589bdf4b", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/559", "merged_by": null, "auto_merge": null} {"id": 206863803, "node_id": "MDExOlB1bGxSZXF1ZXN0MjA2ODYzODAz", "number": 358, "state": "closed", "locked": 0, "title": "Bump versions of pytest, pluggy and beautifulsoup4", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2018-08-08T00:44:38Z", "updated_at": "2018-08-08T01:11:13Z", "closed_at": "2018-08-08T01:11:13Z", "merged_at": "2018-08-08T01:11:13Z", "merge_commit_sha": "e1db8194e8c1d7f361fd0c1c3fc1b91d6aa920e5", "assignee": null, "milestone": null, "draft": 0, "head": "848ed0e0420d2e8c95a96b4cf73082da4c65d8f6", "base": "fe5b6ea95a973534fe8a44907c0ea2449aae7602", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/358", "merged_by": null, "auto_merge": null} {"id": 428212421, "node_id": "MDExOlB1bGxSZXF1ZXN0NDI4MjEyNDIx", "number": 798, "state": "closed", "locked": 0, "title": "CSRF protection", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #793", "created_at": "2020-06-05T04:22:35Z", "updated_at": "2020-06-06T00:43:41Z", "closed_at": "2020-06-05T19:05:58Z", "merged_at": "2020-06-05T19:05:57Z", "merge_commit_sha": "84a9c4ff75460f91c049bd30bba3cee1fd89d9e2", "assignee": null, "milestone": {"value": 5512395, "label": "Datasette 0.44"}, "draft": 0, "head": "fe43963376b1c44ec23a213277bcb33d98e4aef9", "base": "d96ac1d52cacf34bae09705eb8f9a0e3f81c426b", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/798", "merged_by": null, "auto_merge": null} {"id": 429366641, "node_id": "MDExOlB1bGxSZXF1ZXN0NDI5MzY2NjQx", "number": 803, "state": "closed", "locked": 0, "title": "Canned query permissions", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #800. Closes #786", "created_at": "2020-06-06T18:20:00Z", "updated_at": "2020-06-06T19:40:21Z", "closed_at": "2020-06-06T19:40:20Z", "merged_at": "2020-06-06T19:40:20Z", "merge_commit_sha": "415ccd7cbdeebfb52f514a0387221023aa8b4d91", "assignee": null, "milestone": null, "draft": 0, "head": "3359d54a4eb9c9725c27a85437661b5180c4099a", "base": "9c563d6aed072f14d3d25f58e84659f9caa1a243", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/803", "merged_by": null, "auto_merge": null} {"id": 1488154809, "node_id": "PR_kwDOBm6k_c5Ys3C5", "number": 2154, "state": "closed", "locked": 0, "title": "Cascade for restricted token view-table/view-database/view-instance operations", "user": {"value": 9599, "label": "simonw"}, "body": "Refs:\r\n- #2102\r\n\r\nAlso includes a prototype implementation of `--actor option` which I'm using for testing this, from:\r\n- #2153\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--2154.org.readthedocs.build/en/2154/\n\r\n", "created_at": "2023-08-24T14:24:23Z", "updated_at": "2023-08-29T16:32:35Z", "closed_at": "2023-08-29T16:32:34Z", "merged_at": "2023-08-29T16:32:34Z", "merge_commit_sha": "50da908213a0fc405ecd7a40090dfea7a2e7395c", "assignee": null, "milestone": null, "draft": 0, "head": "1b38cba913b0a3515b4b1649276dc1ff973680bb", "base": "2e2825869fc2655b5fcadc743f6f9dec7a49bc65", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2154", "merged_by": null, "auto_merge": null} {"id": 925926708, "node_id": "PR_kwDOBm6k_c43MIU0", "number": 1736, "state": "closed", "locked": 0, "title": "Clean up compatibility with Pyodide", "user": {"value": 9599, "label": "simonw"}, "body": "Closes #1735, closes #1733", "created_at": "2022-05-02T20:14:38Z", "updated_at": "2022-05-02T20:15:28Z", "closed_at": "2022-05-02T20:15:27Z", "merged_at": "2022-05-02T20:15:27Z", "merge_commit_sha": "3f00a29141bdea5be747f6d1c93871ccdb792167", "assignee": null, "milestone": null, "draft": 0, "head": "784fe6a245a051ef6b42e153d3fae9cce7b0b148", "base": "a29c1277896b6a7905ef5441c42a37bc15f67599", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1736", "merged_by": null, "auto_merge": null} {"id": 711783616, "node_id": "MDExOlB1bGxSZXF1ZXN0NzExNzgzNjE2", "number": 1430, "state": "closed", "locked": 0, "title": "Column metadata", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #942\r\n\r\nStill needs:\r\n\r\n- [x] Tests\r\n- [x] Documentation", "created_at": "2021-08-12T23:34:39Z", "updated_at": "2021-08-12T23:53:23Z", "closed_at": "2021-08-12T23:53:23Z", "merged_at": "2021-08-12T23:53:23Z", "merge_commit_sha": "e837095ef35ae155b4c78cc9a8b7133a48c94f03", "assignee": null, "milestone": null, "draft": 0, "head": "941994725dd41deb6f839c5063cff5d15d4abb1c", "base": "b1fed48a95516ae84c0f020582303ab50ab817e2", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1430", "merged_by": null, "auto_merge": null} {"id": 409153870, "node_id": "MDExOlB1bGxSZXF1ZXN0NDA5MTUzODcw", "number": 739, "state": "closed", "locked": 0, "title": "Configuration directory mode", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #731\r\n\r\nTODO:\r\n\r\n- [x] Decide how to combine explicit command-line options with items detected from the directory structure\r\n- [x] Add unit tests\r\n- [x] Implement `inspect-data.json` mechanism for populating `immutables`\r\n- [x] Add documentation", "created_at": "2020-04-26T20:37:46Z", "updated_at": "2020-04-27T16:30:25Z", "closed_at": "2020-04-27T16:30:25Z", "merged_at": "2020-04-27T16:30:25Z", "merge_commit_sha": "25014ca25eb70b4c1217558ebd14db2845973bfb", "assignee": null, "milestone": null, "draft": 0, "head": "0d8fa53fab672fcf16b6a75aa55b07ccd243fb96", "base": "1b7b66c465e44025ec73421bd69752e42f108321", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/739", "merged_by": null, "auto_merge": null} {"id": 1015320511, "node_id": "PR_kwDOCGYnMM48hI-_", "number": 460, "state": "closed", "locked": 0, "title": "Cross-link CLI to Python docs", "user": {"value": 9599, "label": "simonw"}, "body": "Work in progress, partly to test the ReadTheDocs preview link action.\r\n\r\nRefs:\r\n- #426\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://readthedocs-preview--460.org.readthedocs.build/en/460/\n\r\n", "created_at": "2022-08-02T16:18:28Z", "updated_at": "2022-08-18T21:58:10Z", "closed_at": "2022-08-18T21:58:07Z", "merged_at": "2022-08-18T21:58:07Z", "merge_commit_sha": "f4fb78fa95057fbc86c734020835a3155695297f", "assignee": null, "milestone": null, "draft": 0, "head": "f21f4ccf7197e7a0ac8c2eb5086659fc3eb5bc05", "base": "1856002e3c0fcc9f09f72ab7d97ad8c75f6de7df", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/460", "merged_by": null, "auto_merge": null} {"id": 409123897, "node_id": "MDExOlB1bGxSZXF1ZXN0NDA5MTIzODk3", "number": 737, "state": "closed", "locked": 0, "title": "Custom pages mechanism, refs #648", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #648. TODO:\r\n- [x] Pass a `view_name` to `render_template()`\r\n- [x] Mechanism for custom status code / headers / redirect\r\n- [x] Documentation", "created_at": "2020-04-26T17:31:41Z", "updated_at": "2020-04-26T18:46:43Z", "closed_at": "2020-04-26T18:46:43Z", "merged_at": "2020-04-26T18:46:43Z", "merge_commit_sha": "304e7b1d9fd904ae1c35600bc03662eb90eeeae0", "assignee": null, "milestone": null, "draft": 0, "head": "b5bbf1bd88f67a26eb34902bc11f2da7692c7af2", "base": "227bb3e91fe34811a9374150798643a5af98ed79", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/737", "merged_by": null, "auto_merge": null} {"id": 1496106142, "node_id": "PR_kwDOBm6k_c5ZLMSe", "number": 2165, "state": "closed", "locked": 0, "title": "DATASETTE_LOAD_PLUGINS environment variable for loading specific plugins", "user": {"value": 9599, "label": "simonw"}, "body": "- #2164\r\n\r\nTODO:\r\n\r\n- [x] Automated tests\r\n- [ ] Documentation\r\n- [x] Make sure `DATASETTE_LOAD_PLUGINS=''` works for loading zero plugins", "created_at": "2023-08-30T20:33:30Z", "updated_at": "2023-08-30T22:12:25Z", "closed_at": "2023-08-30T22:12:25Z", "merged_at": "2023-08-30T22:12:25Z", "merge_commit_sha": "6bfe104d47b888c70bfb7781f8f48ff11452b2b5", "assignee": null, "milestone": null, "draft": 0, "head": "6321c9c055a640ed6ea98e231dc5813dcde1f773", "base": "30b28c8367a9c6870386ea10a202705b40862457", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2165", "merged_by": null, "auto_merge": null} {"id": 370675007, "node_id": "MDExOlB1bGxSZXF1ZXN0MzcwNjc1MDA3", "number": 664, "state": "closed", "locked": 0, "title": "Datasette.render_template() method", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #577", "created_at": "2020-02-04T06:53:59Z", "updated_at": "2020-02-04T20:26:18Z", "closed_at": "2020-02-04T20:26:18Z", "merged_at": "2020-02-04T20:26:18Z", "merge_commit_sha": "70b915fb4bc214f9d064179f87671f8a378aa127", "assignee": null, "milestone": null, "draft": 0, "head": "19d4406f562aca291fef04363802093672620220", "base": "286ed286b68793532c2a38436a08343b45cfbc91", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/664", "merged_by": null, "auto_merge": null} {"id": 925807233, "node_id": "PR_kwDOCGYnMM43LrKB", "number": 429, "state": "closed", "locked": 0, "title": "Depend on click-default-group-wheel", "user": {"value": 9599, "label": "simonw"}, "body": "Trying to get this to work with Pyodide.\r\n\r\nRefs: https://github.com/simonw/click-default-group-wheel/issues/3", "created_at": "2022-05-02T18:03:10Z", "updated_at": "2022-05-02T18:52:42Z", "closed_at": "2022-05-02T18:05:00Z", "merged_at": "2022-05-02T18:05:00Z", "merge_commit_sha": "ed6fd516082e8cc83b199798f62dd67728a6974f", "assignee": null, "milestone": null, "draft": 0, "head": "4a02dcf265702a4f11eed943bf8feaa502c590d5", "base": "e3a14c33a033b0c2fc00f2470666caaf9027e446", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/429", "merged_by": null, "auto_merge": null} {"id": 1015591301, "node_id": "PR_kwDOCGYnMM48iLGF", "number": 462, "state": "closed", "locked": 0, "title": "Discord badge", "user": {"value": 9599, "label": "simonw"}, "body": "Also testing fix for:\r\n- https://github.com/readthedocs/readthedocs-preview/issues/10\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://sqlite-utils--462.org.readthedocs.build/en/462/\n\r\n", "created_at": "2022-08-02T20:56:04Z", "updated_at": "2022-08-02T21:15:57Z", "closed_at": "2022-08-02T21:15:52Z", "merged_at": "2022-08-02T21:15:52Z", "merge_commit_sha": "271433fdd18e436b0a527ab899cb6f6fa67f23d0", "assignee": null, "milestone": null, "draft": 0, "head": "0a14a031385f2647be0b9d15d96c1d44d05c2296", "base": "98a28cbfe6cea67f6334b42b74f35b0ddd309561", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/462", "merged_by": null, "auto_merge": null} {"id": 468377212, "node_id": "MDExOlB1bGxSZXF1ZXN0NDY4Mzc3MjEy", "number": 937, "state": "closed", "locked": 0, "title": "Docs now live at docs.datasette.io", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2020-08-15T23:53:52Z", "updated_at": "2020-08-15T23:57:06Z", "closed_at": "2020-08-15T23:57:05Z", "merged_at": "2020-08-15T23:57:05Z", "merge_commit_sha": "41ddc197561ac2d2a1bb988956c301a523c6ca35", "assignee": null, "milestone": null, "draft": 0, "head": "ff2605af65e023564cd7b57382b116e94b9d4f16", "base": "af12f45c2b0e4782ca92c2d00481dc47ccb7a046", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/937", "merged_by": null, "auto_merge": null} {"id": 415286105, "node_id": "MDExOlB1bGxSZXF1ZXN0NDE1Mjg2MTA1", "number": 763, "state": "closed", "locked": 0, "title": "Documentation + improvements for db.execute() and Results class", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #685\r\n\r\nStill TODO:\r\n\r\n- [x] Implement `results.first()`\r\n- [x] Implement `results.single_value()`\r\n- [x] Unit tests for the above\r\n", "created_at": "2020-05-08T15:16:02Z", "updated_at": "2020-06-11T16:05:48Z", "closed_at": "2020-05-08T16:05:46Z", "merged_at": "2020-05-08T16:05:46Z", "merge_commit_sha": "4433306c1855ad69840cc76cbd41086137572be2", "assignee": null, "milestone": null, "draft": 0, "head": "1ea62c77221d07cd121367f1c6b620f8bde0716a", "base": "69e3a855dd7e5a77409d70b18c45ae3c1a145a75", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/763", "merged_by": null, "auto_merge": null} {"id": 329947180, "node_id": "MDExOlB1bGxSZXF1ZXN0MzI5OTQ3MTgw", "number": 601, "state": "closed", "locked": 0, "title": "Don't auto-format SQL on page load", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #600", "created_at": "2019-10-18T22:37:39Z", "updated_at": "2019-10-20T02:29:49Z", "closed_at": "2019-10-18T23:56:45Z", "merged_at": "2019-10-18T23:56:45Z", "merge_commit_sha": "e877b1cb12076946fdbec7ca2fbfbfc75c1c2a28", "assignee": null, "milestone": null, "draft": 0, "head": "3a963734590caa3ad69bfe64c31690f3e4de61a4", "base": "b6ad1fdc7068cb8248787843e7438d1f19fa2e3a", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/601", "merged_by": null, "auto_merge": null} {"id": 381666777, "node_id": "MDExOlB1bGxSZXF1ZXN0MzgxNjY2Nzc3", "number": 688, "state": "closed", "locked": 0, "title": "Don't count rows on homepage for DBs > 100MB", "user": {"value": 9599, "label": "simonw"}, "body": "Closes #649.", "created_at": "2020-02-29T01:01:06Z", "updated_at": "2020-02-29T01:08:30Z", "closed_at": "2020-02-29T01:08:29Z", "merged_at": "2020-02-29T01:08:29Z", "merge_commit_sha": "7f5a330377fd7db1f6d1efa5686d183bcaf89217", "assignee": null, "milestone": null, "draft": 0, "head": "025fdd46f77822c0cbeb7856611c0a65a9b83057", "base": "0f8e91c68f2d2ad48efc8324b12762bf8b58facd", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/688", "merged_by": null, "auto_merge": null} {"id": 468370658, "node_id": "MDExOlB1bGxSZXF1ZXN0NDY4MzcwNjU4", "number": 936, "state": "closed", "locked": 0, "title": "Don't hang in db.execute_write_fn() if connection fails", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #935", "created_at": "2020-08-15T22:20:12Z", "updated_at": "2020-08-15T22:35:33Z", "closed_at": "2020-08-15T22:35:32Z", "merged_at": "2020-08-15T22:35:32Z", "merge_commit_sha": "b86f94883b1d827f85b07009e8346b8e9c6eeefa", "assignee": null, "milestone": null, "draft": 0, "head": "94a68b95a21f29526d66e88bf5ea524a3efcc609", "base": "13b3b51087964d5e1a8c1cdd2495e07bdbe176b8", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/936", "merged_by": null, "auto_merge": null} {"id": 1046767034, "node_id": "PR_kwDOBm6k_c4-ZGW6", "number": 1801, "state": "closed", "locked": 0, "title": "Don't use upper bound dependencies, refs #1800", "user": {"value": 9599, "label": "simonw"}, "body": "See https://iscinumpy.dev/post/bound-version-constraints/\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1801.org.readthedocs.build/en/1801/\n\r\n", "created_at": "2022-09-05T18:29:28Z", "updated_at": "2022-09-05T18:35:41Z", "closed_at": "2022-09-05T18:35:41Z", "merged_at": "2022-09-05T18:35:41Z", "merge_commit_sha": "51030df1869b3b574dd3584d1563415776b9cd4e", "assignee": null, "milestone": null, "draft": 0, "head": "3f24edd6b29e7deff37d0e45827133fc5a9e5387", "base": "ba35105eee2d3ba620e4f230028a02b2e2571df2", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1801", "merged_by": null, "auto_merge": null} {"id": 560725714, "node_id": "MDExOlB1bGxSZXF1ZXN0NTYwNzI1NzE0", "number": 1203, "state": "closed", "locked": 0, "title": "Easier way to run Prettier locally", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1167", "created_at": "2021-01-25T01:39:06Z", "updated_at": "2021-01-25T01:41:46Z", "closed_at": "2021-01-25T01:41:46Z", "merged_at": "2021-01-25T01:41:46Z", "merge_commit_sha": "ffff3a4c5398a9f40b61d59736f386444da19289", "assignee": null, "milestone": null, "draft": 0, "head": "98acc8865aa7826a40a7a076ab548ba8597af734", "base": "b6a7b58fa01af0cd5a5e94bd17d686d283a46819", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1203", "merged_by": null, "auto_merge": null} {"id": 712412883, "node_id": "MDExOlB1bGxSZXF1ZXN0NzEyNDEyODgz", "number": 1434, "state": "open", "locked": 0, "title": "Enrich arbitrary query results with foreign key links and column descriptions", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1293, follows #942.", "created_at": "2021-08-13T14:43:01Z", "updated_at": "2021-08-19T21:18:58Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "d4d4f5566b1d43075cb52ded5d19a9dcf4350761", "assignee": null, "milestone": null, "draft": 0, "head": "281c0872d5b8a462c9d7b2b2d77a924da4ed25a7", "base": "2883098770fc66e50183b2b231edbde20848d4d6", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1434", "merged_by": null, "auto_merge": null} {"id": 247923347, "node_id": "MDExOlB1bGxSZXF1ZXN0MjQ3OTIzMzQ3", "number": 404, "state": "closed", "locked": 0, "title": "Experiment: run Jinja in async mode", "user": {"value": 9599, "label": "simonw"}, "body": "See http://jinja.pocoo.org/docs/2.10/api/#async-support\r\n\r\nTests all pass. Have not checked performance difference yet.\r\n\r\nCreating pull request to run tests in Travis. This is not ready to merge - I'm not yet sure if this is a good idea.", "created_at": "2019-01-27T00:28:44Z", "updated_at": "2019-11-12T05:02:18Z", "closed_at": "2019-11-12T05:02:13Z", "merged_at": null, "merge_commit_sha": "773bcac907d17b16eef604ad943837da39a10090", "assignee": null, "milestone": null, "draft": 0, "head": "dd7f24a47f660e2f0fc1e97a13d28908c28dc245", "base": "909cc8fbdfc9c05e447f40e9a73489809602c3cd", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/404", "merged_by": null, "auto_merge": null} {"id": 580235427, "node_id": "MDExOlB1bGxSZXF1ZXN0NTgwMjM1NDI3", "number": 241, "state": "open", "locked": 0, "title": "Extract expand - work in progress", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #239. Still needs documentation and CLI implementation.", "created_at": "2021-02-25T16:36:38Z", "updated_at": "2021-02-25T16:36:38Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "0bb6c7a38994627a64e7b3375931528e96b8c222", "assignee": null, "milestone": null, "draft": 1, "head": "8d641ab08ac449081e96f3e25bd6c0226870948a", "base": "38e688fb8bcb58ae888b676fe3f7dd0529b4eecc", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/241", "merged_by": null, "auto_merge": null} {"id": 275558612, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjc1NTU4NjEy", "number": 445, "state": "closed", "locked": 0, "title": "Extract facet code out into a new plugin hook, closes #427", "user": {"value": 9599, "label": "simonw"}, "body": "Datasette previously only supported one type of faceting: exact column value counting.\r\n\r\nWith this change, faceting logic is extracted out into one or more separate classes which can implement other patterns of faceting - this is discussed in #427, but potential upcoming facet types include facet-by-date, facet-by-JSON-array, facet-by-many-2-many and more.\r\n\r\nA new plugin hook, register_facet_classes, can be used by plugins to add in additional facet classes.\r\n\r\nEach class must implement two methods: suggest(), which scans columns in the table to decide if they might be worth suggesting for faceting, and facet_results(), which executes the facet operation and returns results ready to be displayed in the UI.", "created_at": "2019-05-03T00:02:41Z", "updated_at": "2019-05-03T18:17:18Z", "closed_at": "2019-05-03T00:11:27Z", "merged_at": "2019-05-03T00:11:27Z", "merge_commit_sha": "ea66c45df96479ef66a89caa71fff1a97a862646", "assignee": null, "milestone": null, "draft": 0, "head": "1b47d4d8736627c260eb4e8303e552b0e9620a01", "base": "efc93b8ab5a21e3802f75f08d5e41409f5684b5d", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/445", "merged_by": null, "auto_merge": null} {"id": 295127213, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjk1MTI3MjEz", "number": 546, "state": "open", "locked": 0, "title": "Facet by delimiter", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #510", "created_at": "2019-07-07T20:06:05Z", "updated_at": "2019-11-18T23:46:01Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "68a6fb1a576a747b868771d00a10753f35aaa0cf", "assignee": null, "milestone": null, "draft": 0, "head": "47ac6c6e46da16716d295d7cda8f79cd0663ca5e", "base": "a9909c29ccac771c23c2ef22b89d10697b5256b9", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/546", "merged_by": null, "auto_merge": null} {"id": 188312411, "node_id": "MDExOlB1bGxSZXF1ZXN0MTg4MzEyNDEx", "number": 261, "state": "closed", "locked": 0, "title": "Facets improvements plus suggested facets", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #255", "created_at": "2018-05-16T03:52:39Z", "updated_at": "2018-05-16T15:27:26Z", "closed_at": "2018-05-16T15:27:25Z", "merged_at": "2018-05-16T15:27:25Z", "merge_commit_sha": "9959a9e4deec8e3e178f919e8b494214d5faa7fd", "assignee": null, "milestone": null, "draft": 0, "head": "af0e91e7769891949198fb1e1760886424f34b16", "base": "2b79f2bdeb1efa86e0756e741292d625f91cb93d", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/261", "merged_by": null, "auto_merge": null} {"id": 301483613, "node_id": "MDExOlB1bGxSZXF1ZXN0MzAxNDgzNjEz", "number": 564, "state": "open", "locked": 0, "title": "First proof-of-concept of Datasette Library", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #417. Run it like this:\r\n\r\n datasette -d ~/Library\r\n\r\nUses a new plugin hook - available_databases()\r\n", "created_at": "2019-07-26T10:22:26Z", "updated_at": "2023-02-07T15:14:11Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "4f425d2b39d1be10d7ef5c146480a3eb494d5086", "assignee": null, "milestone": null, "draft": 1, "head": "947645d84710677ea50762016081a9fbc6b014a8", "base": "a9453c4dda70bbf5122835e68f63db6ecbe1a6fc", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/564", "merged_by": null, "auto_merge": null} {"id": 753513062, "node_id": "PR_kwDOBm6k_c4s6bJm", "number": 1481, "state": "closed", "locked": 0, "title": "Fix compatibility with Python 3.10", "user": {"value": 9599, "label": "simonw"}, "body": null, "created_at": "2021-10-07T20:34:23Z", "updated_at": "2021-10-24T22:19:55Z", "closed_at": "2021-10-24T22:19:54Z", "merged_at": "2021-10-24T22:19:54Z", "merge_commit_sha": "96a823f2834a262ae97a90ebfb6847f14763c415", "assignee": null, "milestone": null, "draft": 0, "head": "50005bd2d36219c3ae8b6220d38df918459a1812", "base": "63886178a649586b403966a27a45881709d2b868", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1481", "merged_by": null, "auto_merge": null} {"id": 329890320, "node_id": "MDExOlB1bGxSZXF1ZXN0MzI5ODkwMzIw", "number": 599, "state": "closed", "locked": 0, "title": "Fix for /foo v.s. /foo-bar issue in #597", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #597", "created_at": "2019-10-18T19:22:55Z", "updated_at": "2019-10-18T22:51:07Z", "closed_at": "2019-10-18T22:51:07Z", "merged_at": "2019-10-18T22:51:07Z", "merge_commit_sha": "b647b5efc29300f715ba656e41b0591f342938e1", "assignee": null, "milestone": null, "draft": 0, "head": "8cc5a8dc35371f7d4353a4206b2d079f520c61cd", "base": "b6ad1fdc7068cb8248787843e7438d1f19fa2e3a", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/599", "merged_by": null, "auto_merge": null} {"id": 182357613, "node_id": "MDExOlB1bGxSZXF1ZXN0MTgyMzU3NjEz", "number": 222, "state": "closed", "locked": 0, "title": "Fix for plugins in Python 3.5", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2018-04-18T03:21:01Z", "updated_at": "2018-04-18T04:26:50Z", "closed_at": "2018-04-18T03:24:21Z", "merged_at": "2018-04-18T03:24:21Z", "merge_commit_sha": "4be6deb94776744071311777f0b18efb993c0cfa", "assignee": null, "milestone": null, "draft": 0, "head": "420cdcb88ee41c15a90fce30fdec5832c03295bd", "base": "1c36d07dd432b9960f4f2d096739460b4fcf8877", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/222", "merged_by": null, "auto_merge": null} {"id": 691707409, "node_id": "MDExOlB1bGxSZXF1ZXN0NjkxNzA3NDA5", "number": 1397, "state": "closed", "locked": 0, "title": "Fix for race condition in refresh_schemas(), closes #1231", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2021-07-16T19:44:43Z", "updated_at": "2021-07-16T19:45:00Z", "closed_at": "2021-07-16T19:44:58Z", "merged_at": "2021-07-16T19:44:58Z", "merge_commit_sha": "c00f29affcafce8314366852ba1a0f5a7dd25690", "assignee": null, "milestone": null, "draft": 0, "head": "bf2453ab7cb876c91edab3df59b7f398df2f9727", "base": "dd5ee8e66882c94343cd3f71920878c6cfd0da41", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1397", "merged_by": null, "auto_merge": null} {"id": 301824097, "node_id": "MDExOlB1bGxSZXF1ZXN0MzAxODI0MDk3", "number": 51, "state": "closed", "locked": 0, "title": "Fix for too many SQL variables, closes #50", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2019-07-28T11:30:30Z", "updated_at": "2019-07-28T11:59:32Z", "closed_at": "2019-07-28T11:59:32Z", "merged_at": "2019-07-28T11:59:32Z", "merge_commit_sha": "9cb045284ede8009c12abdb1755b5b20f6ccff5f", "assignee": null, "milestone": null, "draft": 0, "head": "0c1b8b7f96be874bb63801f69323960f277aa49a", "base": "9b7be79c86b4283f24a64f62257c918f12542997", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/51", "merged_by": null, "auto_merge": null} {"id": 154246816, "node_id": "MDExOlB1bGxSZXF1ZXN0MTU0MjQ2ODE2", "number": 145, "state": "closed", "locked": 0, "title": "Fix pytest version conflict", "user": {"value": 9599, "label": "simonw"}, "body": "https://travis-ci.org/simonw/datasette/jobs/305929426\r\n\r\n pkg_resources.VersionConflict: (pytest 3.2.1 (/home/travis/virtualenv/python3.5.3/lib/python3.5/site-packages), \r\n Requirement.parse('pytest==3.2.3'))", "created_at": "2017-11-22T20:15:34Z", "updated_at": "2017-11-22T20:17:54Z", "closed_at": "2017-11-22T20:17:52Z", "merged_at": "2017-11-22T20:17:52Z", "merge_commit_sha": "f96e55bce55d26c4d5b198edc536e1b8e9bbea43", "assignee": null, "milestone": null, "draft": 0, "head": "e319478c4a34fb5afbff2b2a8c3b9ef9f859bb10", "base": "fa8eb0bf1b113ab17ede9cd107b7c3bd5cde39c3", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/145", "merged_by": null, "auto_merge": null} {"id": 241418443, "node_id": "MDExOlB1bGxSZXF1ZXN0MjQxNDE4NDQz", "number": 392, "state": "closed", "locked": 0, "title": "Fix some regex DeprecationWarnings", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2018-12-29T02:10:28Z", "updated_at": "2018-12-29T02:22:28Z", "closed_at": "2018-12-29T02:22:28Z", "merged_at": "2018-12-29T02:22:28Z", "merge_commit_sha": "a2bfcfc1b1c60dac3526364af17c2fa2f3d41a0a", "assignee": null, "milestone": null, "draft": 0, "head": "d245982aedaf7c54bf41d60ea7f0e0cf419c2b2f", "base": "eac08f0dfc61a99e8887442fc247656d419c76f8", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/392", "merged_by": null, "auto_merge": null} {"id": 357992588, "node_id": "MDExOlB1bGxSZXF1ZXN0MzU3OTkyNTg4", "number": 72, "state": "closed", "locked": 0, "title": "Fixed implementation of upsert", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #66", "created_at": "2019-12-30T05:08:05Z", "updated_at": "2019-12-30T05:29:24Z", "closed_at": "2019-12-30T05:29:24Z", "merged_at": "2019-12-30T05:29:24Z", "merge_commit_sha": "9f47e8b9a4cb788b48b76aee1333c6f3baaebbd6", "assignee": null, "milestone": null, "draft": 0, "head": "ab8a4bda75fc59871ba8445c6a0fb2332483029c", "base": "dc0a62556ec092be7b341c5220e0410354f7cd02", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/72", "merged_by": null, "auto_merge": null} {"id": 153432045, "node_id": "MDExOlB1bGxSZXF1ZXN0MTUzNDMyMDQ1", "number": 118, "state": "closed", "locked": 0, "title": "Foreign key information on row and table pages", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2017-11-18T03:13:27Z", "updated_at": "2017-11-18T03:15:57Z", "closed_at": "2017-11-18T03:15:50Z", "merged_at": "2017-11-18T03:15:50Z", "merge_commit_sha": "1b04662585ea1539014bfbd616a8112b650d5699", "assignee": null, "milestone": null, "draft": 0, "head": "2fa60bc5e3c9d75c19e21a2384f52b58e1872fa8", "base": "6d39429daa4655e3cf7a6a7671493292a20a30a1", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/118", "merged_by": null, "auto_merge": null} {"id": 247576942, "node_id": "MDExOlB1bGxSZXF1ZXN0MjQ3NTc2OTQy", "number": 4, "state": "closed", "locked": 0, "title": "Fts5", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2019-01-25T06:54:05Z", "updated_at": "2019-01-25T06:54:33Z", "closed_at": "2019-01-25T06:54:33Z", "merged_at": "2019-01-25T06:54:33Z", "merge_commit_sha": "42b2b4b785e3163371e92a9cc085bc47e7c83107", "assignee": null, "milestone": null, "draft": 0, "head": "7f205d2308443557bcaec497b3d0badc0dc26f06", "base": "ccb2a1e729780689188005a52c362b7e963f71e8", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/4", "merged_by": null, "auto_merge": null} {"id": 296735320, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjk2NzM1MzIw", "number": 557, "state": "closed", "locked": 0, "title": "Get tests running on Windows using Travis CI", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #511", "created_at": "2019-07-11T16:36:57Z", "updated_at": "2021-07-10T23:39:48Z", "closed_at": "2021-07-10T23:39:48Z", "merged_at": null, "merge_commit_sha": "cddb9a9fecfa25147d80df05f1a6d6e1686ca30d", "assignee": null, "milestone": null, "draft": 0, "head": "47b5ab43be87217c4e40ad93b8aa2e9639fa371f", "base": "f2006cca80040871439055ae6ccbc14e589bdf4b", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/557", "merged_by": null, "auto_merge": null} {"id": 250628275, "node_id": "MDExOlB1bGxSZXF1ZXN0MjUwNjI4Mjc1", "number": 407, "state": "closed", "locked": 0, "title": "Heroku --include-vcs-ignore", "user": {"value": 9599, "label": "simonw"}, "body": "Should mean `datasette publish heroku` can work under Travis, unlike this failure:\r\n\r\nhttps://travis-ci.org/simonw/fivethirtyeight-datasette/builds/488047550\r\n\r\n```\r\n2.25s$ datasette publish heroku fivethirtyeight.db -m metadata.json -n fivethirtyeight-datasette\r\ntar: unrecognized option '--exclude-vcs-ignores'\r\nTry 'tar --help' or 'tar --usage' for more information.\r\n \u25b8 Command failed: tar cz -C /tmp/tmpuaxm7i8f --exclude-vcs-ignores --exclude\r\n \u25b8 .git --exclude .gitmodules . >\r\n \u25b8 /tmp/f49440e0-1bf3-4d3f-9eb0-fbc2967d1fd4.tar.gz\r\n \u25b8 tar: unrecognized option '--exclude-vcs-ignores'\r\n \u25b8 Try 'tar --help' or 'tar --usage' for more information.\r\n \u25b8 \r\nThe command \"datasette publish heroku fivethirtyeight.db -m metadata.json -n fivethirtyeight-datasette\" exited with 0.\r\n```\r\n\r\nThe fix for that issue is to call the heroku command like this:\r\n\r\n heroku builds:create -a app_name --include-vcs-ignore\r\n\r\n", "created_at": "2019-02-06T04:06:20Z", "updated_at": "2019-02-06T04:31:30Z", "closed_at": "2019-02-06T04:15:47Z", "merged_at": "2019-02-06T04:15:46Z", "merge_commit_sha": "195a5b36349d0d24a6bbb758cebb719b6de303b6", "assignee": null, "milestone": null, "draft": 0, "head": "01978ddb9682c828cafddaf9ca625e08ba3ba3a4", "base": "436b8bc1d17c2ab415800ab209204f94e7f7929e", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/407", "merged_by": null, "auto_merge": null} {"id": 300286535, "node_id": "MDExOlB1bGxSZXF1ZXN0MzAwMjg2NTM1", "number": 45, "state": "closed", "locked": 0, "title": "Implemented table.lookup(...), closes #44", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2019-07-23T13:03:30Z", "updated_at": "2019-07-23T13:07:00Z", "closed_at": "2019-07-23T13:07:00Z", "merged_at": "2019-07-23T13:07:00Z", "merge_commit_sha": "580502431614d3653c93249988290265f3163d4b", "assignee": null, "milestone": null, "draft": 0, "head": "c0852ce018425450d6c040040f32729d41ff635c", "base": "f3a4c3d3ee6475a6caf3c9606656dbaf1df020b7", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/45", "merged_by": null, "auto_merge": null} {"id": 816927546, "node_id": "PR_kwDOCGYnMM4wsVM6", "number": 367, "state": "closed", "locked": 0, "title": "Initial prototype of .analyze() methods", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #366", "created_at": "2022-01-08T21:35:12Z", "updated_at": "2022-01-10T19:31:08Z", "closed_at": "2022-01-10T19:31:08Z", "merged_at": null, "merge_commit_sha": "2ffcbed6787523649dd676985f3ea70a62944764", "assignee": null, "milestone": {"value": 7558727, "label": "3.21"}, "draft": 1, "head": "9848eaa61b43de0ddb74ff6d085bcb18f4640f91", "base": "a8f9cc6f64f299830834428509940d448b82b4ed", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/367", "merged_by": null, "auto_merge": null} {"id": 193361341, "node_id": "MDExOlB1bGxSZXF1ZXN0MTkzMzYxMzQx", "number": 307, "state": "closed", "locked": 0, "title": "Initial sketch of custom URL routing, refs #306", "user": {"value": 9599, "label": "simonw"}, "body": "See #306 for background on this.", "created_at": "2018-06-07T15:26:48Z", "updated_at": "2018-06-07T15:29:54Z", "closed_at": "2018-06-07T15:29:41Z", "merged_at": null, "merge_commit_sha": "8c6663d3cc8043fc6f5c796275e80b0445bdff12", "assignee": null, "milestone": null, "draft": 0, "head": "018af454f286120452e33d2568dd40908474a8a8", "base": "a246f476b4fe490f5450836b22961bc607e6b4b0", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/307", "merged_by": null, "auto_merge": null} {"id": 490703173, "node_id": "MDExOlB1bGxSZXF1ZXN0NDkwNzAzMTcz", "number": 166, "state": "closed", "locked": 0, "title": "Keyword only arguments for transform()", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #165", "created_at": "2020-09-22T05:41:44Z", "updated_at": "2020-09-22T06:39:11Z", "closed_at": "2020-09-22T06:39:11Z", "merged_at": "2020-09-22T06:39:10Z", "merge_commit_sha": "f8e10df00eae209fb0a1ea03384d9153f673a3ec", "assignee": null, "milestone": null, "draft": 0, "head": "f8648cac3a6dda90578a1536cdae44d145633a2c", "base": "987dd123f2ac43c5ab66d69e59d454fe09660606", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/166", "merged_by": null, "auto_merge": null} {"id": 1067890893, "node_id": "PR_kwDOBm6k_c4_prjN", "number": 1823, "state": "open", "locked": 0, "title": "Keyword-only arguments for a bunch of internal methods", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1822\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1823.org.readthedocs.build/en/1823/\n\r\n", "created_at": "2022-09-27T00:44:59Z", "updated_at": "2022-10-05T04:37:54Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "28068a62ad6a8b76a1c9223c4ca78099cfd2ece5", "assignee": null, "milestone": null, "draft": 0, "head": "b545b6a04ed7b407331f991adce107691ac3ab97", "base": "5f9f567acbc58c9fcd88af440e68034510fb5d2b", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1823", "merged_by": null, "auto_merge": null} {"id": 1009936222, "node_id": "PR_kwDOCGYnMM48Mmde", "number": 457, "state": "closed", "locked": 0, "title": "Link to installation instructions", "user": {"value": 9599, "label": "simonw"}, "body": "Also testing https://docs.readthedocs.io/en/stable/pull-requests.html", "created_at": "2022-07-27T17:38:36Z", "updated_at": "2022-08-27T03:55:52Z", "closed_at": "2022-07-27T17:57:50Z", "merged_at": "2022-07-27T17:57:50Z", "merge_commit_sha": "77ca051d4f5ddbd42fd6250749efac7ea85ea094", "assignee": null, "milestone": {"value": 8355157, "label": "3.29"}, "draft": 0, "head": "80b3907471f724aeecae75796663815c87731e77", "base": "9e6cceac1c0e086429e2d308b700e59cc53a1991", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/457", "merged_by": null, "auto_merge": null} {"id": 440946817, "node_id": "MDExOlB1bGxSZXF1ZXN0NDQwOTQ2ODE3", "number": 869, "state": "closed", "locked": 0, "title": "Magic parameters for canned queries", "user": {"value": 9599, "label": "simonw"}, "body": "Implementation for #842\r\n\r\nTODO:\r\n\r\n- [x] Add tests for built-in magic parameters\r\n- [x] Magic parameters should not show up as blank form fields on the query page\r\n- [x] Update documentation for new `_request_X` (now called `_header_X`) implementation where X is a key from the ASGI scope\r\n- [x] Make sure these only work for canned queries, not for arbitrary SQL queries (security issue)\r\n- [x] Add test for the `register_magic_parameters` plugin hook\r\n- [x] Add documentation for the `register_magic_parameters` plugin hook\r\n", "created_at": "2020-06-27T18:37:21Z", "updated_at": "2020-06-28T02:58:18Z", "closed_at": "2020-06-28T02:58:17Z", "merged_at": "2020-06-28T02:58:17Z", "merge_commit_sha": "563f5a2d3ab30ad08daee38f5ec3ed6429ac9206", "assignee": null, "milestone": {"value": 5533512, "label": "Datasette 0.45"}, "draft": 0, "head": "9e693a7aae3b4a0882881e3a1c182e1c0c753efd", "base": "4b142862f237f95a731cb8263a293eda70d13c82", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/869", "merged_by": null, "auto_merge": null} {"id": 205770996, "node_id": "MDExOlB1bGxSZXF1ZXN0MjA1NzcwOTk2", "number": 1, "state": "closed", "locked": 0, "title": "Make .indexes compatible with older SQLite versions", "user": {"value": 9599, "label": "simonw"}, "body": "Older SQLite versions return a different set of columns from the PRAGMA we are using.", "created_at": "2018-08-02T15:17:05Z", "updated_at": "2018-08-02T15:17:30Z", "closed_at": "2018-08-02T15:17:30Z", "merged_at": "2018-08-02T15:17:30Z", "merge_commit_sha": "741e8f7fe563e18fe9a12ac1ce38157e8c903505", "assignee": null, "milestone": null, "draft": 0, "head": "9e674311065b8372f0a93becc8e7357ceffd353b", "base": "0aa28293adedc488eb9107dc52b5e9a124887fbd", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/1", "merged_by": null, "auto_merge": null} {"id": 662557240, "node_id": "MDExOlB1bGxSZXF1ZXN0NjYyNTU3MjQw", "number": 1357, "state": "closed", "locked": 0, "title": "Make custom pages compatible with base_url setting", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1238.", "created_at": "2021-06-05T18:54:39Z", "updated_at": "2021-06-05T18:59:54Z", "closed_at": "2021-06-05T18:59:54Z", "merged_at": "2021-06-05T18:59:54Z", "merge_commit_sha": "a63412152518581c6a3d4e142b937e27dabdbfdb", "assignee": null, "milestone": null, "draft": 0, "head": "1b27643d7bd192e1d2cc52e36ada0021c3f76bb8", "base": "6e9b07be92905011211d8df7a872fb7c1f2737b2", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1357", "merged_by": null, "auto_merge": null} {"id": 1139440836, "node_id": "PR_kwDOBm6k_c5D6nzE", "number": 1912, "state": "closed", "locked": 0, "title": "Merge 1.0-dev (with initial write API) back into main", "user": {"value": 9599, "label": "simonw"}, "body": "See:\r\n- #1892\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1912.org.readthedocs.build/en/1912/\n\r\n", "created_at": "2022-11-29T19:31:21Z", "updated_at": "2022-11-29T19:39:37Z", "closed_at": "2022-11-29T19:39:36Z", "merged_at": "2022-11-29T19:39:36Z", "merge_commit_sha": "07aad511769da9242260c850e8d975cbd8c29552", "assignee": null, "milestone": null, "draft": 0, "head": "b8fc8e2cd755b9cfc66838bdc1ca9ee87afdce8a", "base": "21f8aab53164a4f096737743d8cc624d2186327a", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1912", "merged_by": null, "auto_merge": null} {"id": 492257405, "node_id": "MDExOlB1bGxSZXF1ZXN0NDkyMjU3NDA1", "number": 174, "state": "closed", "locked": 0, "title": "Much, much faster extract() implementation", "user": {"value": 9599, "label": "simonw"}, "body": "Takes my test down from ten minutes to four seconds. Refs #172.", "created_at": "2020-09-24T07:52:31Z", "updated_at": "2020-09-24T15:44:00Z", "closed_at": "2020-09-24T15:43:56Z", "merged_at": "2020-09-24T15:43:56Z", "merge_commit_sha": "022cdd97a9ddab1a152e23e1e1c42e78c1ed0fa9", "assignee": null, "milestone": null, "draft": 0, "head": "227095ee90e2a92effec6478d3e629a24d3ccfba", "base": "0ca5585fcb834122193e8e7186f926217b23cb8a", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/174", "merged_by": null, "auto_merge": null} {"id": 512736705, "node_id": "MDExOlB1bGxSZXF1ZXN0NTEyNzM2NzA1", "number": 1065, "state": "closed", "locked": 0, "title": "Nav menu plus menu_links() hook", "user": {"value": 9599, "label": "simonw"}, "body": "Closes #1064, refs #690.", "created_at": "2020-10-30T03:40:18Z", "updated_at": "2020-10-30T03:45:17Z", "closed_at": "2020-10-30T03:45:16Z", "merged_at": "2020-10-30T03:45:16Z", "merge_commit_sha": "18a64fbb29271ce607937110bbdb55488c43f4e0", "assignee": null, "milestone": {"value": 6026070, "label": "0.51"}, "draft": 0, "head": "5f118b56afbeff5348acd50a8b87537210e731ee", "base": "1a861be19e326e0c88230a711a1b6536366697d7", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1065", "merged_by": null, "auto_merge": null} {"id": 181755220, "node_id": "MDExOlB1bGxSZXF1ZXN0MTgxNzU1MjIw", "number": 212, "state": "closed", "locked": 0, "title": "New --plugins-dir=plugins/ option", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #211", "created_at": "2018-04-16T05:19:28Z", "updated_at": "2018-04-16T05:22:18Z", "closed_at": "2018-04-16T05:22:01Z", "merged_at": "2018-04-16T05:22:01Z", "merge_commit_sha": "b2955d9065ea019500c7d072bcd9d49d1967f051", "assignee": null, "milestone": null, "draft": 0, "head": "33c6bcadb962457be6b0c7f369826b404e2bcef5", "base": "92396ae5bacedfcb3d7c81319ccdd04483fd7fd4", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/212", "merged_by": null, "auto_merge": null} {"id": 179108961, "node_id": "MDExOlB1bGxSZXF1ZXN0MTc5MTA4OTYx", "number": 192, "state": "closed", "locked": 0, "title": "New ?_shape=objects/object/lists param for JSON API", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #122", "created_at": "2018-04-03T14:02:58Z", "updated_at": "2018-04-03T14:53:00Z", "closed_at": "2018-04-03T14:52:55Z", "merged_at": "2018-04-03T14:52:55Z", "merge_commit_sha": "0abd3abacb309a2bd5913a7a2df4e9256585b1bb", "assignee": null, "milestone": null, "draft": 0, "head": "a759e09e8599e2cf54f6c5ab4d1cf8adf8608793", "base": "dd0566ff8eda7fa2f0d92e51809581fae62cffed", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/192", "merged_by": null, "auto_merge": null} {"id": 1451100029, "node_id": "PR_kwDOBm6k_c5Wfgd9", "number": 2118, "state": "closed", "locked": 0, "title": "New JSON design for query views", "user": {"value": 9599, "label": "simonw"}, "body": "WIP. Refs:\r\n- #2109 \r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--2118.org.readthedocs.build/en/2118/\n\r\n", "created_at": "2023-07-26T23:29:21Z", "updated_at": "2023-08-08T01:47:40Z", "closed_at": "2023-08-08T01:47:39Z", "merged_at": "2023-08-08T01:47:39Z", "merge_commit_sha": "1377a290cd85ba8d3338b1da47c4665ed4c6c625", "assignee": null, "milestone": {"value": 9700784, "label": "Datasette 1.0a3"}, "draft": 0, "head": "8b1dea3c0994d5875e372965eb5ca388ea08fe6a", "base": "08181823990a71ffa5a1b57b37259198eaa43e06", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2118", "merged_by": null, "auto_merge": null} {"id": 1365439700, "node_id": "PR_kwDOBm6k_c5RYvTU", "number": 2080, "state": "closed", "locked": 0, "title": "New View base class", "user": {"value": 9599, "label": "simonw"}, "body": "Refs:\r\n\r\n- #2078\r\n\r\nTODO:\r\n\r\n- [x] Teach router layer how to handle this\r\n- [x] Use it for something\r\n\r\n\r\n----\r\n:books: Documentation preview :books:: https://datasette--2080.org.readthedocs.build/en/2080/\r\n\r\n", "created_at": "2023-05-25T23:22:55Z", "updated_at": "2023-05-26T00:18:45Z", "closed_at": "2023-05-26T00:18:44Z", "merged_at": "2023-05-26T00:18:44Z", "merge_commit_sha": "dda99fc09fb0b5523948f6d481c6c051c1c7b5de", "assignee": null, "milestone": null, "draft": 0, "head": "e990fbc00ef36c022986432e7706b3ad1c9c68a1", "base": "b49fa446d683ddcaf6faf2944dacc0d866bf2d70", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2080", "merged_by": null, "auto_merge": null} {"id": 426891471, "node_id": "MDExOlB1bGxSZXF1ZXN0NDI2ODkxNDcx", "number": 796, "state": "closed", "locked": 0, "title": "New WIP writable canned queries", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #698. Replaces #703\r\n\r\nStill todo:\r\n\r\n- [x] Unit tests\r\n- ~~Figure out `.json` mode~~\r\n- [x] Flash message solution\r\n- ~~CSRF protection~~\r\n- [x] Better error message display on errors\r\n- [x] Documentation\r\n- ~~Maybe widgets?~~ I'll do these later", "created_at": "2020-06-03T00:08:00Z", "updated_at": "2020-06-03T15:16:52Z", "closed_at": "2020-06-03T15:16:50Z", "merged_at": "2020-06-03T15:16:50Z", "merge_commit_sha": "aa82d0370463580f2cb10d9617f1bcbe45cc994a", "assignee": null, "milestone": {"value": 3268330, "label": "Datasette 1.0"}, "draft": 0, "head": "e164939de719b5930ca4972e20490c9b2fd37f6d", "base": "9690ce606823bbfceb0c50d59e03adf7bb1a8475", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/796", "merged_by": null, "auto_merge": null} {"id": 323983732, "node_id": "MDExOlB1bGxSZXF1ZXN0MzIzOTgzNzMy", "number": 579, "state": "open", "locked": 0, "title": "New connection pooling", "user": {"value": 9599, "label": "simonw"}, "body": "See #569", "created_at": "2019-10-02T23:22:19Z", "updated_at": "2019-11-15T22:57:21Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "025b4024b1b43ea034b7fd331c30740165ff75f2", "assignee": null, "milestone": null, "draft": 0, "head": "32cbfd2acd28bcefb97c442ac8e3ee2c07401e19", "base": "a9909c29ccac771c23c2ef22b89d10697b5256b9", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/579", "merged_by": null, "auto_merge": null} {"id": 369348084, "node_id": "MDExOlB1bGxSZXF1ZXN0MzY5MzQ4MDg0", "number": 78, "state": "closed", "locked": 0, "title": "New conversions= feature, refs #77", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2020-01-31T00:02:33Z", "updated_at": "2020-09-22T07:48:29Z", "closed_at": "2020-01-31T00:24:31Z", "merged_at": "2020-01-31T00:24:31Z", "merge_commit_sha": "e8b2b7383bd94659d3b7a857a1414328bc48bc19", "assignee": null, "milestone": null, "draft": 0, "head": "58190d67821aaa57c8ca0320a08e3691d6e27344", "base": "59a2e8ebdcbde7e6fb091b0556713ca5a20ea4e7", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/78", "merged_by": null, "auto_merge": null} {"id": 511868153, "node_id": "MDExOlB1bGxSZXF1ZXN0NTExODY4MTUz", "number": 1060, "state": "closed", "locked": 0, "title": "New explicit versioning mechanism", "user": {"value": 9599, "label": "simonw"}, "body": "- Remove all references to versioneer\r\n- Re-implement versioning to use a static string baked into the repo\r\n- Ensure that string is output by `datasette --version` and `/-/versions`\r\n\r\nRefs #1054", "created_at": "2020-10-28T22:14:55Z", "updated_at": "2020-10-29T03:38:17Z", "closed_at": "2020-10-29T03:38:16Z", "merged_at": "2020-10-29T03:38:16Z", "merge_commit_sha": "cefd058c1c216a184bb63c79abba66893977c18e", "assignee": null, "milestone": {"value": 6026070, "label": "0.51"}, "draft": 0, "head": "4725d46780783e9875bde5957f053ba19cf92ff0", "base": "abcf0222496d8148b2e585ffa0ff192270a04b06", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1060", "merged_by": null, "auto_merge": null} {"id": 782105066, "node_id": "PR_kwDOBm6k_c4unfnq", "number": 1512, "state": "closed", "locked": 0, "title": "New pattern for async view classes", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #878 - starting out with the new `AsyncBase` class implementing a pytest-inspired `asyncio` parallel execution mechanism.", "created_at": "2021-11-16T21:55:44Z", "updated_at": "2021-11-17T01:39:54Z", "closed_at": "2021-11-17T01:39:44Z", "merged_at": null, "merge_commit_sha": "fb57d4474cb1fdaef260e244b1b6f470f1992e40", "assignee": null, "milestone": null, "draft": 1, "head": "8f757da0750fe7f27b4ed3839bc3ef3650832ad9", "base": "0156c6b5e52d541e93f0d68e9245f20ae83bc933", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1512", "merged_by": null, "auto_merge": null} {"id": 290897104, "node_id": "MDExOlB1bGxSZXF1ZXN0MjkwODk3MTA0", "number": 518, "state": "closed", "locked": 0, "title": "Port Datasette from Sanic to ASGI + Uvicorn", "user": {"value": 9599, "label": "simonw"}, "body": "Most of the code here was fleshed out in comments on #272 (Port Datasette to ASGI) - this pull request will track the final pieces:\r\n\r\n- [x] Update test harness to more correctly simulate the `raw_path` issue\r\n- [x] Use `raw_path` so table names containing `/` can work correctly\r\n- [x] Bug: JSON not served with correct content-type\r\n- [x] Get ?_trace=1 working again\r\n- [x] Replacement for `@app.listener(\"before_server_start\")`\r\n- [x] Bug: `/fixtures/table%2Fwith%2Fslashes.csv?_format=json` downloads as CSV\r\n- [x] Replace Sanic request and response objects with my own classes, so I can remove Sanic dependency\r\n- [x] Final code tidy-up before merging to master", "created_at": "2019-06-23T15:18:42Z", "updated_at": "2019-06-24T13:42:50Z", "closed_at": "2019-06-24T03:13:09Z", "merged_at": "2019-06-24T03:13:09Z", "merge_commit_sha": "ba8db9679f3bd2454c9e76e7e6c352126848b57a", "assignee": {"value": 9599, "label": "simonw"}, "milestone": {"value": 3268330, "label": "Datasette 1.0"}, "draft": 0, "head": "b794554a26ddc81bd772c4422d80d5ee863e92b0", "base": "35429f90894321eda7f2db31b9ea7976f31f73ac", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/518", "merged_by": null, "auto_merge": null}