{"id": 872509423, "node_id": "PR_kwDOBm6k_c40AW_v", "number": 1649, "state": "closed", "locked": 0, "title": "Add /opt/homebrew to where spatialite extension can be found", "user": {"value": 2182, "label": "danp"}, "body": "Helps homebrew on Apple Silicon setups find spatialite without needing\r\na full path.\r\n\r\nSimilar to #1114", "created_at": "2022-03-06T18:09:35Z", "updated_at": "2022-03-06T22:46:00Z", "closed_at": "2022-03-06T19:39:15Z", "merged_at": "2022-03-06T19:39:15Z", "merge_commit_sha": "de810f49cc57a4f88e4a1553d26c579253ce4531", "assignee": null, "milestone": null, "draft": 0, "head": "59b2c16e3db10390b134673bda20045c351bdef8", "base": "0499f174c063283aa9b589d475a32077aaf7adc5", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1649", "merged_by": null, "auto_merge": null} {"id": 817942693, "node_id": "PR_kwDOBm6k_c4wwNCl", "number": 1589, "state": "closed", "locked": 0, "title": "Typo in docs about default redirect status code", "user": {"value": 3556, "label": "davidbgk"}, "body": null, "created_at": "2022-01-10T19:14:36Z", "updated_at": "2022-03-06T02:27:49Z", "closed_at": "2022-03-06T01:58:32Z", "merged_at": "2022-03-06T01:58:32Z", "merge_commit_sha": "0499f174c063283aa9b589d475a32077aaf7adc5", "assignee": null, "milestone": null, "draft": 0, "head": "d95bd658748172d88b04330950ef8f8d18b726c7", "base": "8c401ee0f054de2f568c3a8302c9223555146407", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1589", "merged_by": null, "auto_merge": null} {"id": 1143946542, "node_id": "PR_kwDOBm6k_c5ELz0u", "number": 1930, "state": "closed", "locked": 0, "title": "Typo in JSON API `Updating a row` documentation", "user": {"value": 3556, "label": "davidbgk"}, "body": "\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1930.org.readthedocs.build/en/1930/\n\r\n", "created_at": "2022-12-03T02:22:31Z", "updated_at": "2022-12-08T21:12:35Z", "closed_at": "2022-12-08T21:12:35Z", "merged_at": "2022-12-08T21:12:35Z", "merge_commit_sha": "e539c1c024bc62d88df91d9107cbe37e7f0fe55f", "assignee": null, "milestone": null, "draft": 0, "head": "9928ff17b47443f6b51e570ae6116fd472756096", "base": "cab5b60e09e94aca820dbec5308446a88c99ea3d", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1930", "merged_by": null, "auto_merge": null} {"id": 548271472, "node_id": "MDExOlB1bGxSZXF1ZXN0NTQ4MjcxNDcy", "number": 1170, "state": "closed", "locked": 0, "title": "Install Prettier via package.json", "user": {"value": 3637, "label": "benpickles"}, "body": "This adds a package.json with Prettier and means that developers/CI will use the same version. It also ensures that NPM packages are cached on GitHub Actions which fixes #1169.", "created_at": "2021-01-04T14:18:03Z", "updated_at": "2021-01-24T21:21:01Z", "closed_at": "2021-01-04T19:52:34Z", "merged_at": "2021-01-04T19:52:33Z", "merge_commit_sha": "3054e0f7307da4c31850b74bd73238b33d6c750a", "assignee": null, "milestone": {"value": 6346396, "label": "Datasette 0.54"}, "draft": 0, "head": "a5761ccb8676ef1b98d95d8174211c98f140e3de", "base": "1e8fa3ac7cb2d6e516c47c306c86ed2334fc3dc0", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1170", "merged_by": null, "auto_merge": null} {"id": 1243080434, "node_id": "PR_kwDOBm6k_c5KF-by", "number": 2026, "state": "open", "locked": 0, "title": "Avoid repeating primary key columns if included in _col args", "user": {"value": 8513, "label": "runderwood"}, "body": "...while maintaining given order.\r\n\r\nFixes #1975 (if I'm understanding correctly).\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--2026.org.readthedocs.build/en/2026/\n\r\n", "created_at": "2023-02-16T04:16:25Z", "updated_at": "2023-02-16T04:16:41Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "ad2bfc72186e7af2244a6f27e02754f4c2f64910", "assignee": null, "milestone": null, "draft": 0, "head": "f15adf1d6211e05250e5492826dd3f8e8e328077", "base": "0b4a28691468b5c758df74fa1d72a823813c96bf", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2026", "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": 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": 157365811, "node_id": "MDExOlB1bGxSZXF1ZXN0MTU3MzY1ODEx", "number": 168, "state": "closed", "locked": 0, "title": "Upgrade to Sanic 0.7.0", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2017-12-09T01:25:08Z", "updated_at": "2017-12-09T03:00:34Z", "closed_at": "2017-12-09T03:00:34Z", "merged_at": "2017-12-09T03:00:34Z", "merge_commit_sha": "446f4b832272b2286f6f65af19714eb64afb7aa6", "assignee": null, "milestone": null, "draft": 0, "head": "d9e13a5cc2b77637a6cdd8bd21b9b8fc1350051a", "base": "61e3c5a1e904a6e1cbee86ba1494b5cb4b5820cf", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/168", "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": 180188397, "node_id": "MDExOlB1bGxSZXF1ZXN0MTgwMTg4Mzk3", "number": 196, "state": "closed", "locked": 0, "title": "_sort= and _sort_desc= parameters to table view", "user": {"value": 9599, "label": "simonw"}, "body": "See #189 ", "created_at": "2018-04-09T00:07:21Z", "updated_at": "2018-04-09T05:10:29Z", "closed_at": "2018-04-09T05:10:23Z", "merged_at": "2018-04-09T05:10:23Z", "merge_commit_sha": "c1d37fdf2be84fb07155bb1b1f61057444b03300", "assignee": null, "milestone": null, "draft": 0, "head": "fdd6b71e40c8aa9a93e95802a8b6291099d4db2c", "base": "b2188f044265c95f7e54860e28107c17d2a6ed2e", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/196", "merged_by": null, "auto_merge": null} {"id": 181731956, "node_id": "MDExOlB1bGxSZXF1ZXN0MTgxNzMxOTU2", "number": 210, "state": "closed", "locked": 0, "title": "Start of the plugin system, based on pluggy", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #14", "created_at": "2018-04-16T00:51:30Z", "updated_at": "2018-04-16T00:56:16Z", "closed_at": "2018-04-16T00:56:16Z", "merged_at": "2018-04-16T00:56:16Z", "merge_commit_sha": "33c7c53ff87c25445c68088ede49d062d9c31fe8", "assignee": null, "milestone": null, "draft": 0, "head": "d75e57060d9ef4ef6ebab3600e542885b7467272", "base": "efbb4e83374a2c795e436c72fa79f70da72309b8", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/210", "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": 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": 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": 187668890, "node_id": "MDExOlB1bGxSZXF1ZXN0MTg3NjY4ODkw", "number": 257, "state": "closed", "locked": 0, "title": "Refactor views", "user": {"value": 9599, "label": "simonw"}, "body": "* Split out view classes from main `app.py`\r\n* Run [black](https://github.com/ambv/black) against resulting code to apply opinionated source code formatting\r\n* Run [isort](https://github.com/timothycrosley/isort) to re-order my imports\r\n\r\nRefs #256 ", "created_at": "2018-05-13T13:00:50Z", "updated_at": "2018-05-14T03:04:25Z", "closed_at": "2018-05-14T03:04:24Z", "merged_at": "2018-05-14T03:04:24Z", "merge_commit_sha": "2b79f2bdeb1efa86e0756e741292d625f91cb93d", "assignee": null, "milestone": null, "draft": 0, "head": "0e2b41f3fa38456af32548c536f955c48c7637e8", "base": "4301a8f3ac69f2f54916e73cc90fcf216a9a3746", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/257", "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": 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": 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": 195413241, "node_id": "MDExOlB1bGxSZXF1ZXN0MTk1NDEzMjQx", "number": 315, "state": "closed", "locked": 0, "title": "Streaming mode for downloading all rows as a CSV", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #266", "created_at": "2018-06-18T03:06:59Z", "updated_at": "2018-06-18T03:29:13Z", "closed_at": "2018-06-18T03:21:02Z", "merged_at": "2018-06-18T03:21:02Z", "merge_commit_sha": "fc3660cfad7668dbce6ead12766e048fc1f78b11", "assignee": null, "milestone": null, "draft": 0, "head": "b15f412e04ce9ff21983986e661fbe4396f97b43", "base": "0d7ba1ba676828dc7c8dda78ebe7921f7986fc18", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/315", "merged_by": null, "auto_merge": null} {"id": 196628304, "node_id": "MDExOlB1bGxSZXF1ZXN0MTk2NjI4MzA0", "number": 324, "state": "closed", "locked": 0, "title": "Speed up Travis by reusing pip wheel cache across builds", "user": {"value": 9599, "label": "simonw"}, "body": "From https://atchai.com/blog/faster-ci/ - refs #323 ", "created_at": "2018-06-22T03:20:08Z", "updated_at": "2018-06-24T01:03:47Z", "closed_at": "2018-06-24T01:03:47Z", "merged_at": "2018-06-24T01:03:47Z", "merge_commit_sha": "47e689a89b3f5f0969595b17d2ec59ea3caffb3b", "assignee": null, "milestone": null, "draft": 0, "head": "7d7f5f61fd6dca3385386a657a13057680d8ddd7", "base": "e7566cc59d4b02ef301054fd35fdde6c925a8e38", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/324", "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": 204029142, "node_id": "MDExOlB1bGxSZXF1ZXN0MjA0MDI5MTQy", "number": 349, "state": "closed", "locked": 0, "title": "publish_subcommand hook + default plugins mechanism, used for publish heroku/now", "user": {"value": 9599, "label": "simonw"}, "body": "This change introduces a new plugin hook, publish_subcommand, which can be\r\nused to implement new subcommands for the \"datasette publish\" command family.\r\n\r\nI've used this new hook to refactor out the \"publish now\" and \"publish heroku\"\r\nimplementations into separate modules. I've also added unit tests for these\r\ntwo publishers, mocking the subprocess.call and subprocess.check_output\r\nfunctions.\r\n\r\nAs part of this, I introduced a mechanism for loading default plugins. These\r\nare defined in the new \"default_plugins\" list inside datasette/app.py\r\n\r\nCloses #217 (Plugin support for \"datasette publish\")\r\nCloses #348 (Unit tests for \"datasette publish\")\r\nRefs #14, #59, #102, #103, #146, #236, #347", "created_at": "2018-07-26T05:03:22Z", "updated_at": "2018-07-26T05:28:54Z", "closed_at": "2018-07-26T05:16:00Z", "merged_at": "2018-07-26T05:16:00Z", "merge_commit_sha": "dbbe707841973b50a76d2703003ae2c40e7ad1fd", "assignee": null, "milestone": null, "draft": 0, "head": "7abdfd55daa9c617da02fd768b8e7476e89f0f94", "base": "3ac21c749881d0fb1c35b0f9b7a819e29f61c5c1", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/349", "merged_by": null, "auto_merge": null} {"id": 204851511, "node_id": "MDExOlB1bGxSZXF1ZXN0MjA0ODUxNTEx", "number": 353, "state": "closed", "locked": 0, "title": "render_cell(value) plugin hook", "user": {"value": 9599, "label": "simonw"}, "body": "Closes #352.", "created_at": "2018-07-30T15:57:08Z", "updated_at": "2018-08-05T00:14:57Z", "closed_at": "2018-08-05T00:14:57Z", "merged_at": "2018-08-05T00:14:57Z", "merge_commit_sha": "4ac913224061f2dc4f673efab1a5ac6bc748854f", "assignee": null, "milestone": null, "draft": 0, "head": "2e538d924f3b17f82e94e8e8b5a05abcf9e1e697", "base": "295d005ca48747faf046ed30c3c61e7563c61ed2", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/353", "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": 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": 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": 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": 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": 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": 261418285, "node_id": "MDExOlB1bGxSZXF1ZXN0MjYxNDE4Mjg1", "number": 416, "state": "closed", "locked": 0, "title": "URL hashing now optional: turn on with --config hash_urls:1 (#418)", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2019-03-15T04:26:06Z", "updated_at": "2019-03-17T22:55:04Z", "closed_at": "2019-03-17T22:55:04Z", "merged_at": "2019-03-17T22:55:04Z", "merge_commit_sha": "6f6d0ff2b41f1cacaf42287b1b230b646bcba9ee", "assignee": null, "milestone": null, "draft": 0, "head": "0d02a99c9665669540aebff981246d8c743072b3", "base": "afe9aa3ae03c485c5d6652741438d09445a486c1", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/416", "merged_by": null, "auto_merge": null} {"id": 269364924, "node_id": "MDExOlB1bGxSZXF1ZXN0MjY5MzY0OTI0", "number": 426, "state": "closed", "locked": 0, "title": "Upgrade to Jinja2==2.10.1", "user": {"value": 9599, "label": "simonw"}, "body": "https://nvd.nist.gov/vuln/detail/CVE-2019-10906\r\n\r\nThis is only a security issue of concern if evaluating templates from untrusted sources, which isn't something I would ever expect a Datasette user to do.", "created_at": "2019-04-10T23:03:08Z", "updated_at": "2019-04-22T21:23:22Z", "closed_at": "2019-04-10T23:13:31Z", "merged_at": "2019-04-10T23:13:31Z", "merge_commit_sha": "9cd3b44277e6a8ea9273bf659379ff0414e0b8ae", "assignee": null, "milestone": null, "draft": 0, "head": "629453383c7f911eddfc891f22c39b7d6e9661aa", "base": "78e45ead4d771007c57b307edf8fc920101f8733", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/426", "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": 270251021, "node_id": "MDExOlB1bGxSZXF1ZXN0MjcwMjUxMDIx", "number": 432, "state": "closed", "locked": 0, "title": "Refactor facets to a class and new plugin, refs #427", "user": {"value": 9599, "label": "simonw"}, "body": "WIP for #427", "created_at": "2019-04-13T20:04:45Z", "updated_at": "2019-05-03T00:04:24Z", "closed_at": "2019-05-03T00:04:24Z", "merged_at": null, "merge_commit_sha": "b78bc19269ed83b054a60c79c4fe08f4ca943942", "assignee": null, "milestone": null, "draft": 0, "head": "5c198f7ca5d2aff49180820271ba8d06b79aefb1", "base": "9c77e6e355ec718d76178a7607721d10a66b6aef", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/432", "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": 275801463, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjc1ODAxNDYz", "number": 447, "state": "closed", "locked": 0, "title": "Use dist: xenial and python: 3.7 on Travis", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2019-05-03T18:07:07Z", "updated_at": "2019-05-03T18:17:05Z", "closed_at": "2019-05-03T18:16:53Z", "merged_at": "2019-05-03T18:16:53Z", "merge_commit_sha": "553314dcd699a84aa7cc806377150ca0d57a6024", "assignee": null, "milestone": null, "draft": 0, "head": "cd22e389d09b4fd5ed28205ba38a20faf1ed14f1", "base": "01b3de5b66742f0f661183e9e2ef66be3600e831", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/447", "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": 284390197, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjg0MzkwMTk3", "number": 497, "state": "closed", "locked": 0, "title": "Upgrade pytest to 4.6.1", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2019-06-03T01:45:34Z", "updated_at": "2019-06-03T02:06:32Z", "closed_at": "2019-06-03T02:06:27Z", "merged_at": "2019-06-03T02:06:27Z", "merge_commit_sha": "5e8fbf7f6fbc0b63d0479da3806dd9ccd6aaa945", "assignee": null, "milestone": null, "draft": 0, "head": "bf2ab0306e6d3ce7524fecf015e2cec7ae45e994", "base": "803f750309bf0cd5b7501228c1efcf9a35686d74", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/497", "merged_by": null, "auto_merge": null} {"id": 285698310, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjg1Njk4MzEw", "number": 501, "state": "closed", "locked": 0, "title": "Test against Python 3.8-dev using Travis", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2019-06-06T08:37:53Z", "updated_at": "2019-11-11T03:23:29Z", "closed_at": "2019-11-11T03:23:29Z", "merged_at": null, "merge_commit_sha": "1aac0cf0ab962060dd5cff19b8b179bb7fa0f00b", "assignee": null, "milestone": null, "draft": 0, "head": "a5defb684fcc734f6325ca08beef9f49c3e7a298", "base": "5e8fbf7f6fbc0b63d0479da3806dd9ccd6aaa945", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/501", "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} {"id": 290971295, "node_id": "MDExOlB1bGxSZXF1ZXN0MjkwOTcxMjk1", "number": 524, "state": "closed", "locked": 0, "title": "Sort commits using isort, refs #516", "user": {"value": 9599, "label": "simonw"}, "body": "Also added a lint unit test to ensure they stay sorted. #516", "created_at": "2019-06-24T05:04:48Z", "updated_at": "2023-08-23T01:31:08Z", "closed_at": "2023-08-23T01:31:08Z", "merged_at": null, "merge_commit_sha": "4e92ebe00a058e02b2d7543cff60ac2f78aa97c7", "assignee": null, "milestone": null, "draft": 0, "head": "dafae70ee7f74ce79b541a94385172be3ad0de83", "base": "cdd24f3eaa207f67d948c1876725b0f84654a623", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/524", "merged_by": null, "auto_merge": null} {"id": 293962405, "node_id": "MDExOlB1bGxSZXF1ZXN0MjkzOTYyNDA1", "number": 533, "state": "closed", "locked": 0, "title": "Support cleaner custom templates for rows and tables, closes #521", "user": {"value": 9599, "label": "simonw"}, "body": "- [x] Rename `_rows_and_columns.html` to `_table.html`\r\n- [x] Unit test\r\n- [x] Documentation", "created_at": "2019-07-03T00:40:18Z", "updated_at": "2019-07-03T03:23:06Z", "closed_at": "2019-07-03T03:23:06Z", "merged_at": "2019-07-03T03:23:06Z", "merge_commit_sha": "b9ede4c1898616512b5d204f9c941deff473cbe4", "assignee": null, "milestone": null, "draft": 0, "head": "1add905532b7bc4f681318b8f22b9b74cca2b2a0", "base": "76882830548e16905348ee75acb0044cb8e1fd20", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/533", "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": 293994443, "node_id": "MDExOlB1bGxSZXF1ZXN0MjkzOTk0NDQz", "number": 536, "state": "closed", "locked": 0, "title": "Switch to ~= dependencies, closes #532", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2019-07-03T04:12:16Z", "updated_at": "2019-07-03T04:32:55Z", "closed_at": "2019-07-03T04:32:55Z", "merged_at": "2019-07-03T04:32:55Z", "merge_commit_sha": "f0d32da0a9af87bcb15e34e35424f0c0053be83a", "assignee": null, "milestone": null, "draft": 0, "head": "391d109dc3f9230dc4ee4afd20041e480e90e739", "base": "4d2fdafe39159c9a8aa83f7e9bfe768bbbbb56a3", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/536", "merged_by": null, "auto_merge": null} {"id": 294400446, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjk0NDAwNDQ2", "number": 539, "state": "closed", "locked": 0, "title": "Secret plugin configuration options", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #538 ", "created_at": "2019-07-04T03:21:20Z", "updated_at": "2019-07-04T05:36:45Z", "closed_at": "2019-07-04T05:36:45Z", "merged_at": "2019-07-04T05:36:45Z", "merge_commit_sha": "a2d45931935f6bb73605a94afedf9e78308c95d6", "assignee": null, "milestone": null, "draft": 0, "head": "fd6164b03ebe450a9a00df2e5be2dc7bbfbd9a3f", "base": "f0d32da0a9af87bcb15e34e35424f0c0053be83a", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/539", "merged_by": null, "auto_merge": null} {"id": 294992578, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjk0OTkyNTc4", "number": 542, "state": "closed", "locked": 0, "title": "extra_template_vars plugin hook", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #541", "created_at": "2019-07-05T22:19:17Z", "updated_at": "2019-07-06T00:05:57Z", "closed_at": "2019-07-06T00:05:56Z", "merged_at": "2019-07-06T00:05:56Z", "merge_commit_sha": "fcfcae21e67cc15090942b1d2a47b5f016279337", "assignee": null, "milestone": null, "draft": 0, "head": "e81c7abb40c8ecf8d9d23cbcdde045e0a3b4ab14", "base": "a18e0964ecd04593f227616538a80dee08768057", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/542", "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": 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": 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": 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": 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": 313384926, "node_id": "MDExOlB1bGxSZXF1ZXN0MzEzMzg0OTI2", "number": 571, "state": "closed", "locked": 0, "title": "detect_fts now works with alternative table escaping", "user": {"value": 9599, "label": "simonw"}, "body": "Fixes #570", "created_at": "2019-09-03T00:23:39Z", "updated_at": "2019-09-03T00:32:28Z", "closed_at": "2019-09-03T00:32:28Z", "merged_at": "2019-09-03T00:32:28Z", "merge_commit_sha": "2dc5c8dc259a0606162673d394ba8cc1c6f54428", "assignee": null, "milestone": null, "draft": 0, "head": "a85239f69261c10f1a9f90514c8b5d113cb94585", "base": "f04deebec4f3842f7bd610cd5859de529f77d50e", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/571", "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": 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": 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": 334448258, "node_id": "MDExOlB1bGxSZXF1ZXN0MzM0NDQ4MjU4", "number": 609, "state": "closed", "locked": 0, "title": "Update to latest black", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2019-10-30T18:42:35Z", "updated_at": "2019-10-30T18:49:01Z", "closed_at": "2019-10-30T18:49:01Z", "merged_at": "2019-10-30T18:49:01Z", "merge_commit_sha": "5dd4d2b2d3abcfd507a6df47e7c2fbad3c552fd8", "assignee": null, "milestone": null, "draft": 0, "head": "6f57e5e77bac29ac88d51271fd0c785859a820ce", "base": "f4c0830529a9513a83437a9e1550bbe27ebc5c64", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/609", "merged_by": null, "auto_merge": null} {"id": 339236647, "node_id": "MDExOlB1bGxSZXF1ZXN0MzM5MjM2NjQ3", "number": 623, "state": "closed", "locked": 0, "title": "Test against Python 3.8 in Travis", "user": {"value": 9599, "label": "simonw"}, "body": "Needed for #622", "created_at": "2019-11-11T03:24:54Z", "updated_at": "2019-11-11T03:45:35Z", "closed_at": "2019-11-11T03:45:35Z", "merged_at": "2019-11-11T03:45:35Z", "merge_commit_sha": "1c063fae9dba70f70244db010d55a18846640f07", "assignee": null, "milestone": null, "draft": 0, "head": "877dda2d287ed3b1772f051dffd295a69c3ecd27", "base": "28c4a6db5b5e512db630d7ba6127196185de67c7", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/623", "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": 339722790, "node_id": "MDExOlB1bGxSZXF1ZXN0MzM5NzIyNzkw", "number": 627, "state": "closed", "locked": 0, "title": "Support Python 3.8, stop supporting Python 3.5", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #622", "created_at": "2019-11-12T04:36:33Z", "updated_at": "2020-04-05T10:23:58Z", "closed_at": "2019-11-12T05:09:12Z", "merged_at": "2019-11-12T05:09:12Z", "merge_commit_sha": "cf7776d36fbacefa874cbd6e5fcdc9fff7661203", "assignee": null, "milestone": null, "draft": 0, "head": "18cc795b5c6ec9223a5cbc4f30b19710c17f7eaa", "base": "42ee3e16a9ba7cc513b8da944cc1609a5407cf42", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/627", "merged_by": null, "auto_merge": null} {"id": 339742432, "node_id": "MDExOlB1bGxSZXF1ZXN0MzM5NzQyNDMy", "number": 630, "state": "closed", "locked": 0, "title": "Use python:3.8 base Docker image", "user": {"value": 9599, "label": "simonw"}, "body": "Closes #629", "created_at": "2019-11-12T06:02:37Z", "updated_at": "2019-11-12T06:03:10Z", "closed_at": "2019-11-12T06:03:10Z", "merged_at": "2019-11-12T06:03:10Z", "merge_commit_sha": "d977fbadf70a96bf2eea1407d01f99d98e092dec", "assignee": null, "milestone": null, "draft": 0, "head": "53180ec09483bd4eef00346a39b302aeb3039e7d", "base": "f554be39fc14ddc18921ca29d3920d55aad03d46", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/630", "merged_by": null, "auto_merge": null} {"id": 340743220, "node_id": "MDExOlB1bGxSZXF1ZXN0MzQwNzQzMjIw", "number": 635, "state": "closed", "locked": 0, "title": "Use Jinja async mode", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #628. Still needs documentation.", "created_at": "2019-11-14T01:20:57Z", "updated_at": "2019-11-14T23:14:23Z", "closed_at": "2019-11-14T23:14:23Z", "merged_at": "2019-11-14T23:14:22Z", "merge_commit_sha": "8c642f04e0608bf537fdd1f76d64c2367fb04d57", "assignee": null, "milestone": null, "draft": 0, "head": "0e8f8be1dbf89a6f689a5eea4a0534199a0028f6", "base": "b51f258d00bb3c3b401f15d46a1fbd50394dbe1c", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/635", "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": 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": 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": 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": 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": 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": 391924509, "node_id": "MDExOlB1bGxSZXF1ZXN0MzkxOTI0NTA5", "number": 703, "state": "closed", "locked": 0, "title": "WIP implementation of writable canned queries", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #698.", "created_at": "2020-03-21T22:23:51Z", "updated_at": "2020-06-03T00:08:14Z", "closed_at": "2020-06-02T23:57:35Z", "merged_at": null, "merge_commit_sha": "80c5a74a947e63673389604de12e80fa27305454", "assignee": null, "milestone": null, "draft": 1, "head": "61e40e917efc43a8aea5298a22badbb6eaea3fa1", "base": "89c4ddd4828623888e91a1d2cb396cba12d4e7b4", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/703", "merged_by": null, "auto_merge": null} {"id": 393274433, "node_id": "MDExOlB1bGxSZXF1ZXN0MzkzMjc0NDMz", "number": 708, "state": "closed", "locked": 0, "title": "base_url configuration setting, refs #394", "user": {"value": 9599, "label": "simonw"}, "body": "Pull request implementing #394", "created_at": "2020-03-24T21:52:00Z", "updated_at": "2020-03-25T00:18:44Z", "closed_at": "2020-03-25T00:18:44Z", "merged_at": "2020-03-25T00:18:44Z", "merge_commit_sha": "7656fd64d8b6a32ebc34d89c1b8711cc5ea240f7", "assignee": null, "milestone": {"value": 5234079, "label": "Datasette 0.39"}, "draft": 0, "head": "b1f953b5de1bef239ddb1d133f9b2e19f8e3438a", "base": "a498d0fe6590f9bdbc4faf9e0dd5faeb3b06002c", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/708", "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": 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": 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": 410469272, "node_id": "MDExOlB1bGxSZXF1ZXN0NDEwNDY5Mjcy", "number": 746, "state": "closed", "locked": 0, "title": "shutil.Error, not OSError", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #744", "created_at": "2020-04-29T03:30:51Z", "updated_at": "2020-04-29T07:07:24Z", "closed_at": "2020-04-29T07:07:23Z", "merged_at": null, "merge_commit_sha": "e4e8b51b50e51b2515c6d8874d16c4607f79b80a", "assignee": null, "milestone": null, "draft": 0, "head": "af3a5b91503f5d74aa111bbcd1ee531ee00f9ed7", "base": "89c4ddd4828623888e91a1d2cb396cba12d4e7b4", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/746", "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": 421491810, "node_id": "MDExOlB1bGxSZXF1ZXN0NDIxNDkxODEw", "number": 768, "state": "closed", "locked": 0, "title": "Use dirs_exist_ok=True", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #744", "created_at": "2020-05-21T17:53:44Z", "updated_at": "2020-05-27T20:21:56Z", "closed_at": "2020-05-21T17:53:51Z", "merged_at": "2020-05-21T17:53:51Z", "merge_commit_sha": "cee671a58f417f827d1735b1abaa40716534ea67", "assignee": null, "milestone": {"value": 5471110, "label": "Datasette 0.43"}, "draft": 0, "head": "f2e0a558238a34dc482803762de2509474a178c6", "base": "faea5093b865031f650da7da6539430f732f511a", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/768", "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": 424085264, "node_id": "MDExOlB1bGxSZXF1ZXN0NDI0MDg1MjY0", "number": 772, "state": "closed", "locked": 0, "title": "Test that plugin hooks are unit tested", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #771", "created_at": "2020-05-27T20:01:32Z", "updated_at": "2020-05-27T20:21:56Z", "closed_at": "2020-05-27T20:16:03Z", "merged_at": "2020-05-27T20:16:02Z", "merge_commit_sha": "da87e963bff24e47878a5bc2025c8bfc63d4bc93", "assignee": null, "milestone": {"value": 5471110, "label": "Datasette 0.43"}, "draft": 0, "head": "173b6947521f1c1b47a119f62f379bf4278c87c9", "base": "41a0cd7b6afe0397efbbf27ad822679fc574811a", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/772", "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": 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": 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": 429613893, "node_id": "MDExOlB1bGxSZXF1ZXN0NDI5NjEzODkz", "number": 809, "state": "closed", "locked": 0, "title": "Publish secrets", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #787. Will need quite a bit of manual testing since this involves code which runs against Heroku and Cloud Run.", "created_at": "2020-06-07T02:00:31Z", "updated_at": "2020-06-11T16:02:13Z", "closed_at": "2020-06-11T16:02:03Z", "merged_at": "2020-06-11T16:02:03Z", "merge_commit_sha": "98632f0a874b7b9dac6abf0abb9fdb7e2839a4d3", "assignee": null, "milestone": {"value": 5512395, "label": "Datasette 0.44"}, "draft": 0, "head": "abdac31328646705a957d58429b88d185ef43ded", "base": "ce4958018ede00fbdadf0c37a99889b6901bfb9b", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/809", "merged_by": null, "auto_merge": null} {"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": 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": 500256485, "node_id": "MDExOlB1bGxSZXF1ZXN0NTAwMjU2NDg1", "number": 1000, "state": "closed", "locked": 0, "title": "datasette.client internal requests mechanism", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #943", "created_at": "2020-10-08T23:58:25Z", "updated_at": "2020-10-09T16:11:26Z", "closed_at": "2020-10-09T16:11:25Z", "merged_at": "2020-10-09T16:11:25Z", "merge_commit_sha": "8f97b9b58e77f82fef1f10e9c9f6754b993544b6", "assignee": {"value": 9599, "label": "simonw"}, "milestone": {"value": 5971510, "label": "Datasette 0.50"}, "draft": 0, "head": "8a80c79deb640bc1a1864132a3564ccca59e8858", "base": "7249ac5ca04b5ddc6517750326ee7e522cc49145", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1000", "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": 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": 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}