{"id": 431478724, "node_id": "MDExOlB1bGxSZXF1ZXN0NDMxNDc4NzI0", "number": 819, "state": "closed", "locked": 0, "title": "register_routes() plugin hook", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #215", "created_at": "2020-06-09T01:20:44Z", "updated_at": "2020-06-09T03:12:08Z", "closed_at": "2020-06-09T03:12:07Z", "merged_at": "2020-06-09T03:12:07Z", "merge_commit_sha": "f5e79adf26d0daa3831e3fba022f1b749a9efdee", "assignee": null, "milestone": {"value": 5512395, "label": "Datasette 0.44"}, "draft": 0, "head": "18127f074efc1b0148d1098da063e51ccea7797c", "base": "647c5ff0f3e8140f40d7f41f0874ce4e1f4df65c", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/819", "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": 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": 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": 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": 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": 468484031, "node_id": "MDExOlB1bGxSZXF1ZXN0NDY4NDg0MDMx", "number": 941, "state": "closed", "locked": 0, "title": "Run CI on GitHub Actions, not Travis", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #940", "created_at": "2020-08-16T19:13:39Z", "updated_at": "2020-08-18T05:09:36Z", "closed_at": "2020-08-18T05:09:35Z", "merged_at": "2020-08-18T05:09:35Z", "merge_commit_sha": "5e0b72247ecab4ce0fcec599b77a83d73a480872", "assignee": null, "milestone": null, "draft": 0, "head": "f5a72e11b632b01acc41c07f6f4cfffa1a7ed14e", "base": "52eabb019d4051084b21524bd0fd9c2731126985", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/941", "merged_by": null, "auto_merge": null} {"id": 481616704, "node_id": "MDExOlB1bGxSZXF1ZXN0NDgxNjE2NzA0", "number": 151, "state": "closed", "locked": 0, "title": "Tracer mechanism for seeing underlying SQL", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #150. Needs tests and documentation, including for the new `db.execute()` and `db.executescript()` methods.", "created_at": "2020-09-07T19:46:43Z", "updated_at": "2020-09-07T21:57:00Z", "closed_at": "2020-09-07T21:57:00Z", "merged_at": "2020-09-07T21:57:00Z", "merge_commit_sha": "cf2cb244faf992118f34aa196387a4ef8b39a20f", "assignee": null, "milestone": null, "draft": 0, "head": "dc82bf371911d01ac140f40ea99d06d2daee507e", "base": "3e87500e1561f5c4e105cd026d33e0f715cc7dea", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/151", "merged_by": null, "auto_merge": null} {"id": 490607949, "node_id": "MDExOlB1bGxSZXF1ZXN0NDkwNjA3OTQ5", "number": 161, "state": "closed", "locked": 0, "title": "table.transform() method", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #114\r\n\r\n- [x] Ability to change the primary key\r\n- [x] Support for changing default value for columns\r\n- [x] Support for changing `NOT NULL` status of columns\r\n- [x] Support for copying existing foreign keys and removing them\r\n- Support for `conversions=` parameter\r\n- [x] Detailed documentation\r\n- [x] `PRAGMA foreign_keys` stuff", "created_at": "2020-09-21T23:16:59Z", "updated_at": "2020-09-22T07:48:24Z", "closed_at": "2020-09-22T04:20:02Z", "merged_at": "2020-09-22T04:20:02Z", "merge_commit_sha": "987dd123f2ac43c5ab66d69e59d454fe09660606", "assignee": null, "milestone": {"value": 5897911, "label": "2.20"}, "draft": 0, "head": "dc3eb9c313502832c07f4de889aa60c373f45b52", "base": "ef882986d07f157b6bcc6be3d7b64270fda3e523", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/161", "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": 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": 498104830, "node_id": "MDExOlB1bGxSZXF1ZXN0NDk4MTA0ODMw", "number": 994, "state": "closed", "locked": 0, "title": "Run tests against Python 3.9", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2020-10-05T20:40:13Z", "updated_at": "2020-10-09T16:22:51Z", "closed_at": "2020-10-09T16:22:50Z", "merged_at": "2020-10-09T16:22:50Z", "merge_commit_sha": "6e091b14b651d67e0ff41a353d36bbeb1d8ba235", "assignee": null, "milestone": null, "draft": 0, "head": "ecba5d257ef4218a98b5903d856a4d7c0382f43d", "base": "e807c4eac0e85ae15e013379b0dde1d797f1377d", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/994", "merged_by": null, "auto_merge": null} {"id": 499603359, "node_id": "MDExOlB1bGxSZXF1ZXN0NDk5NjAzMzU5", "number": 184, "state": "closed", "locked": 0, "title": "Test against Python 3.9", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2020-10-08T01:37:05Z", "updated_at": "2020-10-08T01:44:06Z", "closed_at": "2020-10-08T01:44:06Z", "merged_at": "2020-10-08T01:44:06Z", "merge_commit_sha": "8e91de8e4edf6c8abeeccdf084b8870fff40a51a", "assignee": null, "milestone": null, "draft": 0, "head": "975c05b6dde9feebcdecabc047d47122ebcfdf84", "base": "7f4fe9190c1df7f0e72f9d7040327a43cf252c48", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/184", "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": 510956134, "node_id": "MDExOlB1bGxSZXF1ZXN0NTEwOTU2MTM0", "number": 190, "state": "closed", "locked": 0, "title": "Progress bar for sqlite-utils insert command", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #173", "created_at": "2020-10-27T18:08:53Z", "updated_at": "2020-10-27T18:16:03Z", "closed_at": "2020-10-27T18:16:03Z", "merged_at": "2020-10-27T18:16:03Z", "merge_commit_sha": "f99a23652910b03ac4669bbbb35a9b484451aabb", "assignee": null, "milestone": null, "draft": 0, "head": "62d678122a251812cd650845705ca7b9efcef86d", "base": "c7e5dd64513c0ec2b2df4c51c8df924c282417f9", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/190", "merged_by": null, "auto_merge": null} {"id": 511005542, "node_id": "MDExOlB1bGxSZXF1ZXN0NTExMDA1NTQy", "number": 1056, "state": "closed", "locked": 0, "title": "Radical new colour scheme and base styles, courtesy of @natbat", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2020-10-27T19:31:48Z", "updated_at": "2020-10-27T19:39:57Z", "closed_at": "2020-10-27T19:39:56Z", "merged_at": "2020-10-27T19:39:56Z", "merge_commit_sha": "e5f5034bcdc71e4bc62a6a155ca60eb41910c335", "assignee": null, "milestone": {"value": 6026070, "label": "0.51"}, "draft": 0, "head": "a7b2aabd5148c0ee382b583de68a4f0538f7dfb1", "base": "26bb4a268127da2c38f4241abe45444b2a6f7874", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1056", "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": 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": 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": 513106026, "node_id": "MDExOlB1bGxSZXF1ZXN0NTEzMTA2MDI2", "number": 1069, "state": "closed", "locked": 0, "title": "load_template() plugin hook", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1042", "created_at": "2020-10-30T15:59:45Z", "updated_at": "2020-10-30T17:47:20Z", "closed_at": "2020-10-30T17:47:19Z", "merged_at": "2020-10-30T17:47:19Z", "merge_commit_sha": "81dea4b07ab2b6f4eaaf248307d2b588472054a1", "assignee": null, "milestone": {"value": 6026070, "label": "0.51"}, "draft": 0, "head": "92f3840882a24da29d0d4073e5ed9d77fce438fc", "base": "fcf43589eb6a1f1d0432772a639fd35711c48e0c", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1069", "merged_by": null, "auto_merge": null} {"id": 515014883, "node_id": "MDExOlB1bGxSZXF1ZXN0NTE1MDE0ODgz", "number": 195, "state": "closed", "locked": 0, "title": "table.search() improvements plus sqlite-utils search command", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #192. Still needs tests.", "created_at": "2020-11-03T22:02:08Z", "updated_at": "2020-11-06T18:30:49Z", "closed_at": "2020-11-06T18:30:42Z", "merged_at": "2020-11-06T18:30:42Z", "merge_commit_sha": "d411fba1f4124047429ac9d1175a04b36bf5bee9", "assignee": null, "milestone": null, "draft": 0, "head": "973d94d44f27d35d856fe1cc822f9d5d40e4b5e6", "base": "59d8689ed0e6e042d99fd650896def680ca3c657", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/195", "merged_by": null, "auto_merge": null} {"id": 518988879, "node_id": "MDExOlB1bGxSZXF1ZXN0NTE4OTg4ODc5", "number": 1085, "state": "closed", "locked": 0, "title": "Use FTS4 in fixtures", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1081", "created_at": "2020-11-11T06:44:30Z", "updated_at": "2020-11-12T00:02:59Z", "closed_at": "2020-11-12T00:02:58Z", "merged_at": "2020-11-12T00:02:58Z", "merge_commit_sha": "e8e0a6f284ca953b2980186c4356594c07bd1929", "assignee": null, "milestone": null, "draft": 0, "head": "51e7651c66aaf1804274ce68a6b5218bbba76338", "base": "2a981e2ac1d13125973904b777d00ea75e8df4e6", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1085", "merged_by": null, "auto_merge": null} {"id": 521276296, "node_id": "MDExOlB1bGxSZXF1ZXN0NTIxMjc2Mjk2", "number": 1097, "state": "closed", "locked": 0, "title": "Use f-strings", "user": {"value": 9599, "label": "simonw"}, "body": "Since Datasette now requires Python 3.6, how about some f-strings?\r\n\r\nI ran this in the `datasette` root checkout:\r\n```\r\npip install flynt\r\nflynt .\r\nblack .\r\n```", "created_at": "2020-11-15T23:12:36Z", "updated_at": "2020-11-15T23:24:24Z", "closed_at": "2020-11-15T23:24:23Z", "merged_at": "2020-11-15T23:24:23Z", "merge_commit_sha": "30e64c8d3b3728a86c3ca42a75322cc3feb5b0c8", "assignee": null, "milestone": null, "draft": 0, "head": "e89211d21eebb7a2e4588b06927da84416e3a555", "base": "6fd35be64de221eba4945ca24e8e1678f6142a73", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1097", "merged_by": null, "auto_merge": null} {"id": 529783275, "node_id": "MDExOlB1bGxSZXF1ZXN0NTI5NzgzMjc1", "number": 1117, "state": "closed", "locked": 0, "title": "Support for generated columns", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1116. My first attempt at this worked on my laptop but broke in CI, so I'm going to iterate on it in a pull request instead.", "created_at": "2020-11-30T20:10:46Z", "updated_at": "2020-11-30T22:23:19Z", "closed_at": "2020-11-30T21:29:58Z", "merged_at": "2020-11-30T21:29:58Z", "merge_commit_sha": "461670a0b87efa953141b449a9a261919864ceb3", "assignee": null, "milestone": null, "draft": 0, "head": "ccdf2c650278b8b9465d3a2d7c916f3bb06c4f01", "base": "dea3c508b39528e566d711c38a467b3d372d220b", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1117", "merged_by": null, "auto_merge": null} {"id": 529887861, "node_id": "MDExOlB1bGxSZXF1ZXN0NTI5ODg3ODYx", "number": 1120, "state": "closed", "locked": 0, "title": "generated_columns table in fixtures.py", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1119", "created_at": "2020-12-01T00:17:19Z", "updated_at": "2020-12-01T00:28:03Z", "closed_at": "2020-12-01T00:28:02Z", "merged_at": "2020-12-01T00:28:02Z", "merge_commit_sha": "17cbbb1f7f230b39650afac62dd16476626001b5", "assignee": null, "milestone": null, "draft": 0, "head": "ddad8db2cc952eaf4f66f42324ccece115627b02", "base": "461670a0b87efa953141b449a9a261919864ceb3", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1120", "merged_by": null, "auto_merge": null} {"id": 537791675, "node_id": "MDExOlB1bGxSZXF1ZXN0NTM3NzkxNjc1", "number": 208, "state": "closed", "locked": 0, "title": "sqlite-utils analyze-tables command and table.analyze_column() method", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #207\r\n\r\n- [x] Improve design of CLI output\r\n- [x] Truncate long values in least/most common\r\n- [x] Add a `-c` column selection option\r\n- [x] Tests\r\n- [x] Documentation", "created_at": "2020-12-12T05:27:49Z", "updated_at": "2020-12-13T07:20:16Z", "closed_at": "2020-12-13T07:20:12Z", "merged_at": "2020-12-13T07:20:12Z", "merge_commit_sha": "69a121e08847acbf95abf0c2df1759fc73dc81b8", "assignee": null, "milestone": null, "draft": 0, "head": "95a966bb6216215d40d0016d673a28b04428db43", "base": "c5f4f0f70ce394dfec6054c3c5aaedf330887093", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/208", "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": 560760145, "node_id": "MDExOlB1bGxSZXF1ZXN0NTYwNzYwMTQ1", "number": 1204, "state": "open", "locked": 0, "title": "WIP: Plugin includes", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1191\r\n\r\nNext steps:\r\n\r\n- [ ] Get comfortable that this pattern is the right way to go\r\n- [ ] Implement it for all of the other pages, not just the table page\r\n- [ ] Add a new set of plugin tests that exercise ALL of these new hook locations\r\n- [ ] Document, then ship", "created_at": "2021-01-25T03:59:06Z", "updated_at": "2021-12-17T07:10:49Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "98f06a766317a40035962416cf3211d7a374866a", "assignee": null, "milestone": null, "draft": 1, "head": "05258469ae39bcaad17beb57c5b7eeab0d58a589", "base": "07e163561592c743e4117f72102fcd350a600909", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1204", "merged_by": null, "auto_merge": null} {"id": 560831638, "node_id": "MDExOlB1bGxSZXF1ZXN0NTYwODMxNjM4", "number": 1206, "state": "closed", "locked": 0, "title": "Release 0.54", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1201", "created_at": "2021-01-25T06:45:47Z", "updated_at": "2021-01-25T17:33:30Z", "closed_at": "2021-01-25T17:33:29Z", "merged_at": "2021-01-25T17:33:29Z", "merge_commit_sha": "0b9ac1b2e9c855f1b823a06a898891da87c720ef", "assignee": null, "milestone": null, "draft": 0, "head": "571476d2cf8f7d7eac6098de8557264e69cac43f", "base": "a5ede3cdd455e2bb1a1fb2f4e1b5a9855caf5179", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1206", "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": 573147168, "node_id": "MDExOlB1bGxSZXF1ZXN0NTczMTQ3MTY4", "number": 233, "state": "closed", "locked": 0, "title": "Run tests against Ubuntu, macOS and Windows", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #232", "created_at": "2021-02-14T20:11:02Z", "updated_at": "2021-02-14T20:39:54Z", "closed_at": "2021-02-14T20:39:54Z", "merged_at": "2021-02-14T20:39:54Z", "merge_commit_sha": "f51a1f6c3cb2929bcf79cb4efe3b2a9886d9c25c", "assignee": null, "milestone": null, "draft": 0, "head": "deb01a8913441e7fedb53c52a3a9fdff274ddbd2", "base": "320f3ac33a83b32f89559ef0c162b7eca428a278", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/233", "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": 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": 598213565, "node_id": "MDExOlB1bGxSZXF1ZXN0NTk4MjEzNTY1", "number": 1271, "state": "open", "locked": 0, "title": "Use SQLite conn.interrupt() instead of sqlite_timelimit()", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1270, #1268, #1249\r\n\r\nBefore merging this I need to do some more testing (to make sure that expensive queries really are properly cancelled). I also need to delete a bunch of code relating to the old mechanism of cancelling queries.\r\n\r\n[See comment below: this doesn't actually cancel the query due to a thread-local confusion]", "created_at": "2021-03-22T17:34:20Z", "updated_at": "2021-03-22T21:49:27Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "a4fd7e5a761523881c031b4fee266a366e1c97bd", "assignee": null, "milestone": null, "draft": 1, "head": "fb2ad7ada0b86a7fe4a576fe23236757c41eb05e", "base": "c4f1ec7f33fd7d5b93f0f895dafb5351cc3bfc5b", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1271", "merged_by": null, "auto_merge": null} {"id": 608323028, "node_id": "MDExOlB1bGxSZXF1ZXN0NjA4MzIzMDI4", "number": 1290, "state": "closed", "locked": 0, "title": "Use pytest-xdist to speed up tests", "user": {"value": 9599, "label": "simonw"}, "body": "Closes #1289, refs #1212.", "created_at": "2021-04-03T03:34:36Z", "updated_at": "2021-04-03T03:42:29Z", "closed_at": "2021-04-03T03:42:28Z", "merged_at": "2021-04-03T03:42:28Z", "merge_commit_sha": "0a7621f96f8ad14da17e7172e8a7bce24ef78966", "assignee": null, "milestone": null, "draft": 0, "head": "2fb1e4284f1f0f6aaba7e889a6713c0f96e802e1", "base": "59ef4a20cba1533bc347378415f4ffcd025f32c8", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1290", "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": 655684477, "node_id": "MDExOlB1bGxSZXF1ZXN0NjU1Njg0NDc3", "number": 1346, "state": "closed", "locked": 0, "title": "Re-display user's query with an error message if an error occurs", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #619", "created_at": "2021-05-28T02:04:20Z", "updated_at": "2021-06-02T03:46:21Z", "closed_at": "2021-06-02T03:46:21Z", "merged_at": "2021-06-02T03:46:21Z", "merge_commit_sha": "9552414e1f968c6fc704031cec349c05e6bc2371", "assignee": null, "milestone": null, "draft": 0, "head": "3bffc35ff9137a75024d2a8ef44828a50ec91071", "base": "7b106e106000713bbee31b34d694b3dadbd4818c", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1346", "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": 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": 671014751, "node_id": "MDExOlB1bGxSZXF1ZXN0NjcxMDE0NzUx", "number": 273, "state": "closed", "locked": 0, "title": "sqlite-utils memory command for directly querying CSV/JSON data", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #272. Initial implementation only does CSV data, still needs:\r\n\r\n- [x] Implement `--save`\r\n- [x] Add `--dump` to the documentation\r\n- [x] Add `--attach` example to the documentation\r\n- [x] Replace `:memory:` in documentation", "created_at": "2021-06-16T05:04:58Z", "updated_at": "2021-06-18T15:01:17Z", "closed_at": "2021-06-18T15:00:52Z", "merged_at": "2021-06-18T15:00:52Z", "merge_commit_sha": "42ec59d8ee3fcfb8ac1affb772aed43b6e2a7381", "assignee": null, "milestone": null, "draft": 0, "head": "df7a37bdb730bb863fa29758f6fb35f809fa0dd0", "base": "78aebb6479420217454747870737bc593a259abc", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/273", "merged_by": null, "auto_merge": null} {"id": 677554929, "node_id": "MDExOlB1bGxSZXF1ZXN0Njc3NTU0OTI5", "number": 293, "state": "closed", "locked": 0, "title": "Test against Python 3.10-dev", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2021-06-25T01:40:39Z", "updated_at": "2021-10-13T21:49:33Z", "closed_at": "2021-10-13T21:49:33Z", "merged_at": null, "merge_commit_sha": "0f64d20b044ecb86d9e4e5843f9590006d2f39c2", "assignee": null, "milestone": null, "draft": 0, "head": "ae0f46a78958c0118e98c2ab18bd1b57a0478326", "base": "747be6057d09a4e5d9d726e29d5cf99b10c59dea", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/293", "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": 700944644, "node_id": "MDExOlB1bGxSZXF1ZXN0NzAwOTQ0NjQ0", "number": 303, "state": "closed", "locked": 0, "title": "sqlite-utils convert command and db[table].convert(...) method", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #251, #302.\r\n\r\n- [x] Get recipes working\r\n- [x] Document recipes\r\n- [x] Implement `db[table].convert(...)` method\r\n- [x] Add tests for recipes that use the new Python method\r\n- [x] Implement `db[table].convert(..., multi=True)` mechanism\r\n- [x] Documentation for `db[table].convert(...)`\r\n- [x] Refactor `sqlite-utils convert` to use the new method", "created_at": "2021-08-01T16:52:42Z", "updated_at": "2021-08-02T04:47:42Z", "closed_at": "2021-08-02T04:47:39Z", "merged_at": "2021-08-02T04:47:39Z", "merge_commit_sha": "5ec6686153e29ae10d4921a1ad4c841f192f20e2", "assignee": null, "milestone": null, "draft": 0, "head": "4c3bf9730542f1e49cbf11a61dbdb7fd621453df", "base": "c7e8d72be9fe8fe0811f685a18eebc637662d41b", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/303", "merged_by": null, "auto_merge": null} {"id": 702422263, "node_id": "MDExOlB1bGxSZXF1ZXN0NzAyNDIyMjYz", "number": 1418, "state": "closed", "locked": 0, "title": "Spelling corrections plus CI job for codespell", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1417.", "created_at": "2021-08-03T16:21:19Z", "updated_at": "2021-08-03T16:36:39Z", "closed_at": "2021-08-03T16:36:38Z", "merged_at": "2021-08-03T16:36:38Z", "merge_commit_sha": "2208c3c68e552d343e6a2872ff6e559fca9d1b38", "assignee": null, "milestone": null, "draft": 0, "head": "532170fc606df04986104aacbd67b920c5fa0af9", "base": "54b6e96ee8aa553b6671e341a1944f93f3fb89c3", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1418", "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": 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": 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": 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": 729731441, "node_id": "MDExOlB1bGxSZXF1ZXN0NzI5NzMxNDQx", "number": 326, "state": "closed", "locked": 0, "title": "Test against 3.10-dev", "user": {"value": 9599, "label": "simonw"}, "body": "This tests against the latest 3.10 RC, https://www.python.org/downloads/release/python-3100rc2/", "created_at": "2021-09-08T15:01:15Z", "updated_at": "2021-10-13T21:49:28Z", "closed_at": "2021-10-13T21:49:28Z", "merged_at": null, "merge_commit_sha": "c563260408e1b802cbbc81ec7c1e398350a1ca3a", "assignee": null, "milestone": null, "draft": 0, "head": "078a08765d8aefa5ce376a03b2643d4ebe1aa57e", "base": "77c240df56068341561e95e4a412cbfa24dc5bc7", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/326", "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": 757797315, "node_id": "PR_kwDOCGYnMM4tKxHD", "number": 330, "state": "closed", "locked": 0, "title": "Test against Python 3.10", "user": {"value": 9599, "label": "simonw"}, "body": null, "created_at": "2021-10-13T21:50:22Z", "updated_at": "2021-11-15T02:59:29Z", "closed_at": "2021-10-13T22:25:05Z", "merged_at": "2021-10-13T22:25:05Z", "merge_commit_sha": "fda4dad23a0494890267fbe8baf179e2b56ee914", "assignee": null, "milestone": null, "draft": 0, "head": "fc3de90963b6b097826d36f6a24c46267659dcf2", "base": "718a8f61bcaed39c04d5d223104056213f8c8516", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/330", "merged_by": null, "auto_merge": null} {"id": 758569502, "node_id": "PR_kwDOBm6k_c4tNtoe", "number": 1490, "state": "closed", "locked": 0, "title": "Upgrade to httpx 0.20", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1488 ", "created_at": "2021-10-14T17:51:05Z", "updated_at": "2021-10-14T18:03:45Z", "closed_at": "2021-10-14T18:03:44Z", "merged_at": "2021-10-14T18:03:44Z", "merge_commit_sha": "b267b5775436577a91a9f9655143908aecff05da", "assignee": null, "milestone": null, "draft": 0, "head": "e0332d1f4788a561492965a09ef83fe122fd3d8c", "base": "2a8c6690399ee832ee62aafdede1794f5945d911", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1490", "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": 791153878, "node_id": "PR_kwDOCGYnMM4vKAzW", "number": 347, "state": "open", "locked": 0, "title": "Test against pysqlite3 running SQLite 3.37", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #346 and #344.", "created_at": "2021-11-29T23:17:57Z", "updated_at": "2021-12-11T01:02:19Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "f70a61e58ae62e53af74ab48d742bdc335131fbd", "assignee": null, "milestone": null, "draft": 0, "head": "1a7ef2fe2064ace01d5535fb771f941296fb642a", "base": "213a0ff177f23a35f3b235386366ff132eb879f1", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/347", "merged_by": null, "auto_merge": null} {"id": 801798514, "node_id": "PR_kwDOBm6k_c4vynly", "number": 1554, "state": "closed", "locked": 0, "title": "TableView refactor", "user": {"value": 9599, "label": "simonw"}, "body": "I'm starting a PR with almost nothing in it so I can use the GitHub code commenting feature to add a bunch of comments to the code I intend to refactor.\r\n\r\nRelated issues:\r\n\r\n- #617 \r\n- #715 \r\n- #870\r\n- #1518", "created_at": "2021-12-13T23:16:04Z", "updated_at": "2021-12-20T23:52:11Z", "closed_at": "2021-12-20T23:52:04Z", "merged_at": null, "merge_commit_sha": "a68545f9a4c3b3a68259be5c03abfc9ad7710875", "assignee": null, "milestone": null, "draft": 0, "head": "1d08b46412410837f987c606b2307a121fa2641a", "base": "a6ff123de5464806441f6a6f95145c9a83b7f20b", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1554", "merged_by": null, "auto_merge": null} {"id": 804924636, "node_id": "PR_kwDOBm6k_c4v-izc", "number": 1559, "state": "closed", "locked": 0, "title": "filters_from_request plugin hook, now used in TableView", "user": {"value": 9599, "label": "simonw"}, "body": "New plugin hook, refs #473\r\n\r\nUsed it to extract the logic from TableView that handles _search and\r\n_through and _where - refs #1518", "created_at": "2021-12-16T23:59:33Z", "updated_at": "2021-12-17T23:09:41Z", "closed_at": "2021-12-17T19:02:15Z", "merged_at": "2021-12-17T19:02:15Z", "merge_commit_sha": "aa7f0037a46eb76ae6fe9bf2a1f616c58738ecdf", "assignee": null, "milestone": null, "draft": 0, "head": "71af58d9392d42f45506cbc2370c1e9994126f63", "base": "0663d5525cc41e9260ac7d1f6386d3a6eb5ad2a9", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1559", "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": 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": 817257851, "node_id": "PR_kwDOCGYnMM4wtl17", "number": 377, "state": "closed", "locked": 0, "title": "`sqlite-utils bulk` command", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #375\r\n\r\nStill needs:\r\n\r\n- [x] Refactor `@insert_upsert_options` so that it doesn't duplicate `@import_options`\r\n- [x] Tests\r\n- [x] Documentation\r\n- [x] Try it against a really big file", "created_at": "2022-01-10T05:34:24Z", "updated_at": "2022-01-11T02:10:57Z", "closed_at": "2022-01-11T02:10:54Z", "merged_at": "2022-01-11T02:10:54Z", "merge_commit_sha": "129141572f249ea290e2a075437e2ebaad215859", "assignee": null, "milestone": {"value": 7558727, "label": "3.21"}, "draft": 0, "head": "f4ea0d32c0543373eefaa9b9f3911eb07549eecb", "base": "b6dad08a8389736b7e960cfe9bc719cfc21a98f5", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/377", "merged_by": null, "auto_merge": null} {"id": 838724548, "node_id": "PR_kwDOBm6k_c4x_evE", "number": 1622, "state": "closed", "locked": 0, "title": "Test against Python 3.11-dev", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1621", "created_at": "2022-02-02T21:39:38Z", "updated_at": "2022-02-02T21:58:53Z", "closed_at": "2022-02-02T21:58:53Z", "merged_at": "2022-02-02T21:58:53Z", "merge_commit_sha": "a9d8824617268c4d214dd3be2174ac452044f737", "assignee": null, "milestone": null, "draft": 0, "head": "fbaf317ab723482e971688cda72ce51825bcf4d7", "base": "8d5779acf0041cfd0db7f68f468419f9008b86ec", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1622", "merged_by": null, "auto_merge": null} {"id": 838755826, "node_id": "PR_kwDOBm6k_c4x_mXy", "number": 1626, "state": "open", "locked": 0, "title": "Try test suite against macOS and Windows", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1625", "created_at": "2022-02-02T22:26:51Z", "updated_at": "2022-02-03T01:22:44Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "83958f26a8458a108acb7c3c0a1c8aacb777586a", "assignee": null, "milestone": null, "draft": 0, "head": "4b4d0e1ff9e2ee998cbd71abd5f5806f25444ed9", "base": "b5e6b1a9e1332fca3effe45d55dd06ee4249f163", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1626", "merged_by": null, "auto_merge": null} {"id": 872324754, "node_id": "PR_kwDOBm6k_c4z_p6S", "number": 1648, "state": "closed", "locked": 0, "title": "Use dash encoding for table names and row primary keys in URLs", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1439.\r\n\r\n- [x] Build `dash_encode` / `dash_decode` functions\r\n- [x] Use dash encoding for row primary keys\r\n- [x] Use dash encoding for `?_next=` pagination tokens\r\n- [x] Use dash encoding for table names in URLs\r\n- [x] Use dash encoding for database name\r\n- ~~Implement redirects from previous `%` URLs that replace those with `-`~~ - separate issue: #1650", "created_at": "2022-03-05T19:50:45Z", "updated_at": "2022-03-07T15:38:30Z", "closed_at": "2022-03-07T15:38:30Z", "merged_at": "2022-03-07T15:38:29Z", "merge_commit_sha": "1baa030eca375f839f3471237547ab403523e643", "assignee": null, "milestone": null, "draft": 0, "head": "32548b88fdb413429d960966decba8f6b3889190", "base": "5010d1359b9e9db90a5a69a3ca22d12862893e00", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1648", "merged_by": null, "auto_merge": null} {"id": 880373442, "node_id": "PR_kwDOBm6k_c40eW7C", "number": 1659, "state": "closed", "locked": 0, "title": "Tilde encoding", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1657", "created_at": "2022-03-15T16:19:07Z", "updated_at": "2022-03-15T18:01:58Z", "closed_at": "2022-03-15T18:01:57Z", "merged_at": "2022-03-15T18:01:57Z", "merge_commit_sha": "a35393b29cfb5b8abdc6a94e577af1c9a5c13652", "assignee": null, "milestone": null, "draft": 0, "head": "99b8263806e81028af169f400352c26e5473ab44", "base": "c10cd48baf106659bf3f129ad7bfb2226be73821", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1659", "merged_by": null, "auto_merge": null} {"id": 882973374, "node_id": "PR_kwDOBm6k_c40oRq-", "number": 1664, "state": "closed", "locked": 0, "title": "Remove hashed URL mode", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1661.", "created_at": "2022-03-17T23:19:10Z", "updated_at": "2022-03-19T00:12:04Z", "closed_at": "2022-03-19T00:12:04Z", "merged_at": "2022-03-19T00:12:03Z", "merge_commit_sha": "d4f60c2388c01ddce1b16f95c16d310e037c9912", "assignee": null, "milestone": null, "draft": 0, "head": "eae91fe8c2934c8674f5202b2d9f85b6f674c410", "base": "30e5f0e67c38054a8087a2a4eae3fc4d1779af90", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1664", "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": 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": 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": 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": 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": 1029360106, "node_id": "PR_kwDOCGYnMM49Wsnq", "number": 465, "state": "closed", "locked": 0, "title": "beanbag-docutils>=2.0", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #464", "created_at": "2022-08-17T22:41:39Z", "updated_at": "2022-08-17T23:38:07Z", "closed_at": "2022-08-17T23:38:02Z", "merged_at": "2022-08-17T23:38:02Z", "merge_commit_sha": "f8ffac8787e299a62c99ed1ce914cd5ace84ad94", "assignee": null, "milestone": null, "draft": 0, "head": "bb90d3326815a041512b40bf0cf53b3ace06cd67", "base": "45e24deffea042b5db7ab84cd1eb63b3ed9bb9da", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/465", "merged_by": null, "auto_merge": null} {"id": 1029373779, "node_id": "PR_kwDOCGYnMM49Wv9T", "number": 466, "state": "closed", "locked": 0, "title": "Use Read the Docs action v1 (#463)", "user": {"value": 9599, "label": "simonw"}, "body": "Read the Docs repository was renamed from `readthedocs/readthedocs-preview` to `readthedocs/actions/`. Now, the `preview` action is under `readthedocs/actions/preview` and is tagged as `v1`", "created_at": "2022-08-17T23:11:50Z", "updated_at": "2022-08-17T23:11:54Z", "closed_at": "2022-08-17T23:11:54Z", "merged_at": "2022-08-17T23:11:54Z", "merge_commit_sha": "bb90d3326815a041512b40bf0cf53b3ace06cd67", "assignee": null, "milestone": null, "draft": 0, "head": "83e7339255e811c62e6db8498c483c44a84d0f28", "base": "72655adabc596a9eed43cc11c07177a390791068", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/466", "merged_by": null, "auto_merge": null} {"id": 1034485141, "node_id": "PR_kwDOCGYnMM49qP2V", "number": 468, "state": "closed", "locked": 0, "title": "db[table].create(..., transform=True) and create-table --transform", "user": {"value": 9599, "label": "simonw"}, "body": "Work in progress. Still needs documentation and tests (and to cover more cases of things that might have changed).\r\n\r\nRefs:\r\n- #467\r\n\r\n\r\n----\r\n:books: Documentation preview :books:: https://sqlite-utils--468.org.readthedocs.build/en/468/\r\n\r\n", "created_at": "2022-08-23T17:27:58Z", "updated_at": "2022-08-27T23:17:55Z", "closed_at": "2022-08-27T23:17:55Z", "merged_at": "2022-08-27T23:17:55Z", "merge_commit_sha": "104f37fa4d2e7e5999c1d829267b62c737f74d3e", "assignee": null, "milestone": {"value": 8355157, "label": "3.29"}, "draft": 0, "head": "2f6a64f61d561df821d737719941c678dcb1a03c", "base": "c5f8a2eb1a81a18b52825cc649112f71fe419b12", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/468", "merged_by": null, "auto_merge": null} {"id": 1034576054, "node_id": "PR_kwDOBm6k_c49qmC2", "number": 1792, "state": "closed", "locked": 0, "title": "Test `--load-extension` in GitHub Actions", "user": {"value": 9599, "label": "simonw"}, "body": "Refs:\r\n- #1789\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1792.org.readthedocs.build/en/1792/\n\r\n", "created_at": "2022-08-23T18:43:29Z", "updated_at": "2022-08-24T00:11:46Z", "closed_at": "2022-08-24T00:11:45Z", "merged_at": "2022-08-24T00:11:45Z", "merge_commit_sha": "ba35105eee2d3ba620e4f230028a02b2e2571df2", "assignee": null, "milestone": null, "draft": 0, "head": "f61cfb77056e2ee39ae827889c005b1e44c81165", "base": "456dc155d491a009942ace71a4e1827cddc6b93d", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1792", "merged_by": null, "auto_merge": null} {"id": 1038565427, "node_id": "PR_kwDOCGYnMM4950Az", "number": 473, "state": "closed", "locked": 0, "title": "Support entrypoints for `--load-extension`", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #470\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://sqlite-utils--473.org.readthedocs.build/en/473/\n\r\n", "created_at": "2022-08-27T05:53:59Z", "updated_at": "2022-08-27T05:55:52Z", "closed_at": "2022-08-27T05:55:47Z", "merged_at": "2022-08-27T05:55:47Z", "merge_commit_sha": "19dd077944429c1365b513d80cc71c605ae3bed3", "assignee": null, "milestone": null, "draft": 0, "head": "72db599ae03fabe2e9f999999e258edc1a99ed59", "base": "a46a5e3a9e03dcdd8c84a92e4a5dbfa02ba461fa", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/473", "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": 1046943107, "node_id": "PR_kwDOBm6k_c4-ZxWD", "number": 1803, "state": "closed", "locked": 0, "title": "Workaround for test failure: RuntimeError: There is no current event loop", "user": {"value": 9599, "label": "simonw"}, "body": "Closes #1802\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1803.org.readthedocs.build/en/1803/\n\r\n", "created_at": "2022-09-06T00:31:06Z", "updated_at": "2022-09-06T00:40:19Z", "closed_at": "2022-09-06T00:40:19Z", "merged_at": "2022-09-06T00:40:19Z", "merge_commit_sha": "64288d827f7ff97f825e10f714da3f781ecf9345", "assignee": null, "milestone": null, "draft": 0, "head": "7b6a2b48408697905bd93504b7f5554f4a7627ef", "base": "1c29b925d300d1ee17047504473f2517767aa05b", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1803", "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": 1086765659, "node_id": "PR_kwDOBm6k_c5Axrpb", "number": 1842, "state": "closed", "locked": 0, "title": "check_visibility can now take multiple permissions into account", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1829\r\n\r\n- [x] Fix table page\r\n- [x] Fix database page\r\n- [x] Fix query page\r\n- [x] Fix row page\r\n- [x] Tests\r\n- [x] Updated documentation for `check_visibility` method, to cover the new `permissions=` keyword argument\r\n\r\nAlso this fix is currently only applied on the table page - needs to be applied on database, row and query pages too.\r\n\r\n\r\n----\r\n:books: Documentation preview :books:: https://datasette--1842.org.readthedocs.build/en/1842/\r\n\r\n", "created_at": "2022-10-14T00:06:04Z", "updated_at": "2022-10-24T02:11:36Z", "closed_at": "2022-10-24T02:11:36Z", "merged_at": "2022-10-24T02:11:34Z", "merge_commit_sha": "78dad236df730212aa7172f885fd8ec575f0d3ad", "assignee": null, "milestone": null, "draft": 0, "head": "362347574e3283d637243906af7d5e028e100180", "base": "79aa0de083d38a9975915d5a4cc68ca6c74fbe3d", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1842", "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": 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": 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": 1155365505, "node_id": "PR_kwDOBm6k_c5E3XqB", "number": 1940, "state": "closed", "locked": 0, "title": "register_permissions() plugin hook", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1939\r\n\r\nFrom this comment: https://github.com/simonw/datasette/issues/1939#issuecomment-1343872168\r\n\r\n- [x] Unit test for the registration plugin hook itself\r\n- [x] Use them in `check_permission_actions_are_documented` test in `conftest.py`\r\n- [x] Add description field to `Permissions` (and update tests and docs)\r\n- [x] Documentation for `datasette.permissions` dictionary\r\n- [x] If no `default=` provided in call to `permission_allowed()` then use default from `datasette.permissions` list\r\n- [x] Remove `default=` from a bunch of places\r\n- [x] Throw an error if two permissions are registered with the same name or abbreviation (but other attributes differ)\r\n- [x] Update authentication and permissions documentation to explain that permissions are now registered and have a registered default\r\n\r\n\r\n----\r\n:books: Documentation preview :books:: https://datasette--1940.org.readthedocs.build/en/1940/\r\n\r\n", "created_at": "2022-12-09T05:09:28Z", "updated_at": "2022-12-13T02:05:55Z", "closed_at": "2022-12-13T02:05:54Z", "merged_at": "2022-12-13T02:05:54Z", "merge_commit_sha": "8bf06a76b51bc9ace7cf72cf0cca8f1da7704ea7", "assignee": null, "milestone": {"value": 8711695, "label": " Datasette 1.0a2"}, "draft": 0, "head": "94e5c75397a96b86a3349123808cd02cb20f7440", "base": "e539c1c024bc62d88df91d9107cbe37e7f0fe55f", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1940", "merged_by": null, "auto_merge": null} {"id": 1167432070, "node_id": "PR_kwDOBm6k_c5FlZmG", "number": 1960, "state": "closed", "locked": 0, "title": "Port as many tests as possible to async def tests against ds_client", "user": {"value": 9599, "label": "simonw"}, "body": "Refs:\r\n- #1959\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1960.org.readthedocs.build/en/1960/\n\r\n", "created_at": "2022-12-15T21:45:53Z", "updated_at": "2022-12-17T21:47:56Z", "closed_at": "2022-12-17T21:47:55Z", "merged_at": "2022-12-17T21:47:55Z", "merge_commit_sha": "89cffcf14cda830871c8ee81742eaa1e2dff017b", "assignee": null, "milestone": null, "draft": 0, "head": "f42bca8fc2657cecde05eca644c28fac7c28101f", "base": "0b68996cc511b3a801f0cd0157bd66332d75f46f", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1960", "merged_by": null, "auto_merge": null} {"id": 1167644140, "node_id": "PR_kwDOBm6k_c5FmNXs", "number": 1961, "state": "closed", "locked": 0, "title": "Use click.echo() instead of print() for --root option", "user": {"value": 9599, "label": "simonw"}, "body": "This ensures the URL is output correctly when running under Docker.\r\n\r\nCloses #1958\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1961.org.readthedocs.build/en/1961/\n\r\n", "created_at": "2022-12-16T00:54:56Z", "updated_at": "2022-12-16T00:55:19Z", "closed_at": "2022-12-16T00:55:18Z", "merged_at": "2022-12-16T00:55:18Z", "merge_commit_sha": "013496862f4d4b441ab61255242b838b24287607", "assignee": null, "milestone": null, "draft": 0, "head": "06d20c792f8c872118edd84973308fb3e5137b5e", "base": "0b68996cc511b3a801f0cd0157bd66332d75f46f", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1961", "merged_by": null, "auto_merge": null} {"id": 1191716406, "node_id": "PR_kwDOBm6k_c5HCCY2", "number": 1984, "state": "closed", "locked": 0, "title": "Upgrade Sphinx", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1971\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1984.org.readthedocs.build/en/1984/\n\r\n", "created_at": "2023-01-10T02:00:40Z", "updated_at": "2023-01-10T02:02:33Z", "closed_at": "2023-01-10T02:02:33Z", "merged_at": "2023-01-10T02:02:32Z", "merge_commit_sha": "8e7073404379d79a2d269167a12bbb58439edd39", "assignee": null, "milestone": null, "draft": 0, "head": "0c8b3f5ca1385c804c696f1fa61c24de29ae4755", "base": "4880638f13c3a1abc53f395cde39ac848daf416d", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1984", "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": 1303909190, "node_id": "PR_kwDOBm6k_c5NuBNG", "number": 2053, "state": "closed", "locked": 0, "title": "WIP new JSON for queries", "user": {"value": 9599, "label": "simonw"}, "body": "Refs:\r\n- #2049\r\n\r\nTODO:\r\n\r\n- [x] Read queries JSON\r\n- Implement error display with `\"ok\": false` and an errors key\r\n- Read queries HTML\r\n- Read queries other formats (plugins)\r\n- Canned read queries (dispatched to from table)\r\n- Write queries (a canned query thing)\r\n- Implement different shapes, refactoring to share code with table\r\n- Implement a sensible subset of extras, also refactoring to share code with table\r\n- Get all tests passing\r\n\r\n\r\n----\r\n:books: Documentation preview :books:: https://datasette--2053.org.readthedocs.build/en/2053/\r\n\r\n", "created_at": "2023-04-05T23:26:15Z", "updated_at": "2023-07-26T18:28:59Z", "closed_at": "2023-07-26T18:26:45Z", "merged_at": null, "merge_commit_sha": "c69f7961e42c1103e281ca061edbe041e212cbb0", "assignee": null, "milestone": null, "draft": 1, "head": "ee24ea94525ace221f1b4d141d01cf56410c2c6d", "base": "dda99fc09fb0b5523948f6d481c6c051c1c7b5de", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2053", "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": 1358282799, "node_id": "PR_kwDOCGYnMM5Q9cAv", "number": 549, "state": "closed", "locked": 0, "title": "TUI powered by Trogon", "user": {"value": 9599, "label": "simonw"}, "body": "Refs:\r\n- #545\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://sqlite-utils--549.org.readthedocs.build/en/549/\n\r\n", "created_at": "2023-05-21T17:55:42Z", "updated_at": "2023-05-21T18:42:00Z", "closed_at": "2023-05-21T18:41:56Z", "merged_at": "2023-05-21T18:41:56Z", "merge_commit_sha": "718b0cba9b32d97a41bcf9757c97fe1d058da81c", "assignee": null, "milestone": null, "draft": 0, "head": "948692a94b22852b3147abebac9d719b69320b57", "base": "e8c5b042e49c627aefd620c8d4b1c84eb8677f73", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/549", "merged_by": null, "auto_merge": null} {"id": 1358321208, "node_id": "PR_kwDOCGYnMM5Q9lY4", "number": 553, "state": "closed", "locked": 0, "title": "Reformatted CLI examples in docs", "user": {"value": 9599, "label": "simonw"}, "body": "Refs:\r\n- #551\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://sqlite-utils--553.org.readthedocs.build/en/553/\n\r\n", "created_at": "2023-05-21T20:44:34Z", "updated_at": "2023-05-21T20:57:27Z", "closed_at": "2023-05-21T20:57:23Z", "merged_at": "2023-05-21T20:57:22Z", "merge_commit_sha": "d8fe1b0d899faaaa3d4714a39328f4c24932278f", "assignee": null, "milestone": null, "draft": 0, "head": "21036a5084a2c846a05feb6bced3111d849bbe3c", "base": "e240133b11588d31dc22c632f7a7ca636c72978d", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/553", "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": 1406821147, "node_id": "PR_kwDOCGYnMM5T2mMb", "number": 560, "state": "closed", "locked": 0, "title": "Use sqlean if available in environment", "user": {"value": 9599, "label": "simonw"}, "body": "Refs:\r\n- #559 \r\n\r\n\r\n----\n:books: Documentation preview :books:: https://sqlite-utils--560.org.readthedocs.build/en/560/\n\r\n", "created_at": "2023-06-25T19:48:48Z", "updated_at": "2023-06-26T08:21:00Z", "closed_at": "2023-06-25T23:25:51Z", "merged_at": "2023-06-25T23:25:51Z", "merge_commit_sha": "f5c63088e1454811ce8361208b72297408eb5237", "assignee": null, "milestone": null, "draft": 0, "head": "5e7d27e5df024ce1f45e3a850c4e0f65e765cccd", "base": "2747257a3334d55e890b40ec58fada57ae8cfbfd", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/560", "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": 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": 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": 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": 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": 1503774871, "node_id": "PR_kwDOBm6k_c5ZociX", "number": 2173, "state": "closed", "locked": 0, "title": "click-default-group>=1.2.3", "user": {"value": 9599, "label": "simonw"}, "body": "Now available as a wheel:\r\n- https://github.com/click-contrib/click-default-group/issues/21\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--2173.org.readthedocs.build/en/2173/\n\r\n", "created_at": "2023-09-06T02:33:28Z", "updated_at": "2023-09-06T02:50:10Z", "closed_at": "2023-09-06T02:50:10Z", "merged_at": "2023-09-06T02:50:10Z", "merge_commit_sha": "05707aa16b5c6c39fbe48b3176b85a8ffe493938", "assignee": null, "milestone": null, "draft": 0, "head": "a481ebd495d0f87ebd6dcf360a9cff25a6e148d7", "base": "fd083e37ec53e7e625111168d324a572344a3b19", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2173", "merged_by": null, "auto_merge": null} {"id": 1504918180, "node_id": "PR_kwDOBm6k_c5Zszqk", "number": 2175, "state": "closed", "locked": 0, "title": "Test against Python 3.12 preview", "user": {"value": 9599, "label": "simonw"}, "body": "https://dev.to/hugovk/help-test-python-312-beta-1508/\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--2175.org.readthedocs.build/en/2175/\n\r\n", "created_at": "2023-09-06T16:09:05Z", "updated_at": "2023-09-06T16:16:28Z", "closed_at": "2023-09-06T16:16:27Z", "merged_at": "2023-09-06T16:16:27Z", "merge_commit_sha": "e86eaaa4f371512689e973c18879298dab51f80a", "assignee": null, "milestone": null, "draft": 0, "head": "21e77c3ff9e4aacaa9442a7b3b36aafd87025115", "base": "05707aa16b5c6c39fbe48b3176b85a8ffe493938", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2175", "merged_by": null, "auto_merge": null}