{"id": 163561830, "node_id": "MDExOlB1bGxSZXF1ZXN0MTYzNTYxODMw", "number": 181, "state": "closed", "locked": 0, "title": "add \"format sql\" button to query page, uses sql-formatter", "user": {"value": 1957344, "label": "bsmithgall"}, "body": "Cool project!\r\n\r\nThis fixes #136 using the suggested [sql formatter](https://github.com/zeroturnaround/sql-formatter) library. I included the minified version in the bundle and added the relevant scripts to the codemirror includes instead of adding new files, though I could also add new files. I wanted to keep it all together, since the result of the format needs access to the editor in order to properly update the codemirror instance.", "created_at": "2018-01-17T21:50:04Z", "updated_at": "2019-11-11T03:08:25Z", "closed_at": "2019-11-11T03:08:25Z", "merged_at": null, "merge_commit_sha": "a9ac208088e536043890e0f7ff8a182398576a51", "assignee": null, "milestone": null, "draft": 0, "head": "86ac746cfcbf2fa86863f8fab528494600eac1ae", "base": "a290f28caae61b47e76e825c06984f22fc41a694", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/181", "merged_by": null, "auto_merge": null} {"id": 165029807, "node_id": "MDExOlB1bGxSZXF1ZXN0MTY1MDI5ODA3", "number": 182, "state": "closed", "locked": 0, "title": "Add db filesize next to download link", "user": {"value": 3433657, "label": "raynae"}, "body": "Took a stab at #172, will this do the trick?", "created_at": "2018-01-25T04:58:56Z", "updated_at": "2019-03-22T13:50:57Z", "closed_at": "2019-02-06T04:59:38Z", "merged_at": null, "merge_commit_sha": "a8d9e69872dec9a551b25cd609ffdbf3896045bd", "assignee": null, "milestone": null, "draft": 0, "head": "b62835205a830472abb66c708822c2dcdf4ab027", "base": "56623e48da5412b25fb39cc26b9c743b684dd968", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/182", "merged_by": null, "auto_merge": null} {"id": 181247568, "node_id": "MDExOlB1bGxSZXF1ZXN0MTgxMjQ3NTY4", "number": 202, "state": "closed", "locked": 0, "title": "Raise 404 on nonexistent table URLs", "user": {"value": 45057, "label": "russss"}, "body": "Currently they just 500. Also cleaned the logic up a bit, I hope I didn't miss anything.\r\n\r\nThis is issue #184.", "created_at": "2018-04-12T15:47:06Z", "updated_at": "2018-04-13T19:22:56Z", "closed_at": "2018-04-13T18:19:15Z", "merged_at": null, "merge_commit_sha": "134150933ade84327cfd97a88d536f5bff37a136", "assignee": null, "milestone": null, "draft": 0, "head": "71bbf4e4be8a9ab7bcc4ddfb33760c7d902f4a34", "base": "bfb4e45a7bcb880758dbc18f66258de26c1d1904", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/202", "merged_by": null, "auto_merge": null} {"id": 181642114, "node_id": "MDExOlB1bGxSZXF1ZXN0MTgxNjQyMTE0", "number": 205, "state": "closed", "locked": 0, "title": "Support filtering with units and more", "user": {"value": 45057, "label": "russss"}, "body": "The first commit:\r\n* Adds units to exported JSON\r\n* Adds units key to metadata skeleton\r\n* Adds some docs for units\r\n\r\nThe second commit adds filtering by units by the first method I mentioned in #203:\r\n![image](https://user-images.githubusercontent.com/45057/38767463-7193be16-3fd9-11e8-8a5f-ac4159415c6d.png)\r\n\r\n[Try it here](https://wtr-api.herokuapp.com/wtr-663ea99/license_frequency?frequency__gt=50GHz&height__lt=50ft). I think it integrates pretty neatly.\r\n\r\nThe third commit adds support for registering custom units with Pint from metadata.json. Probably pretty niche, but I need decibels!", "created_at": "2018-04-14T10:47:51Z", "updated_at": "2018-04-14T15:24:04Z", "closed_at": "2018-04-14T15:24:04Z", "merged_at": null, "merge_commit_sha": "ed059c70e87a2930206652621e23a55167aa57c1", "assignee": null, "milestone": null, "draft": 0, "head": "eb3a37c34813ecbbfdae015305fec1f2a4ec27a5", "base": "6b15a53cd3cd40880a5e2d38827d5fac10e4bb5f", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/205", "merged_by": null, "auto_merge": null} {"id": 187770345, "node_id": "MDExOlB1bGxSZXF1ZXN0MTg3NzcwMzQ1", "number": 258, "state": "closed", "locked": 0, "title": "Add new metadata key persistent_urls which removes the hash from all database urls", "user": {"value": 247131, "label": "philroche"}, "body": "Add new metadata key \"persistent_urls\" which removes the hash from all database urls when set to \"true\"\r\n\r\nThis PR is just to gauge if this, or something like it, is something you would consider merging?\r\n\r\nI understand the reason why the substring of the hash is included in the url but\r\nthere are some use cases where the urls should persist across deployments. For bookmarks\r\nfor example or for scripts that use the JSON API.\r\n\r\nThis is the initial commit for this feature. Tests and documentation updates to follow.", "created_at": "2018-05-14T09:39:18Z", "updated_at": "2018-05-21T07:38:15Z", "closed_at": "2018-05-21T07:38:15Z", "merged_at": null, "merge_commit_sha": "457fcdfc82a0260db543d49006d49f8486f233b5", "assignee": null, "milestone": null, "draft": 0, "head": "0d77a896ccb16b34c86fdeef7738f2d056e27e02", "base": "2b79f2bdeb1efa86e0756e741292d625f91cb93d", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/258", "merged_by": null, "auto_merge": null} {"id": 189860052, "node_id": "MDExOlB1bGxSZXF1ZXN0MTg5ODYwMDUy", "number": 281, "state": "closed", "locked": 0, "title": "Reduces image size using Alpine + Multistage (re: #278)", "user": {"value": 487897, "label": "iMerica"}, "body": "Hey Simon! \r\n\r\nI got the image size down from 256MB to 110MB. \r\n\r\nSeems to be working okay, but you might want to test it a bit more.\r\n\r\nExample output of `docker run --rm -it datasette`\r\n```\r\nServe! files=() on port 8001\r\n[2018-05-23 05:23:08 +0000] [1] [INFO] Goin' Fast @ http://127.0.0.1:8001\r\n[2018-05-23 05:23:08 +0000] [1] [INFO] Starting worker [1]\r\n```\r\n\r\nRelated: https://github.com/simonw/datasette/issues/278\r\n", "created_at": "2018-05-23T05:27:05Z", "updated_at": "2018-05-26T02:10:38Z", "closed_at": "2018-05-26T02:10:38Z", "merged_at": null, "merge_commit_sha": "0d6c8fa841ae5d28e151e4ba43370289d1e2e22c", "assignee": null, "milestone": null, "draft": 0, "head": "3af65075c430d94647f8a1b1f215e82f563bc46f", "base": "49f317752cfe89c5641165a490eef49e025752a7", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/281", "merged_by": null, "auto_merge": null} {"id": 190901429, "node_id": "MDExOlB1bGxSZXF1ZXN0MTkwOTAxNDI5", "number": 293, "state": "closed", "locked": 0, "title": "Support for external database connectors", "user": {"value": 11912854, "label": "jsancho-gpl"}, "body": "I think it would be nice that Datasette could work with other file formats that aren't SQLite, like files with PyTables format. I've tried to accomplish that using external connectors published with entry points.\r\n\r\nThese external connectors must have a structure similar to the structure [PyTables Datasette connector](https://github.com/PyTables/datasette-pytables) has.", "created_at": "2018-05-28T11:02:45Z", "updated_at": "2018-09-11T14:32:45Z", "closed_at": "2018-09-11T14:32:45Z", "merged_at": null, "merge_commit_sha": "ad2cb12473025ffab738d4df6bb47cd8b2e27859", "assignee": null, "milestone": null, "draft": 0, "head": "59c94be46f9ccd806dd352fa28a6dba142d5ab82", "base": "b7257a21bf3dfa7353980f343c83a616da44daa7", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/293", "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": 196526861, "node_id": "MDExOlB1bGxSZXF1ZXN0MTk2NTI2ODYx", "number": 322, "state": "closed", "locked": 0, "title": "Feature/in operator", "user": {"value": 2691848, "label": "4e1e0603"}, "body": "", "created_at": "2018-06-21T17:41:51Z", "updated_at": "2018-06-21T17:45:25Z", "closed_at": "2018-06-21T17:45:25Z", "merged_at": null, "merge_commit_sha": "80b7bcefa1c07202779d98c9e2214f3ebad704e3", "assignee": null, "milestone": null, "draft": 0, "head": "1acc562a2f60a7289438df657db8fd6dd3a7391d", "base": "e7566cc59d4b02ef301054fd35fdde6c925a8e38", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/322", "merged_by": null, "auto_merge": null} {"id": 211860706, "node_id": "MDExOlB1bGxSZXF1ZXN0MjExODYwNzA2", "number": 363, "state": "open", "locked": 0, "title": "Search all apps during heroku publish", "user": {"value": 436032, "label": "kevboh"}, "body": "Adds the `-A` option to include apps from all organizations when searching app names for publish.", "created_at": "2018-08-29T19:25:10Z", "updated_at": "2018-08-31T14:39:45Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "b684b04c30f6b8779a3d11f7599329092fb152f3", "assignee": null, "milestone": null, "draft": 0, "head": "2dd363e01fa73b24ba72f539c0a854bc901d23a7", "base": "b7257a21bf3dfa7353980f343c83a616da44daa7", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/363", "merged_by": null, "auto_merge": null} {"id": 214653641, "node_id": "MDExOlB1bGxSZXF1ZXN0MjE0NjUzNjQx", "number": 364, "state": "open", "locked": 0, "title": "Support for other types of databases using external connectors", "user": {"value": 11912854, "label": "jsancho-gpl"}, "body": "This PR is related to #293, but now all commits have been merged.\r\n\r\nThe purpose is to support other file formats that aren't SQLite, like files with PyTables format. I've tried to accomplish that using external connectors published with entry points.\r\n\r\nThe modifications in the original datasette code are minimal and many are in a separated file.", "created_at": "2018-09-11T14:31:47Z", "updated_at": "2018-09-11T14:31:47Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "d84f3b1f585cb52b58aed0401c34214de2e8b47b", "assignee": null, "milestone": null, "draft": 0, "head": "592fd05f685859b271f0305c2fc8cdb7da58ebfb", "base": "b7257a21bf3dfa7353980f343c83a616da44daa7", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/364", "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": 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": 266035382, "node_id": "MDExOlB1bGxSZXF1ZXN0MjY2MDM1Mzgy", "number": 424, "state": "closed", "locked": 0, "title": "Column types in inspected metadata", "user": {"value": 45057, "label": "russss"}, "body": "This PR does two things:\r\n\r\n* Adds the sqlite column type for each column to the inspected table info.\r\n* Stops binary columns from being rendered to HTML, unless a plugin handles it.\r\n\r\nThere's a bit more detail in the changeset descriptions.\r\n\r\nThese changes are intended as a precursor to a plugin which adds first-class support for Spatialite geographic primitives, and perhaps more useful geo-stuff.", "created_at": "2019-03-31T18:46:33Z", "updated_at": "2019-04-29T18:30:50Z", "closed_at": "2019-04-29T18:30:46Z", "merged_at": null, "merge_commit_sha": "a332d4e0b3fed7165a22880430664f1c3a00963d", "assignee": null, "milestone": null, "draft": 0, "head": "92e7b8c67fe5bcd484f19576f20c9235aca9050b", "base": "0209a0a344503157351e625f0629b686961763c9", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/424", "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": 274174614, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjc0MTc0NjE0", "number": 437, "state": "closed", "locked": 0, "title": "Add inspect and prepare_sanic hooks", "user": {"value": 45057, "label": "russss"}, "body": "This adds two new plugin hooks:\r\n\r\nThe `inspect` hook allows plugins to add data to the inspect dictionary.\r\n\r\nThe `prepare_sanic` hook allows plugins to hook into the web router. I've attached a warning to this hook in the docs in light of #272 but I want this hook now...\r\n\r\nOn quick inspection, I don't think it's worthwhile to try and make this hook independent of the web framework (but it looks like Starlette would make the hook implementation a bit nicer).\r\n\r\nRef #14", "created_at": "2019-04-28T11:53:34Z", "updated_at": "2019-06-24T16:38:57Z", "closed_at": "2019-06-24T16:38:56Z", "merged_at": null, "merge_commit_sha": "7aeaac7c478acf572bda61bdaa6ac3247dc15811", "assignee": null, "milestone": null, "draft": 0, "head": "f33a0a63a7442f0b665320ac3e2eb55de315f1f7", "base": "11b352b4d52fd02a422776edebb14f12e4994d3b", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/437", "merged_by": null, "auto_merge": null} {"id": 274313625, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjc0MzEzNjI1", "number": 439, "state": "closed", "locked": 0, "title": "[WIP] Add primary key to the extra_body_script hook arguments", "user": {"value": 45057, "label": "russss"}, "body": "This allows the row to be identified on row pages. The context here is that I want to access the row's data to plot it on a map.\r\n\r\nI considered passing the entire template context through to the hook function. This would expose the actual row data and potentially avoid a further fetch request in JS, but it does make the plugin API a lot more leaky. \r\n\r\n(At any rate, using the selected row data is tricky in my case because of Spatialite's infuriating custom binary representation...)", "created_at": "2019-04-29T10:08:23Z", "updated_at": "2019-05-01T09:58:32Z", "closed_at": "2019-05-01T09:58:30Z", "merged_at": null, "merge_commit_sha": "b3cbcfef4d11d2741cf00861734d726a4730afe5", "assignee": null, "milestone": null, "draft": 0, "head": "76b2c8fa406063b436155a7d8995e07b7e718c13", "base": "11b352b4d52fd02a422776edebb14f12e4994d3b", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/439", "merged_by": null, "auto_merge": null} {"id": 275909197, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjc1OTA5MTk3", "number": 450, "state": "closed", "locked": 0, "title": "Coalesce hidden table count to 0", "user": {"value": 45057, "label": "russss"}, "body": "For some reason I'm hitting a `None` here with a FTS table. I'm not\r\nentirely sure why but this makes the logic work the same as with\r\nnon-hidden tables.", "created_at": "2019-05-04T09:37:10Z", "updated_at": "2019-05-11T18:10:09Z", "closed_at": "2019-05-11T18:10:09Z", "merged_at": null, "merge_commit_sha": "5918489a2a2f14b58c5c71773a9d4fb6bb0e3e0a", "assignee": null, "milestone": null, "draft": 0, "head": "f81d9df985e8d054fc16ab91f72878fe71656354", "base": "55643430f7ac8d27e99b00e7cf79db741003e811", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/450", "merged_by": null, "auto_merge": null} {"id": 275923066, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjc1OTIzMDY2", "number": 452, "state": "open", "locked": 0, "title": "SQL builder utility classes", "user": {"value": 45057, "label": "russss"}, "body": "This adds a straightforward set of classes to aid in the construction of\r\nSQL queries.\r\n\r\nMy plan for this was to allow plugins to manipulate the\r\nDatasette-generated SQL in a more structured way. I'm not sure that's\r\ngoing to work, but I feel like this is still a step forward - it\r\nreduces the number of intermediate variables in `TableView.data` which\r\naids readability, and also factors out a lot of the boring string\r\nconcatenation.\r\n\r\nThere are a fair number of minor structure changes in here too as I've\r\ntried to make the ordering of `TableView.data` a bit more logical. As\r\nfar as I can tell, I haven't broken anything...", "created_at": "2019-05-04T13:57:47Z", "updated_at": "2019-05-04T14:03:04Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "45e7460d78c3f87c01f2e9e142cb7f646b23b156", "assignee": null, "milestone": null, "draft": 0, "head": "c63762280d3bd66ad6ea24933dafe218861efef2", "base": "55643430f7ac8d27e99b00e7cf79db741003e811", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/452", "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": 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": 291534596, "node_id": "MDExOlB1bGxSZXF1ZXN0MjkxNTM0NTk2", "number": 529, "state": "closed", "locked": 0, "title": "Use keyed rows - fixes #521", "user": {"value": 1383872, "label": "nathancahill"}, "body": "Supports template syntax like this:\r\n\r\n```\r\n{% for row in display_rows %}\r\n

{{ row[\"First_Name\"] }} {{ row[\"Last_Name\"] }}

\r\n ...\r\n```", "created_at": "2019-06-25T12:33:48Z", "updated_at": "2019-06-25T12:35:07Z", "closed_at": "2019-06-25T12:35:07Z", "merged_at": null, "merge_commit_sha": "3be9759418fdfe4a8ae8aec46fc2a937d45332d2", "assignee": null, "milestone": null, "draft": 0, "head": "312e3394bd9f3eaef606fbe37eb409ec7462baaf", "base": "9e97b725f11be3f4dca077fe5569078a62ec2761", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/529", "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": 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": 322529381, "node_id": "MDExOlB1bGxSZXF1ZXN0MzIyNTI5Mzgx", "number": 578, "state": "closed", "locked": 0, "title": "Added support for multi arch builds", "user": {"value": 887095, "label": "heussd"}, "body": "Minor changes in Dockerfile and new Makefile to support Docker multi architecture builds. `make`will build one image per architecture and push them as one Docker manifest to Docker Hub. Feel free to change `IMAGE_NAME ` to `datasetteproject/datasette` to update your official Docker Hub image(s).", "created_at": "2019-09-29T18:43:03Z", "updated_at": "2019-11-13T19:13:15Z", "closed_at": "2019-11-13T19:13:15Z", "merged_at": null, "merge_commit_sha": "ae1aa0929b9e62a413ec9b4a40588e6aafe50573", "assignee": null, "milestone": null, "draft": 0, "head": "ce6372bc6210ae52ac1951647b8fbaee40d64fc1", "base": "0fc8afde0eb5ef677f4ac31601540d6168c8208d", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/578", "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": 327541046, "node_id": "MDExOlB1bGxSZXF1ZXN0MzI3NTQxMDQ2", "number": 595, "state": "closed", "locked": 0, "title": "bump uvicorn to 0.9.0 to be Python-3.8 friendly", "user": {"value": 4312421, "label": "stonebig"}, "body": "as uvicorn-0.9 is needed to get websockets-8.0.2, which is needed to have Python-3.8 compatibility", "created_at": "2019-10-13T10:00:04Z", "updated_at": "2019-11-12T04:46:48Z", "closed_at": "2019-11-12T04:46:48Z", "merged_at": null, "merge_commit_sha": "5a7185bcd15aab28e86338b3771c25af13a94a4c", "assignee": null, "milestone": null, "draft": 0, "head": "e1d92ea94ca8f14879ef280cb7dadab7eed76e9c", "base": "fffd69ec031b83f46680f192ba57a27f0d1f0b8a", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/595", "merged_by": null, "auto_merge": null} {"id": 347179081, "node_id": "MDExOlB1bGxSZXF1ZXN0MzQ3MTc5MDgx", "number": 644, "state": "closed", "locked": 0, "title": "Validate metadata json on startup", "user": {"value": 6025893, "label": "chris48s"}, "body": "This PR adds a sanity check which builds up a marshmallow schema on-the-fly based on the structure of the database(s) on startup and then validates the metadata json against it.\r\n\r\nIn case of invalid data, this will raise with a descriptive error e.g:\r\n\r\n```\r\nmarshmallow.exceptions.ValidationError: {'databases': {'fixtures': {'tables': {'not_a_table': ['Unknown field.']}}}}\r\n```\r\n\r\nCloses #260\r\n\r\n---\r\n\r\nThis was intended to be fairly self-contained, but then while I was working on it, I hit some problems getting the tests to pass in the context of the test suite as a whole. My tests passed in isolation, but then failed while doing a full test suite run. That's when the worms started coming out of the can :bug: After some sleuthing, it turned out this was essentially the result of several issues intersecting:\r\n\r\n* There are certain events in the application lifecycle where the metadata schema can be modified after it is loaded e.g: https://github.com/simonw/datasette/blob/a562f2965552fb2dbbbd74df245c9965ee23d886/datasette/app.py#L299-L320 This means that sometimes what goes in isn't always exactly what comes out when you call `/-/metadata`.\r\n* Because the test fixtures use session scope for performance reasons if one unit test performs an action which mutates the metadata, that can impact on other unit tests which run after it using the same fixture.\r\n* Because the `self._metadata` property was being set with a simple assignment `self._metadata = metadata`, that created an object reference to the test fixture data, so operating on `self._metadata` was actually modifying the test fixture `METADATA` meaning that depending on when it was loaded in the test suite lifecycle, `METADATA` had different content, which was somewhat unexpected.\r\n\r\nAs such, I've added some band-aids in 3552024 and 6859fd8:\r\n* Switching the metadata object to a `deepcopy` of the input prevents us directly mutating the input fixture.\r\n* I've switched some of the tests to use a fixture with function scope instead of session scope so we're working on a clean copy that hasn't been mutated by other tests where necessary but keeping session scope in most cases for performance.\r\n* I haven't really addressed the fact that sometimes the metadata object gets mutated in place, so the object that is served from `/-/metadata` isn't necessarily always exactly the same as the file you fed into it on init. I'm not sure how much of a problem that is. The way the tests were written makes me think it was unexpected, but getting into it feels like too much scope creep for this PR so its probably best addressed as another issue.", "created_at": "2019-11-30T00:32:15Z", "updated_at": "2021-07-28T17:58:45Z", "closed_at": "2021-07-28T17:58:45Z", "merged_at": null, "merge_commit_sha": "e71b642474d54f986bc8857346103d8a10d84e6d", "assignee": null, "milestone": null, "draft": 0, "head": "6859fd8c5eef26f397aa949dc4edf3747e8ab0a5", "base": "a562f2965552fb2dbbbd74df245c9965ee23d886", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/644", "merged_by": null, "auto_merge": null} {"id": 354869391, "node_id": "MDExOlB1bGxSZXF1ZXN0MzU0ODY5Mzkx", "number": 652, "state": "closed", "locked": 0, "title": "Quick (and uninformed and perhaps misguided) attempt to add a url for hosting datasette at a particular host/URI", "user": {"value": 132978, "label": "terrycojones"}, "body": "As usual, I don't really know what I'm doing... so this is just a suggested approach. I've not written tests, I've not run the tests, I don't know if I've missed some absolute URLs that would need to have the leading slash dropped.\r\n\r\nBUT, I tested it with `--config base_url:http://127.0.0.1:8001/` on the command line and from what little I know about datasette it's at least working in some obvious cases.\r\n\r\nMy changes are based on what I saw in https://github.com/simonw/datasette/commit/8da2db4b71096b19e7a9ef1929369b8483d448bf (thanks!)\r\n\r\nI'm happy to be more thorough on this if you think it's worth pursuing.\r\n\r\nFixes #394 (he said, optimistically).", "created_at": "2019-12-18T23:37:16Z", "updated_at": "2020-03-24T22:14:50Z", "closed_at": "2020-03-24T22:14:50Z", "merged_at": null, "merge_commit_sha": "8e674de58c17c89c8a4a90bc3ec6e02151b354e5", "assignee": null, "milestone": null, "draft": 0, "head": "eaa636841e38d40360a74596ef1a0df50f6a86a5", "base": "a498d0fe6590f9bdbc4faf9e0dd5faeb3b06002c", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/652", "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": 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": 406677205, "node_id": "MDExOlB1bGxSZXF1ZXN0NDA2Njc3MjA1", "number": 730, "state": "closed", "locked": 0, "title": "Update pytest-asyncio requirement from ~=0.10.0 to >=0.10,<0.12", "user": {"value": 27856297, "label": "dependabot-preview[bot]"}, "body": "Updates the requirements on [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) to permit the latest version.\n
\nCommits\n\n
\n
\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language\n- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language\n- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language\n- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language\n- `@dependabot badge me` will comment on this PR with code to add a \"Dependabot enabled\" badge to your readme\n\nAdditionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com):\n- Update frequency (including time of day and day of week)\n- Pull request limits (per update run and/or open at any time)\n- Out-of-range updates (receive only lockfile updates, if desired)\n- Security updates (receive only security updates, if desired)\n\n\n\n
", "created_at": "2020-04-21T13:32:35Z", "updated_at": "2020-05-04T13:27:24Z", "closed_at": "2020-05-04T13:27:23Z", "merged_at": null, "merge_commit_sha": "460708c7107a7cf15971a9aa1040635f6bc1be6d", "assignee": null, "milestone": null, "draft": 0, "head": "11c67f82cdccc6e34cbff717e673451ac6172ef4", "base": "15e232180427e988174fdf88440c84b91d2d98d1", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/730", "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": 434085235, "node_id": "MDExOlB1bGxSZXF1ZXN0NDM0MDg1MjM1", "number": 848, "state": "closed", "locked": 0, "title": "Reload support for config_dir mode.", "user": {"value": 49260, "label": "amjith"}, "body": "A reference implementation for adding support to reload when datasette is in the config_dir mode. \r\n\r\nThis implementation is flawed since it is watching the entire directory and any changes to the database will reload the server and adding unrelated files to the directory will also reload the server. ", "created_at": "2020-06-14T02:34:46Z", "updated_at": "2020-07-03T02:44:54Z", "closed_at": "2020-07-03T02:44:53Z", "merged_at": null, "merge_commit_sha": "888538efdbf545c0df524ca590a17fb6c6fa2419", "assignee": null, "milestone": null, "draft": 0, "head": "0d100d15aca93fae200b3bc2e29dfd60aaa4b384", "base": "57879dc8b346a435804a9e45ffaacbf2a0228bc6", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/848", "merged_by": null, "auto_merge": null} {"id": 440735814, "node_id": "MDExOlB1bGxSZXF1ZXN0NDQwNzM1ODE0", "number": 868, "state": "open", "locked": 0, "title": "initial windows ci setup", "user": {"value": 702729, "label": "joshmgrant"}, "body": "Picking up the work done on #557 with a new PR. Seeing if I can get this working.", "created_at": "2020-06-26T18:49:13Z", "updated_at": "2021-07-10T23:41:43Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "b99adb1720a0b53ff174db54d0e4a67357b47f33", "assignee": null, "milestone": null, "draft": 0, "head": "c99cabae638958ef057438a92cb9a182ba4f8188", "base": "180c7a5328457aefdf847ada366e296fef4744f1", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/868", "merged_by": null, "auto_merge": null} {"id": 442505088, "node_id": "MDExOlB1bGxSZXF1ZXN0NDQyNTA1MDg4", "number": 883, "state": "open", "locked": 0, "title": "Skip counting hidden tables", "user": {"value": 3243482, "label": "abdusco"}, "body": "Potential fix for https://github.com/simonw/datasette/issues/859.\r\n\r\nDisabling table counts for hidden tables speeds up database page quite a bit. In my setup it reduced load time by 2/3 (~300 -> ~90ms)", "created_at": "2020-07-01T07:38:08Z", "updated_at": "2020-07-02T00:25:44Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "527624338acd38b97bb33b0a0b913d80e8345fee", "assignee": null, "milestone": null, "draft": 0, "head": "251884f58895faf8056b3dfdeae3bb92c5bc58ac", "base": "676bb64c877d73f8ff496cef4632f5a8a5a9283c", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/883", "merged_by": null, "auto_merge": null} {"id": 474703007, "node_id": "MDExOlB1bGxSZXF1ZXN0NDc0NzAzMDA3", "number": 952, "state": "closed", "locked": 0, "title": "Update black requirement from ~=19.10b0 to >=19.10,<21.0", "user": {"value": 27856297, "label": "dependabot-preview[bot]"}, "body": "Updates the requirements on [black](https://github.com/psf/black) to permit the latest version.\n
\nChangelog\n

Sourced from black's changelog.

\n
\n

20.8b1

\n

Packaging

\n
    \n
  • explicitly depend on Click 7.1.2 or newer as Black no longer works with versions\nolder than 7.0
  • \n
\n

20.8b0

\n

Black

\n
    \n
  • \n

    re-implemented support for explicit trailing commas: now it works consistently within\nany bracket pair, including nested structures (#1288 and duplicates)

    \n
  • \n
  • \n

    Black now reindents docstrings when reindenting code around it (#1053)

    \n
  • \n
  • \n

    Black now shows colored diffs (#1266)

    \n
  • \n
  • \n

    Black is now packaged using 'py3' tagged wheels (#1388)

    \n
  • \n
  • \n

    Black now supports Python 3.8 code, e.g. star expressions in return statements\n(#1121)

    \n
  • \n
  • \n

    Black no longer normalizes capital R-string prefixes as those have a\ncommunity-accepted meaning (#1244)

    \n
  • \n
  • \n

    Black now uses exit code 2 when specified configuration file doesn't exit (#1361)

    \n
  • \n
  • \n

    Black now works on AWS Lambda (#1141)

    \n
  • \n
  • \n

    added --force-exclude argument (#1032)

    \n
  • \n
  • \n

    removed deprecated --py36 option (#1236)

    \n
  • \n
  • \n

    fixed --diff output when EOF is encountered (#526)

    \n
  • \n
  • \n

    fixed # fmt: off handling around decorators (#560)

    \n
  • \n
  • \n

    fixed unstable formatting with some # type: ignore comments (#1113)

    \n
  • \n
  • \n

    fixed invalid removal on organizing brackets followed by indexing (#1575)

    \n
  • \n
  • \n

    introduced black-primer, a CI tool that allows us to run regression tests against\nexisting open source users of Black (#1402)

    \n
  • \n
  • \n

    introduced property-based fuzzing to our test suite based on Hypothesis and\nHypothersmith (#1566)

    \n
  • \n
  • \n

    implemented experimental and disabled by default long string rewrapping (#1132),\nhidden under a --experimental-string-processing flag while it's being worked on;

    \n
  • \n
\n\n
\n
\n
\nCommits\n\n
\n
\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language\n- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language\n- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language\n- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language\n- `@dependabot badge me` will comment on this PR with code to add a \"Dependabot enabled\" badge to your readme\n\nAdditionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com):\n- Update frequency (including time of day and day of week)\n- Pull request limits (per update run and/or open at any time)\n- Out-of-range updates (receive only lockfile updates, if desired)\n- Security updates (receive only security updates, if desired)\n\n\n\n
", "created_at": "2020-08-27T13:31:36Z", "updated_at": "2020-09-02T22:26:17Z", "closed_at": "2020-09-02T22:26:16Z", "merged_at": null, "merge_commit_sha": "37f8531b321855bdbc58960281957febaa59e4b9", "assignee": null, "milestone": null, "draft": 0, "head": "7b1354706467136f5030504fe799201b13333a95", "base": "86aefc39c5aca01b00dbc57ba386a6743c21fb46", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/952", "merged_by": null, "auto_merge": null} {"id": 496298180, "node_id": "MDExOlB1bGxSZXF1ZXN0NDk2Mjk4MTgw", "number": 986, "state": "closed", "locked": 0, "title": "Allow facet by primary keys, fixes #985", "user": {"value": 39452697, "label": "MrNaif2018"}, "body": "Hello! This PR makes it possible to facet by primary keys.\r\nDid I get it right that just removing the condition on UI side is enough? From testing it works fine with primary keys, just as with normal keys.\r\nIf so, should I also remove unused `data-is-pk`?", "created_at": "2020-10-01T14:18:55Z", "updated_at": "2020-10-01T16:51:45Z", "closed_at": "2020-10-01T16:51:45Z", "merged_at": null, "merge_commit_sha": "58906c597f1217381f5d746726bcb8bdfa8f52f8", "assignee": null, "milestone": null, "draft": 0, "head": "76f7094bd33f037a1c689a173f0dbbb988e6dcdd", "base": "141544613f9e76ddb74eee38d6f8ee1e0e70f833", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/986", "merged_by": null, "auto_merge": null} {"id": 500798091, "node_id": "MDExOlB1bGxSZXF1ZXN0NTAwNzk4MDkx", "number": 1008, "state": "open", "locked": 0, "title": "Add json_loads and json_dumps jinja2 filters", "user": {"value": 649467, "label": "mhalle"}, "body": "", "created_at": "2020-10-09T20:11:34Z", "updated_at": "2020-12-15T02:30:28Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "e33e91ca7c9b2fdeab9d8179ce0d603918b066aa", "assignee": null, "milestone": null, "draft": 0, "head": "40858989d47043743d6b1c9108528bec6a317e43", "base": "1bdbc8aa7f4fd7a768d456146e44da86cb1b36d1", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1008", "merged_by": null, "auto_merge": null} {"id": 505453900, "node_id": "MDExOlB1bGxSZXF1ZXN0NTA1NDUzOTAw", "number": 1030, "state": "open", "locked": 0, "title": "Make `package` command deal with a configuration directory argument", "user": {"value": 299380, "label": "frankier"}, "body": "Currently if we run `datasette package` on a configuration directory we'll get an exception when we try to hard link to the directory. This PR copies the tree and makes the Dockerfile run inspect on all *.db files.", "created_at": "2020-10-18T11:07:02Z", "updated_at": "2020-10-19T08:01:51Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "124142e4d2710525b09ff2bd2a7a787cbed163a4", "assignee": null, "milestone": null, "draft": 0, "head": "e0825334692967fec195e104cb6aa11095807a8e", "base": "c37a0a93ecb847e66cfe7b6f9452ba210fcae91b", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1030", "merged_by": null, "auto_merge": null} {"id": 505769462, "node_id": "MDExOlB1bGxSZXF1ZXN0NTA1NzY5NDYy", "number": 1031, "state": "closed", "locked": 0, "title": "Fallback to databases in inspect-data.json when no -i options are passed", "user": {"value": 299380, "label": "frankier"}, "body": "Currenlty `Datasette.__init__` checks immutables against None to decide whether to fallback to inspect-data.json. This patch modifies the serve command to pass None when no -i options are passed so this fallback works correctly.", "created_at": "2020-10-19T07:51:06Z", "updated_at": "2021-03-29T01:46:45Z", "closed_at": "2021-03-29T00:23:41Z", "merged_at": null, "merge_commit_sha": "3ee6b39e96ef684e1ac393bb269d804e957fee1d", "assignee": null, "milestone": null, "draft": 0, "head": "7e7eaa4e712b01de0b5a8a1b90145bdc1c3cd731", "base": "c37a0a93ecb847e66cfe7b6f9452ba210fcae91b", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1031", "merged_by": null, "auto_merge": null} {"id": 509590205, "node_id": "MDExOlB1bGxSZXF1ZXN0NTA5NTkwMjA1", "number": 1049, "state": "closed", "locked": 0, "title": "Add template block prior to extra URL loaders", "user": {"value": 82988, "label": "psychemedia"}, "body": "To handle packages that require Javascript state setting prior to loading a package (eg [`thebelab`](https://thebelab.readthedocs.io/en/latest/examples/minimal_example.html), provide a template block before the URLs are loaded.", "created_at": "2020-10-25T13:08:55Z", "updated_at": "2020-10-29T09:20:52Z", "closed_at": "2020-10-29T09:20:34Z", "merged_at": null, "merge_commit_sha": "99f994b14e2dbe22fda18b67dd5c824d359443fb", "assignee": null, "milestone": null, "draft": 0, "head": "50a743ad35684f09d3c3880f6af2019e59271237", "base": "42f4851e3e7885f1092f104d6c883cea40b12f02", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1049", "merged_by": null, "auto_merge": null} {"id": 532348919, "node_id": "MDExOlB1bGxSZXF1ZXN0NTMyMzQ4OTE5", "number": 1130, "state": "open", "locked": 0, "title": "Fix footer not sticking to bottom in short pages", "user": {"value": 3243482, "label": "abdusco"}, "body": "Fixes https://github.com/simonw/datasette/issues/1129", "created_at": "2020-12-04T07:29:01Z", "updated_at": "2021-06-15T13:27:48Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "af3aa34786f134af8073342a3c4bb74b968750fd", "assignee": null, "milestone": null, "draft": 0, "head": "8d4c69c6fb0ef741a19070f5172017ea3522e83c", "base": "49d8fc056844d5a537d6cfd96dab0dd5686fe718", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1130", "merged_by": null, "auto_merge": null} {"id": 545264436, "node_id": "MDExOlB1bGxSZXF1ZXN0NTQ1MjY0NDM2", "number": 1159, "state": "open", "locked": 0, "title": "Improve the display of facets information", "user": {"value": 552629, "label": "lovasoa"}, "body": "This PR changes the display of facets to hopefully make them more readable.\r\n\r\nBefore | After\r\n---|---\r\n![image](https://user-images.githubusercontent.com/552629/103084609-b1ec2980-45df-11eb-85bc-68ab8df3e8d9.png) | ![image](https://user-images.githubusercontent.com/552629/103085220-620e6200-45e1-11eb-8189-5dd5d3e2569e.png)\r\n", "created_at": "2020-12-24T11:01:47Z", "updated_at": "2023-07-31T18:57:59Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "0276c5609da34bfb660f65212e1a367e637979d7", "assignee": null, "milestone": {"value": 3268330, "label": "Datasette 1.0"}, "draft": 0, "head": "c820abd0bcb34d1ea5a03be64a2158ae7c42920c", "base": "a882d679626438ba0d809944f06f239bcba8ee96", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1159", "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": 588601627, "node_id": "MDExOlB1bGxSZXF1ZXN0NTg4NjAxNjI3", "number": 1254, "state": "closed", "locked": 0, "title": "Update Docker Spatialite version to 5.0.1 + add support for Spatialite topology functions", "user": {"value": 3200608, "label": "durkie"}, "body": "This requires adding the RT Topology library (Spatialite changed to RT Topology from LWGEOM between 4.4 and 5.0), as well as upgrading the GEOS version (which is the reason for switching to `python:3.7.10-slim-buster` as the base image.)\r\n\r\n`autoconf` and `libtool` are added to build RT Topology, and Spatialite is now built with `--disable-minizip` (minizip wasn't an option in 4.4 and I didn't want to add another dependency) and `--disable-dependency-tracking` which, according to Spatialite, \"speeds up one-time builds\"", "created_at": "2021-03-09T20:49:08Z", "updated_at": "2021-03-10T18:27:45Z", "closed_at": "2021-03-09T22:04:23Z", "merged_at": null, "merge_commit_sha": "bc09c84d6af4721b32f01f4d9186a6fbf9863081", "assignee": null, "milestone": null, "draft": 0, "head": "b103204155c2396d353fa195a320cee6aca258cf", "base": "d0fd833b8cdd97e1b91d0f97a69b494895d82bee", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1254", "merged_by": null, "auto_merge": null} {"id": 592548103, "node_id": "MDExOlB1bGxSZXF1ZXN0NTkyNTQ4MTAz", "number": 1260, "state": "closed", "locked": 0, "title": "Fix: code quality issues", "user": {"value": 25361949, "label": "withshubh"}, "body": "### Description\r\nHi :wave: I work at [DeepSource](https://deepsource.io), I ran DeepSource analysis on the forked copy of this repo and found some interesting [code quality issues](https://deepsource.io/gh/withshubh/datasette/issues/?category=recommended) in the codebase, opening this PR so you can assess if our platform is right and helpful for you.\r\n\r\n### Summary of changes\r\n\r\n- Replaced ternary syntax with if expression\r\n- Removed redundant `None` default\r\n- Used `is` to compare type of objects\r\n- Iterated dictionary directly\r\n- Removed unnecessary lambda expression\r\n- Refactored unnecessary `else` / `elif` when `if` block has a `return` statement\r\n- Refactored unnecessary `else` / `elif` when `if` block has a `raise` statement\r\n- Added .deepsource.toml to continuously analyze and detect code quality issues", "created_at": "2021-03-14T13:56:10Z", "updated_at": "2021-03-29T00:22:41Z", "closed_at": "2021-03-29T00:22:41Z", "merged_at": null, "merge_commit_sha": "bc868ae8c8152a25bcab7adb490c5b89411bdf3a", "assignee": null, "milestone": null, "draft": 0, "head": "90f5fb6d2fb36ddffc49acee924d042f2d5d1d58", "base": "8e18c7943181f228ce5ebcea48deb59ce50bee1f", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1260", "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": 613178968, "node_id": "MDExOlB1bGxSZXF1ZXN0NjEzMTc4OTY4", "number": 1296, "state": "open", "locked": 0, "title": "Dockerfile: use Ubuntu 20.10 as base", "user": {"value": 82332573, "label": "tmcl-it"}, "body": "This PR changes the main Dockerfile to use ubuntu:20.10 as base image instead of python:3.9.2-slim-buster (itself based on debian:buster-slim).\r\n\r\nThe Dockerfile is essentially the one from https://github.com/simonw/datasette/issues/1249#issuecomment-803698983 with some additional cleanups to slim it down.\r\n\r\nThis fixes a couple of issues:\r\n1. The SQLite version in Debian Buster (2.6.0) doesn't support generated columns\r\n2. Installing SpatiaLite from the Debian sid repositories has the side effect of also installing updates to libc and libstdc++ from sid.\r\n\r\nAs a bonus, the Docker image becomes smaller:\r\n\r\n\r\n```\r\n$ docker image ls\r\nREPOSITORY TAG IMAGE ID CREATED SIZE\r\ndatasette 0.56-ubuntu f7aca255140a 5 hours ago 212MB\r\ndatasetteproject/datasette 0.56 efb3b282f390 13 days ago 258MB\r\n```\r\n\r\n### Reproduction of the first issue\r\n\r\n```\r\n$ curl -O https://latest.datasette.io/fixtures.db\r\n % Total % Received % Xferd Average Speed Time Time Time Current\r\n Dload Upload Total Spent Left Speed\r\n100 260k 0 260k 0 0 489k 0 --:--:-- --:--:-- --:--:-- 489k\r\n\r\n$ docker run -v `pwd`:/mnt datasetteproject/datasette:0.56 datasette /mnt/fixtures.db\r\nTraceback (most recent call last):\r\n File \"/usr/local/bin/datasette\", line 8, in \r\n sys.exit(cli())\r\n File \"/usr/local/lib/python3.9/site-packages/click/core.py\", line 829, in __call__\r\n return self.main(*args, **kwargs)\r\n File \"/usr/local/lib/python3.9/site-packages/click/core.py\", line 782, in main\r\n rv = self.invoke(ctx)\r\n File \"/usr/local/lib/python3.9/site-packages/click/core.py\", line 1259, in invoke\r\n return _process_result(sub_ctx.command.invoke(sub_ctx))\r\n File \"/usr/local/lib/python3.9/site-packages/click/core.py\", line 1066, in invoke\r\n return ctx.invoke(self.callback, **ctx.params)\r\n File \"/usr/local/lib/python3.9/site-packages/click/core.py\", line 610, in invoke\r\n return callback(*args, **kwargs)\r\n File \"/usr/local/lib/python3.9/site-packages/datasette/cli.py\", line 544, in serve\r\n asyncio.get_event_loop().run_until_complete(check_databases(ds))\r\n File \"/usr/local/lib/python3.9/asyncio/base_events.py\", line 642, in run_until_complete\r\n return future.result()\r\n File \"/usr/local/lib/python3.9/site-packages/datasette/cli.py\", line 584, in check_databases\r\n await database.execute_fn(check_connection)\r\n File \"/usr/local/lib/python3.9/site-packages/datasette/database.py\", line 155, in execute_fn\r\n return await asyncio.get_event_loop().run_in_executor(\r\n File \"/usr/local/lib/python3.9/concurrent/futures/thread.py\", line 52, in run\r\n result = self.fn(*self.args, **self.kwargs)\r\n File \"/usr/local/lib/python3.9/site-packages/datasette/database.py\", line 153, in in_thread\r\n return fn(conn)\r\n File \"/usr/local/lib/python3.9/site-packages/datasette/utils/__init__.py\", line 892, in check_connection\r\n for r in conn.execute(\r\nsqlite3.DatabaseError: malformed database schema (generated_columns) - near \"AS\": syntax error\r\n```\r\n\r\nHere is the SQLite version:\r\n\r\n```\r\n$ docker run -v `pwd`:/mnt -it datasetteproject/datasette:0.56 /bin/bash\r\nroot@d9220d3b95dd:/# python3\r\nPython 3.9.2 (default, Mar 27 2021, 02:50:26) \r\n[GCC 8.3.0] on linux\r\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\r\n>>> import sqlite3\r\n>>> sqlite3.version\r\n'2.6.0'\r\n```\r\n\r\n### Reproduction of the second issue\r\n\r\n```\r\n$ docker build . -t datasette --build-arg VERSION=0.55\r\n[...snip...]\r\nThe following packages will be upgraded:\r\n libc-bin libc6 libstdc++6\r\n[...snip...]\r\nUnpacking libc6:amd64 (2.31-11) over (2.28-10) ...\r\n[...snip...]\r\nUnpacking libstdc++6:amd64 (10.2.1-6) over (8.3.0-6) ...\r\n[...snip...]\r\n```\r\n\r\nBoth libc and libstdc++ are backwards compatible, so the image still works, but it will result in a combination of libraries and Python versions that exists only in the Datasette image, so it's likely untested. In addition, since Debian sid is an always-changing rolling-release, the versions of libc, libstdc++, Spatialite, and their dependencies change frequently, so the library versions in the Datasette image will depend on the day when it was built.\r\n", "created_at": "2021-04-12T00:23:32Z", "updated_at": "2021-07-20T08:52:13Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "2ba522dbd7168a104a33621598c5a2460aae3e74", "assignee": null, "milestone": null, "draft": 0, "head": "8f00c312f6b8ab5cecbb8a698ab4ad659aabf4ef", "base": "c73af5dd72305f6a01ea94a2c76d52e5e26de38b", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1296", "merged_by": null, "auto_merge": null} {"id": 624635440, "node_id": "MDExOlB1bGxSZXF1ZXN0NjI0NjM1NDQw", "number": 1309, "state": "closed", "locked": 0, "title": "Bump black from 20.8b1 to 21.4b0", "user": {"value": 27856297, "label": "dependabot-preview[bot]"}, "body": "Bumps [black](https://github.com/psf/black) from 20.8b1 to 21.4b0.\n
\nRelease notes\n

Sourced from black's releases.

\n
\n

21.4b0

\n

Black

\n
    \n
  • \n

    Fixed a rare but annoying formatting instability created by the combination of\noptional trailing commas inserted by Black and optional parentheses looking at\npre-existing "magic" trailing commas. This fixes issue #1629 and all of its many many\nduplicates. (#2126)

    \n
  • \n
  • \n

    Black now processes one-line docstrings by stripping leading and trailing spaces,\nand adding a padding space when needed to break up """". (#1740)

    \n
  • \n
  • \n

    Black now cleans up leading non-breaking spaces in comments (#2092)

    \n
  • \n
  • \n

    Black now respects --skip-string-normalization when normalizing multiline\ndocstring quotes (#1637)

    \n
  • \n
  • \n

    Black no longer removes all empty lines between non-function code and decorators\nwhen formatting typing stubs. Now Black enforces a single empty line. (#1646)

    \n
  • \n
  • \n

    Black no longer adds an incorrect space after a parenthesized assignment expression\nin if/while statements (#1655)

    \n
  • \n
  • \n

    Added --skip-magic-trailing-comma / -C to avoid using trailing commas as a reason\nto split lines (#1824)

    \n
  • \n
  • \n

    fixed a crash when PWD=/ on POSIX (#1631)

    \n
  • \n
  • \n

    fixed "I/O operation on closed file" when using --diff (#1664)

    \n
  • \n
  • \n

    Prevent coloured diff output being interleaved with multiple files (#1673)

    \n
  • \n
  • \n

    Added support for PEP 614 relaxed decorator syntax on python 3.9 (#1711)

    \n
  • \n
  • \n

    Added parsing support for unparenthesized tuples and yield expressions in annotated\nassignments (#1835)

    \n
  • \n
  • \n

    use lowercase hex strings (#1692)

    \n
  • \n
  • \n

    added --extend-exclude argument (PR #2005)

    \n
  • \n
  • \n

    speed up caching by avoiding pathlib (#1950)

    \n
  • \n
  • \n

    --diff correctly indicates when a file doesn't end in a newline (#1662)

    \n
  • \n
  • \n

    Added --stdin-filename argument to allow stdin to respect --force-exclude rules\n(#1780)

    \n
  • \n
  • \n

    Lines ending with fmt: skip will now be not formatted (#1800)

    \n
  • \n
  • \n

    PR #2053: Black no longer relies on typed-ast for Python 3.8 and higher

    \n
  • \n
\n\n
\n

... (truncated)

\n
\n
\nChangelog\n

Sourced from black's changelog.

\n
\n

21.4b0

\n

Black

\n
    \n
  • \n

    Fixed a rare but annoying formatting instability created by the combination of\noptional trailing commas inserted by Black and optional parentheses looking at\npre-existing "magic" trailing commas. This fixes issue #1629 and all of its many many\nduplicates. (#2126)

    \n
  • \n
  • \n

    Black now processes one-line docstrings by stripping leading and trailing spaces,\nand adding a padding space when needed to break up """". (#1740)

    \n
  • \n
  • \n

    Black now cleans up leading non-breaking spaces in comments (#2092)

    \n
  • \n
  • \n

    Black now respects --skip-string-normalization when normalizing multiline\ndocstring quotes (#1637)

    \n
  • \n
  • \n

    Black no longer removes all empty lines between non-function code and decorators\nwhen formatting typing stubs. Now Black enforces a single empty line. (#1646)

    \n
  • \n
  • \n

    Black no longer adds an incorrect space after a parenthesized assignment expression\nin if/while statements (#1655)

    \n
  • \n
  • \n

    Added --skip-magic-trailing-comma / -C to avoid using trailing commas as a reason\nto split lines (#1824)

    \n
  • \n
  • \n

    fixed a crash when PWD=/ on POSIX (#1631)

    \n
  • \n
  • \n

    fixed "I/O operation on closed file" when using --diff (#1664)

    \n
  • \n
  • \n

    Prevent coloured diff output being interleaved with multiple files (#1673)

    \n
  • \n
  • \n

    Added support for PEP 614 relaxed decorator syntax on python 3.9 (#1711)

    \n
  • \n
  • \n

    Added parsing support for unparenthesized tuples and yield expressions in annotated\nassignments (#1835)

    \n
  • \n
  • \n

    added --extend-exclude argument (PR #2005)

    \n
  • \n
  • \n

    speed up caching by avoiding pathlib (#1950)

    \n
  • \n
  • \n

    --diff correctly indicates when a file doesn't end in a newline (#1662)

    \n
  • \n
  • \n

    Added --stdin-filename argument to allow stdin to respect --force-exclude rules\n(#1780)

    \n
  • \n
  • \n

    Lines ending with fmt: skip will now be not formatted (#1800)

    \n
  • \n
  • \n

    PR #2053: Black no longer relies on typed-ast for Python 3.8 and higher

    \n
  • \n
\n\n
\n

... (truncated)

\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://api.dependabot.com/badges/compatibility_score?dependency-name=black&package-manager=pip&previous-version=20.8b1&new-version=21.4b0)](https://dependabot.com/compatibility-score/?dependency-name=black&package-manager=pip&previous-version=20.8b1&new-version=21.4b0)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language\n- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language\n- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language\n- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language\n- `@dependabot badge me` will comment on this PR with code to add a \"Dependabot enabled\" badge to your readme\n\nAdditionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com):\n- Update frequency (including time of day and day of week)\n- Pull request limits (per update run and/or open at any time)\n- Out-of-range updates (receive only lockfile updates, if desired)\n- Security updates (receive only security updates, if desired)\n\n\n\n
", "created_at": "2021-04-27T20:28:11Z", "updated_at": "2021-04-28T18:26:06Z", "closed_at": "2021-04-28T18:26:04Z", "merged_at": null, "merge_commit_sha": "1220c60d8a6bb8e621543ef78d669a2bccc2a3c8", "assignee": null, "milestone": null, "draft": 0, "head": "20fc3fe2797b81a23cd464c1450d13086d53ea7f", "base": "a4bb2abce0764d49d255e5379f9e9c70981834ca", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1309", "merged_by": null, "auto_merge": null} {"id": 625457579, "node_id": "MDExOlB1bGxSZXF1ZXN0NjI1NDU3NTc5", "number": 1311, "state": "closed", "locked": 0, "title": "Bump black from 20.8b1 to 21.4b1", "user": {"value": 27856297, "label": "dependabot-preview[bot]"}, "body": "Bumps [black](https://github.com/psf/black) from 20.8b1 to 21.4b1.\n
\nRelease notes\n

Sourced from black's releases.

\n
\n

21.4b1

\n

Black

\n
    \n
  • \n

    Fix crash on docstrings ending with "\\ ". (#2142)

    \n
  • \n
  • \n

    Fix crash when atypical whitespace is cleaned out of dostrings (#2120)

    \n
  • \n
  • \n

    Reflect the --skip-magic-trailing-comma and --experimental-string-processing flags\nin the name of the cache file. Without this fix, changes in these flags would not take\neffect if the cache had already been populated. (#2131)

    \n
  • \n
  • \n

    Don't remove necessary parentheses from assignment expression containing assert /\nreturn statements. (#2143)

    \n
  • \n
\n

Packaging

\n
    \n
  • Bump pathspec to >= 0.8.1 to solve invalid .gitignore exclusion handling
  • \n
\n

21.4b0

\n

Black

\n
    \n
  • \n

    Fixed a rare but annoying formatting instability created by the combination of\noptional trailing commas inserted by Black and optional parentheses looking at\npre-existing "magic" trailing commas. This fixes issue #1629 and all of its many many\nduplicates. (#2126)

    \n
  • \n
  • \n

    Black now processes one-line docstrings by stripping leading and trailing spaces,\nand adding a padding space when needed to break up """". (#1740)

    \n
  • \n
  • \n

    Black now cleans up leading non-breaking spaces in comments (#2092)

    \n
  • \n
  • \n

    Black now respects --skip-string-normalization when normalizing multiline\ndocstring quotes (#1637)

    \n
  • \n
  • \n

    Black no longer removes all empty lines between non-function code and decorators\nwhen formatting typing stubs. Now Black enforces a single empty line. (#1646)

    \n
  • \n
  • \n

    Black no longer adds an incorrect space after a parenthesized assignment expression\nin if/while statements (#1655)

    \n
  • \n
  • \n

    Added --skip-magic-trailing-comma / -C to avoid using trailing commas as a reason\nto split lines (#1824)

    \n
  • \n
  • \n

    fixed a crash when PWD=/ on POSIX (#1631)

    \n
  • \n
  • \n

    fixed "I/O operation on closed file" when using --diff (#1664)

    \n
  • \n
  • \n

    Prevent coloured diff output being interleaved with multiple files (#1673)

    \n
  • \n
  • \n

    Added support for PEP 614 relaxed decorator syntax on python 3.9 (#1711)

    \n
  • \n
\n\n
\n

... (truncated)

\n
\n
\nChangelog\n

Sourced from black's changelog.

\n
\n

21.4b1

\n

Black

\n
    \n
  • \n

    Fix crash on docstrings ending with "\\ ". (#2142)

    \n
  • \n
  • \n

    Fix crash when atypical whitespace is cleaned out of dostrings (#2120)

    \n
  • \n
  • \n

    Reflect the --skip-magic-trailing-comma and --experimental-string-processing flags\nin the name of the cache file. Without this fix, changes in these flags would not take\neffect if the cache had already been populated. (#2131)

    \n
  • \n
  • \n

    Don't remove necessary parentheses from assignment expression containing assert /\nreturn statements. (#2143)

    \n
  • \n
\n

Packaging

\n
    \n
  • Bump pathspec to >= 0.8.1 to solve invalid .gitignore exclusion handling
  • \n
\n

21.4b0

\n

Black

\n
    \n
  • \n

    Fixed a rare but annoying formatting instability created by the combination of\noptional trailing commas inserted by Black and optional parentheses looking at\npre-existing "magic" trailing commas. This fixes issue #1629 and all of its many many\nduplicates. (#2126)

    \n
  • \n
  • \n

    Black now processes one-line docstrings by stripping leading and trailing spaces,\nand adding a padding space when needed to break up """". (#1740)

    \n
  • \n
  • \n

    Black now cleans up leading non-breaking spaces in comments (#2092)

    \n
  • \n
  • \n

    Black now respects --skip-string-normalization when normalizing multiline\ndocstring quotes (#1637)

    \n
  • \n
  • \n

    Black no longer removes all empty lines between non-function code and decorators\nwhen formatting typing stubs. Now Black enforces a single empty line. (#1646)

    \n
  • \n
  • \n

    Black no longer adds an incorrect space after a parenthesized assignment expression\nin if/while statements (#1655)

    \n
  • \n
  • \n

    Added --skip-magic-trailing-comma / -C to avoid using trailing commas as a reason\nto split lines (#1824)

    \n
  • \n
  • \n

    fixed a crash when PWD=/ on POSIX (#1631)

    \n
  • \n
  • \n

    fixed "I/O operation on closed file" when using --diff (#1664)

    \n
  • \n
  • \n

    Prevent coloured diff output being interleaved with multiple files (#1673)

    \n
  • \n
\n\n
\n

... (truncated)

\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://api.dependabot.com/badges/compatibility_score?dependency-name=black&package-manager=pip&previous-version=20.8b1&new-version=21.4b1)](https://dependabot.com/compatibility-score/?dependency-name=black&package-manager=pip&previous-version=20.8b1&new-version=21.4b1)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language\n- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language\n- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language\n- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language\n- `@dependabot badge me` will comment on this PR with code to add a \"Dependabot enabled\" badge to your readme\n\nAdditionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com):\n- Update frequency (including time of day and day of week)\n- Pull request limits (per update run and/or open at any time)\n- Out-of-range updates (receive only lockfile updates, if desired)\n- Security updates (receive only security updates, if desired)\n\n\n\n
", "created_at": "2021-04-28T18:25:58Z", "updated_at": "2021-04-29T13:58:11Z", "closed_at": "2021-04-29T13:58:09Z", "merged_at": null, "merge_commit_sha": "a8e260b47e0fb951790f155780354c8f8df88bc8", "assignee": null, "milestone": null, "draft": 0, "head": "baf303063a76800ec97abee46cd5f264e6a6447a", "base": "a4bb2abce0764d49d255e5379f9e9c70981834ca", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1311", "merged_by": null, "auto_merge": null} {"id": 630578735, "node_id": "MDExOlB1bGxSZXF1ZXN0NjMwNTc4NzM1", "number": 1318, "state": "closed", "locked": 0, "title": "Bump black from 21.4b2 to 21.5b0", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [black](https://github.com/psf/black) from 21.4b2 to 21.5b0.\n
\nRelease notes\n

Sourced from black's releases.

\n
\n

21.5b0

\n

Black

\n
    \n
  • Set --pyi mode if --stdin-filename ends in .pyi (#2169)
  • \n
  • Stop detecting target version as Python 3.9+ with pre-PEP-614 decorators that are\nbeing called but with no arguments (#2182)
  • \n
\n

Black-Primer

\n
    \n
  • Add --no-diff to black-primer to suppress formatting changes (#2187)
  • \n
\n
\n
\n
\nChangelog\n

Sourced from black's changelog.

\n
\n

21.5b0

\n

Black

\n
    \n
  • Set --pyi mode if --stdin-filename ends in .pyi (#2169)
  • \n
  • Stop detecting target version as Python 3.9+ with pre-PEP-614 decorators that are\nbeing called but with no arguments (#2182)
  • \n
\n

Black-Primer

\n
    \n
  • Add --no-diff to black-primer to suppress formatting changes (#2187)
  • \n
\n
\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=black&package-manager=pip&previous-version=21.4b2&new-version=21.5b0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n\n\n
", "created_at": "2021-05-05T13:07:51Z", "updated_at": "2021-05-11T13:12:32Z", "closed_at": "2021-05-11T13:12:31Z", "merged_at": null, "merge_commit_sha": "e864f5420abb7a5d135f8fe470183786b577ce9a", "assignee": null, "milestone": null, "draft": 0, "head": "e06c09911be52202940808d7a08df2e9b71b3af2", "base": "1b697539f5b53cec3fe13c0f4ada13ba655c88c7", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1318", "merged_by": null, "auto_merge": null} {"id": 655726387, "node_id": "MDExOlB1bGxSZXF1ZXN0NjU1NzI2Mzg3", "number": 1347, "state": "closed", "locked": 0, "title": "Test docker platform blair only", "user": {"value": 10801138, "label": "blairdrummond"}, "body": "", "created_at": "2021-05-28T02:47:09Z", "updated_at": "2021-05-28T02:47:28Z", "closed_at": "2021-05-28T02:47:28Z", "merged_at": null, "merge_commit_sha": "e755dd8c8cf7149046a8b5fd44aec07c4b2416d3", "assignee": null, "milestone": null, "draft": 0, "head": "f730725fd260ba6578c472c344269d5d5df4e650", "base": "7b106e106000713bbee31b34d694b3dadbd4818c", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1347", "merged_by": null, "auto_merge": null} {"id": 655741428, "node_id": "MDExOlB1bGxSZXF1ZXN0NjU1NzQxNDI4", "number": 1348, "state": "open", "locked": 0, "title": "DRAFT: add test and scan for docker images", "user": {"value": 10801138, "label": "blairdrummond"}, "body": "**NOTE: I don't think this PR is ready, since the arm/v6 and arm/v7 images are failing pytest due to missing dependencies (gcc and friends). But it's pretty close.**\r\n\r\nCloses https://github.com/simonw/datasette/issues/1344 . Using a build-matrix for the platforms and [this test](https://github.com/simonw/datasette/issues/1344#issuecomment-849820019), we test all the platforms in parallel. I also threw in container scanning.\r\n\r\n### Switch `pip install` to use either tags or commit shas\r\n\r\nNotably! This also [changes the Dockerfile](https://github.com/blairdrummond/datasette/blob/7fe5315d68e04fce64b5bebf4e2d7feec44f8546/Dockerfile#L20) so that it accepts tags or commit-shas.\r\n\r\n```\r\n# It's backwards compatible with tags, but also lets you use shas\r\nroot@712071df17af:/# pip install git+git://github.com/simonw/datasette.git@0.56 \r\nCollecting git+git://github.com/simonw/datasette.git@0.56 \r\n Cloning git://github.com/simonw/datasette.git (to revision 0.56) to /tmp/pip-req-build-u6dhm945 \r\n Running command git clone -q git://github.com/simonw/datasette.git /tmp/pip-req-build-u6dhm945 \r\n Running command git checkout -q af5a7f1c09f6a902bb2a25e8edf39c7034d2e5de \r\nCollecting Jinja2<2.12.0,>=2.10.3 \r\n Downloading Jinja2-2.11.3-py2.py3-none-any.whl (125 kB) \r\n```\r\n\r\nThis lets you build the containers in CI every push for testing, which maybe resolves [this problem](https://github.com/simonw/datasette/issues/1272#issuecomment-808648974)?\r\n\r\n# Workflow run example\r\n\r\nYou can see the results in my workflow [here](https://github.com/blairdrummond/datasette/pull/2/checks?check_run_id=2690570717). The commit history is different because I squashed this branch, also in the testing branch I had to change `github.com/simonw` to `github.com/blairdrummond` for the CI to pick up my git_sha.\r\n\r\n## Why did the builds fail?\r\n\r\n**NOTE:** The results of all the tests fail, but for different reasons! A few fail to install Rust, the amd64 passes the tests (phew!) but has critical CVEs which fail the container scan, the Arm/v6 and Arm/v7 seem to fail to install the test dependencies due to missing programs like `gcc`. (`gcc` is not sufficient though, as [this run](https://github.com/blairdrummond/datasette/pull/3/checks?check_run_id=2690672982) indicates) ", "created_at": "2021-05-28T03:02:12Z", "updated_at": "2021-05-28T03:06:16Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "eeea7cb835be0f0319cafccf50dffa6ad26826c5", "assignee": null, "milestone": null, "draft": 0, "head": "56cba8fb837cd938c2f9d7423ee43d62a81c8f7c", "base": "7b106e106000713bbee31b34d694b3dadbd4818c", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1348", "merged_by": null, "auto_merge": null} {"id": 678459554, "node_id": "MDExOlB1bGxSZXF1ZXN0Njc4NDU5NTU0", "number": 1385, "state": "closed", "locked": 0, "title": "Fix + improve get_metadata plugin hook docs", "user": {"value": 2670795, "label": "brandonrobertz"}, "body": "This fixes documentation inaccuracies and adds a disclaimer about the signature of the `get_metadata` hook.\r\n\r\nAddresses the following comments:\r\n- https://github.com/simonw/datasette/issues/1384#issuecomment-869069926\r\n- https://github.com/simonw/datasette/issues/1384#issuecomment-869075368", "created_at": "2021-06-27T05:43:20Z", "updated_at": "2021-09-13T18:53:11Z", "closed_at": "2021-09-13T18:53:11Z", "merged_at": null, "merge_commit_sha": "d283ef6806aabcd749623ffe4e69011879f7bfad", "assignee": null, "milestone": null, "draft": 0, "head": "8d78c8c22ddfa10c041f7b5dd9118d4c8674729f", "base": "67cbf0ae7243431bf13702e6e3ba466b619c4d6f", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1385", "merged_by": null, "auto_merge": null} {"id": 692557381, "node_id": "MDExOlB1bGxSZXF1ZXN0NjkyNTU3Mzgx", "number": 1399, "state": "open", "locked": 0, "title": "Multiple sort", "user": {"value": 87192257, "label": "jgryko5"}, "body": "Closes #197.\r\nI have added support for sorting by multiple parameters as mentioned in the issue above, and together with that, a suggestion on how to implement such sorting in the user interface.", "created_at": "2021-07-19T12:20:14Z", "updated_at": "2021-07-19T12:20:14Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "3161cd1202824921054cf78d82c1d8c07b140451", "assignee": null, "milestone": null, "draft": 0, "head": "739697660382e4d2974619b4a5605baef87d233a", "base": "c73af5dd72305f6a01ea94a2c76d52e5e26de38b", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1399", "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": 722480542, "node_id": "MDExOlB1bGxSZXF1ZXN0NzIyNDgwNTQy", "number": 1453, "state": "closed", "locked": 0, "title": "Bump black from 21.7b0 to 21.8b0", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [black](https://github.com/psf/black) from 21.7b0 to 21.8b0.\n
\nRelease notes\n

Sourced from black's releases.

\n
\n

21.8b0

\n

Black

\n
    \n
  • Add support for formatting Jupyter Notebook files (#2357)
  • \n
  • Move from appdirs dependency to platformdirs (#2375)
  • \n
  • Present a more user-friendly error if .gitignore is invalid (#2414)
  • \n
  • The failsafe for accidentally added backslashes in f-string expressions has been hardened to handle more edge cases during quote normalization (#2437)
  • \n
  • Avoid changing a function return type annotation's type to a tuple by adding a trailing comma (#2384)
  • \n
  • Parsing support has been added for unparenthesized walruses in set literals, set comprehensions, and indices (#2447).
  • \n
  • Pin setuptools-scm build-time dependency version (#2457)
  • \n
  • Exclude typing-extensions version 3.10.0.1 due to it being broken on Python 3.10 (#2460)
  • \n
\n

Blackd

\n
    \n
  • Replace sys.exit(-1) with raise ImportError as it plays more nicely with tools that scan installed packages (#2440)
  • \n
\n

Integrations

\n
    \n
  • The provided pre-commit hooks no longer specify language_version to avoid overriding default_language_version (#2430)
  • \n
\n
\n
\n
\nChangelog\n

Sourced from black's changelog.

\n
\n

21.8b0

\n

Black

\n
    \n
  • Add support for formatting Jupyter Notebook files (#2357)
  • \n
  • Move from appdirs dependency to platformdirs (#2375)
  • \n
  • Present a more user-friendly error if .gitignore is invalid (#2414)
  • \n
  • The failsafe for accidentally added backslashes in f-string expressions has been\nhardened to handle more edge cases during quote normalization (#2437)
  • \n
  • Avoid changing a function return type annotation's type to a tuple by adding a\ntrailing comma (#2384)
  • \n
  • Parsing support has been added for unparenthesized walruses in set literals, set\ncomprehensions, and indices (#2447).
  • \n
  • Pin setuptools-scm build-time dependency version (#2457)
  • \n
  • Exclude typing-extensions version 3.10.0.1 due to it being broken on Python 3.10\n(#2460)
  • \n
\n

Blackd

\n
    \n
  • Replace sys.exit(-1) with raise ImportError as it plays more nicely with tools that\nscan installed packages (#2440)
  • \n
\n

Integrations

\n
    \n
  • The provided pre-commit hooks no longer specify language_version to avoid overriding\ndefault_language_version (#2430)
  • \n
\n
\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=black&package-manager=pip&previous-version=21.7b0&new-version=21.8b0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", "created_at": "2021-08-30T13:13:39Z", "updated_at": "2021-09-14T13:10:40Z", "closed_at": "2021-09-14T13:10:38Z", "merged_at": null, "merge_commit_sha": "41e89206c9421f58bbc49b9a3f43439c351595a9", "assignee": null, "milestone": null, "draft": 0, "head": "4f492a79aec631904e3302857a0ab5ea10cbf1af", "base": "67cbf0ae7243431bf13702e6e3ba466b619c4d6f", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1453", "merged_by": null, "auto_merge": null} {"id": 729704537, "node_id": "MDExOlB1bGxSZXF1ZXN0NzI5NzA0NTM3", "number": 1465, "state": "open", "locked": 0, "title": "add support for -o --get /path", "user": {"value": 51016, "label": "ctb"}, "body": "Fixes https://github.com/simonw/datasette/issues/1459\r\n\r\nAdds support for `--open --get /path` to be used in combination.\r\n\r\nIf `--open` is provided alone, datasette will open a web page to a default URL.\r\nIf `--get ` is provided alone, datasette will output the result of doing a GET to that URL and then exit.\r\nIf `--open --get ` are provided together, datasette will open a web page to that URL.\r\n\r\nTODO items:\r\n- [ ] update documentation\r\n- [ ] print out error message when `--root --open --get ` is used\r\n- [ ] adjust code to require that `` start with a `/` when `-o --get ` is used\r\n- [ ] add test(s)\r\n\r\nnote, '@CTB' is used in this PR to flag code that needs revisiting.", "created_at": "2021-09-08T14:30:42Z", "updated_at": "2021-09-08T14:31:45Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "064e9511923fc4e50566bf9430b4a5b26f169357", "assignee": null, "milestone": null, "draft": 1, "head": "9b66a7d9ba55bad8a3b409ede8855f4b4fff1f88", "base": "d57ab156b35ec642549fb69d08279850065027d2", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1465", "merged_by": null, "auto_merge": null} {"id": 730020867, "node_id": "MDExOlB1bGxSZXF1ZXN0NzMwMDIwODY3", "number": 1467, "state": "closed", "locked": 0, "title": "Add Authorization header when CORS flag is set", "user": {"value": 3058200, "label": "jameslittle230"}, "body": "This PR adds the [`Access-Control-Allow-Headers`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers) flag when CORS mode is enabled.\r\n\r\nThis would fix https://github.com/simonw/datasette-auth-tokens/issues/4. When making cross-origin requests, the server must respond with all allowable HTTP headers. A Datasette instance using auth tokens must accept the `Authorization` HTTP header in order for cross-origin authenticated requests to take place.\r\n\r\nPlease let me know if there's a better way of doing this! I couldn't figure out a way to change the app's response from the plugin itself, so I'm starting here. If you'd rather this logic live in the plugin, I'd love any guidance you're able to give.", "created_at": "2021-09-08T22:14:41Z", "updated_at": "2021-10-17T02:29:07Z", "closed_at": "2021-10-14T18:54:18Z", "merged_at": null, "merge_commit_sha": "15f258735ddee555028a075c09e1e8f74069be70", "assignee": null, "milestone": null, "draft": 0, "head": "05109e8d61dedd477c4cedfb89b1da65610f70d1", "base": "d57ab156b35ec642549fb69d08279850065027d2", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1467", "merged_by": null, "auto_merge": null} {"id": 737690951, "node_id": "PR_kwDOBm6k_c4r-EVH", "number": 1475, "state": "open", "locked": 0, "title": "feat: allow joins using _through in both directions", "user": {"value": 5268174, "label": "bram2000"}, "body": "Currently the `_through` clause can only work if the FK relationship is defined in a specific direction. I don't think there is any reason for this limitation, as an FK allows joining in both directions.\r\n\r\nThis is an admittedly hacky change to implement bidirectional joins using `_through`. It does work for our use-case, but I don't know if there are other implications that I haven't thought of. Also if this change is desirable we probably want to make the code a little nicer.", "created_at": "2021-09-20T15:28:20Z", "updated_at": "2021-09-20T15:28:20Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "aa2f1c103730c0ede4ab67978288d91bbe1e00a6", "assignee": null, "milestone": null, "draft": 0, "head": "edf3c4c3271c8f13ab4c28ad88b817e115477e41", "base": "b28b6cd2fe97f7e193a235877abeec2c8eb0a821", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1475", "merged_by": null, "auto_merge": null} {"id": 754942128, "node_id": "PR_kwDOBm6k_c4s_4Cw", "number": 1484, "state": "closed", "locked": 0, "title": "GitHub Actions: Add Python 3.10 to the tests", "user": {"value": 3709715, "label": "cclauss"}, "body": null, "created_at": "2021-10-11T06:03:03Z", "updated_at": "2021-10-11T06:03:31Z", "closed_at": "2021-10-11T06:03:28Z", "merged_at": null, "merge_commit_sha": "69027b8c3e0e2236acd817a6fa5d32f762e3e9aa", "assignee": null, "milestone": null, "draft": 0, "head": "02c3218ca093df8b595d8ba7d88a32a0207b6385", "base": "0d5cc20aeffa3537cfc9296d01ec24b9c6e23dcf", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1484", "merged_by": null, "auto_merge": null} {"id": 764281468, "node_id": "PR_kwDOBm6k_c4tjgJ8", "number": 1495, "state": "open", "locked": 0, "title": "Allow routes to have extra options", "user": {"value": 536941, "label": "fgregg"}, "body": "Right now, datasette routes can only be a 2-tuple of `(regex, view_fn)`. \r\n\r\nIf it was possible for datasette to handle extra options, like [standard Django does](https://docs.djangoproject.com/en/3.2/topics/http/urls/#passing-extra-options-to-view-functions), it would add flexibility for plugin authors.\r\n\r\nFor example, if extra options were enabled, then it would be easy to make a single table the home page (#1284). This plugin would accomplish it.\r\n\r\n```python\r\nfrom datasette import hookimpl\r\nfrom datasette.views.table import TableView\r\n\r\n@hookimpl\r\ndef register_routes(datasette):\r\n return [\r\n (r\"^/$\", TableView.as_view(datasette), {'db_name': 'DB_NAME',\r\n 'table': 'TABLE_NAME'})\r\n ]\r\n```\r\n", "created_at": "2021-10-22T15:00:45Z", "updated_at": "2021-11-19T15:36:27Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "44969c5654748fb26ad05ab37245678f245f32e5", "assignee": null, "milestone": null, "draft": 0, "head": "fe7fa14b39846b919dfed44514a7d18d67e01dfd", "base": "ff9ccfb0310501a3b4b4ca24d73246a8eb3e7914", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1495", "merged_by": null, "auto_merge": null} {"id": 770511531, "node_id": "PR_kwDOBm6k_c4t7RKr", "number": 1500, "state": "closed", "locked": 0, "title": "Bump black from 21.9b0 to 21.10b0", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [black](https://github.com/psf/black) from 21.9b0 to 21.10b0.\n
\nRelease notes\n

Sourced from black's releases.

\n
\n

21.10b0

\n

Black

\n
    \n
  • Document stability policy, that will apply for non-beta releases (#2529)
  • \n
  • Add new --workers parameter (#2514)
  • \n
  • Fixed feature detection for positional-only arguments in lambdas (#2532)
  • \n
  • Bumped typed-ast version minimum to 1.4.3 for 3.10 compatiblity (#2519)
  • \n
  • Fixed a Python 3.10 compatibility issue where the loop argument was still being passed\neven though it has been removed (#2580)
  • \n
  • Deprecate Python 2 formatting support (#2523)
  • \n
\n

Blackd

\n
    \n
  • Remove dependency on aiohttp-cors (#2500)
  • \n
  • Bump required aiohttp version to 3.7.4 (#2509)
  • \n
\n

Black-Primer

\n
    \n
  • Add primer support for --projects (#2555)
  • \n
  • Print primer summary after individual failures (#2570)
  • \n
\n

Integrations

\n
    \n
  • Allow to pass target_version in the vim plugin (#1319)
  • \n
  • Install build tools in docker file and use multi-stage build to keep the image size\ndown (#2582)
  • \n
\n
\n
\n
\nChangelog\n

Sourced from black's changelog.

\n
\n

21.10b0

\n

Black

\n
    \n
  • Document stability policy, that will apply for non-beta releases (#2529)
  • \n
  • Add new --workers parameter (#2514)
  • \n
  • Fixed feature detection for positional-only arguments in lambdas (#2532)
  • \n
  • Bumped typed-ast version minimum to 1.4.3 for 3.10 compatiblity (#2519)
  • \n
  • Fixed a Python 3.10 compatibility issue where the loop argument was still being passed\neven though it has been removed (#2580)
  • \n
  • Deprecate Python 2 formatting support (#2523)
  • \n
\n

Blackd

\n
    \n
  • Remove dependency on aiohttp-cors (#2500)
  • \n
  • Bump required aiohttp version to 3.7.4 (#2509)
  • \n
\n

Black-Primer

\n
    \n
  • Add primer support for --projects (#2555)
  • \n
  • Print primer summary after individual failures (#2570)
  • \n
\n

Integrations

\n
    \n
  • Allow to pass target_version in the vim plugin (#1319)
  • \n
  • Install build tools in docker file and use multi-stage build to keep the image size\ndown (#2582)
  • \n
\n
\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=black&package-manager=pip&previous-version=21.9b0&new-version=21.10b0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", "created_at": "2021-11-01T13:11:23Z", "updated_at": "2021-11-17T13:14:00Z", "closed_at": "2021-11-17T13:13:58Z", "merged_at": null, "merge_commit_sha": "bc0c2637d3dabbbf55a1cb86df620683a2486ae5", "assignee": null, "milestone": null, "draft": 0, "head": "1b7f679b0d732162e8841c63fd4b8b0682627c10", "base": "2c31d1cd9cd3b63458ccbe391866499fa3f44978", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1500", "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": 782713972, "node_id": "PR_kwDOBm6k_c4up0R0", "number": 1514, "state": "closed", "locked": 0, "title": "Bump black from 21.9b0 to 21.11b0", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [black](https://github.com/psf/black) from 21.9b0 to 21.11b0.\n
\nRelease notes\n

Sourced from black's releases.

\n
\n

21.11b0

\n

Black

\n
    \n
  • Warn about Python 2 deprecation in more cases by improving Python 2 only syntax\ndetection (#2592)
  • \n
  • Add experimental PyPy support (#2559)
  • \n
  • Add partial support for the match statement. As it's experimental, it's only enabled\nwhen --target-version py310 is explicitly specified (#2586)
  • \n
  • Add support for parenthesized with (#2586)
  • \n
  • Declare support for Python 3.10 for running Black (#2562)
  • \n
\n

Integrations

\n
    \n
  • Fixed vim plugin with Python 3.10 by removing deprecated distutils import (#2610)
  • \n
  • The vim plugin now parses skip_magic_trailing_comma from pyproject.toml (#2613)
  • \n
\n

21.10b0

\n

Black

\n
    \n
  • Document stability policy, that will apply for non-beta releases (#2529)
  • \n
  • Add new --workers parameter (#2514)
  • \n
  • Fixed feature detection for positional-only arguments in lambdas (#2532)
  • \n
  • Bumped typed-ast version minimum to 1.4.3 for 3.10 compatiblity (#2519)
  • \n
  • Fixed a Python 3.10 compatibility issue where the loop argument was still being passed\neven though it has been removed (#2580)
  • \n
  • Deprecate Python 2 formatting support (#2523)
  • \n
\n

Blackd

\n
    \n
  • Remove dependency on aiohttp-cors (#2500)
  • \n
  • Bump required aiohttp version to 3.7.4 (#2509)
  • \n
\n

Black-Primer

\n
    \n
  • Add primer support for --projects (#2555)
  • \n
  • Print primer summary after individual failures (#2570)
  • \n
\n

Integrations

\n
    \n
  • Allow to pass target_version in the vim plugin (#1319)
  • \n
  • Install build tools in docker file and use multi-stage build to keep the image size\ndown (#2582)
  • \n
\n
\n
\n
\nChangelog\n

Sourced from black's changelog.

\n
\n

21.11b0

\n

Black

\n
    \n
  • Warn about Python 2 deprecation in more cases by improving Python 2 only syntax\ndetection (#2592)
  • \n
  • Add experimental PyPy support (#2559)
  • \n
  • Add partial support for the match statement. As it's experimental, it's only enabled\nwhen --target-version py310 is explicitly specified (#2586)
  • \n
  • Add support for parenthesized with (#2586)
  • \n
  • Declare support for Python 3.10 for running Black (#2562)
  • \n
\n

Integrations

\n
    \n
  • Fixed vim plugin with Python 3.10 by removing deprecated distutils import (#2610)
  • \n
  • The vim plugin now parses skip_magic_trailing_comma from pyproject.toml (#2613)
  • \n
\n

21.10b0

\n

Black

\n
    \n
  • Document stability policy, that will apply for non-beta releases (#2529)
  • \n
  • Add new --workers parameter (#2514)
  • \n
  • Fixed feature detection for positional-only arguments in lambdas (#2532)
  • \n
  • Bumped typed-ast version minimum to 1.4.3 for 3.10 compatibility (#2519)
  • \n
  • Fixed a Python 3.10 compatibility issue where the loop argument was still being passed\neven though it has been removed (#2580)
  • \n
  • Deprecate Python 2 formatting support (#2523)
  • \n
\n

Blackd

\n
    \n
  • Remove dependency on aiohttp-cors (#2500)
  • \n
  • Bump required aiohttp version to 3.7.4 (#2509)
  • \n
\n

Black-Primer

\n
    \n
  • Add primer support for --projects (#2555)
  • \n
  • Print primer summary after individual failures (#2570)
  • \n
\n

Integrations

\n
    \n
  • Allow to pass target_version in the vim plugin (#1319)
  • \n
  • Install build tools in docker file and use multi-stage build to keep the image size\ndown (#2582)
  • \n
\n
\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=black&package-manager=pip&previous-version=21.9b0&new-version=21.11b0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", "created_at": "2021-11-17T13:13:55Z", "updated_at": "2021-11-18T13:11:17Z", "closed_at": "2021-11-18T13:11:15Z", "merged_at": null, "merge_commit_sha": "348147b356cdd38cfdce412675a1d0865b93b3b1", "assignee": null, "milestone": null, "draft": 0, "head": "b02c35a00e2036ded2944890b04485213df4c8f4", "base": "0156c6b5e52d541e93f0d68e9245f20ae83bc933", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1514", "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": 806136219, "node_id": "PR_kwDOBm6k_c4wDKmb", "number": 1574, "state": "closed", "locked": 0, "title": "introduce new option for datasette package to use a slim base image", "user": {"value": 33631, "label": "fs111"}, "body": "The official python images on docker hub come with a slim variant that is significantly smaller than the default. The diff does not change the default, but allows to switch to the `slim` variant with commandline switch (`--slim-base-image`)\r\n\r\nSize comparison:\r\n\r\n```\r\n$ datasette package some.db -t fat --install \"datasette-basemap datasette-cluster-map\"\r\n\r\n$ datasette package some.db -t slim --slim-base-image --install \"datasette-basemap datasette-cluster-map\"\r\n\r\n$ docker images\r\nREPOSITORY TAG IMAGE ID CREATED SIZE\r\nfat latest 807b393ace0d 9 seconds ago 978MB\r\nslim latest 31bc5e63505c 8 minutes ago 191MB\r\n\r\n```", "created_at": "2021-12-19T21:18:19Z", "updated_at": "2022-08-15T08:49:31Z", "closed_at": "2022-08-15T08:49:31Z", "merged_at": null, "merge_commit_sha": "92ca4a2a9fb44e4cffc71444196753ad4a75a5c8", "assignee": null, "milestone": null, "draft": 0, "head": "8561f0343b2b4213416ca84c8071a5a290f15a42", "base": "8c401ee0f054de2f568c3a8302c9223555146407", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1574", "merged_by": null, "auto_merge": null} {"id": 811088967, "node_id": "PR_kwDOBm6k_c4wWDxH", "number": 1582, "state": "closed", "locked": 0, "title": "don't set far expiry if hash is '000'", "user": {"value": 536941, "label": "fgregg"}, "body": "This will close #1581.\r\n\r\nI couldn't find any unit tests related to the testing hashed urls, and I know that you want to break that code out of the core application (#1561), so I'm not quite sure what you would like me to for testing.", "created_at": "2021-12-28T18:16:13Z", "updated_at": "2022-03-24T04:07:58Z", "closed_at": "2022-03-24T04:07:58Z", "merged_at": null, "merge_commit_sha": "e7249b52558b4ddcd92e68a13bd02fb54a2b92f8", "assignee": null, "milestone": null, "draft": 0, "head": "216f3b32b88d85b33e45937ed89ac919d82c23b4", "base": "8c401ee0f054de2f568c3a8302c9223555146407", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1582", "merged_by": null, "auto_merge": null} {"id": 820898460, "node_id": "PR_kwDOBm6k_c4w7eqc", "number": 1593, "state": "closed", "locked": 0, "title": "Update pytest-asyncio requirement from <0.17,>=0.10 to >=0.10,<0.18", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Updates the requirements on [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) to permit the latest version.\n
\nRelease notes\n

Sourced from pytest-asyncio's releases.

\n
\n

pytest-asyncio 0.17.0

\n
\n

title: 'pytest-asyncio: pytest support for asyncio'

\n

\"image\"

\n

\"image\"

\n

\"image\"

\n

\"Supported

\n

\"image\"

\n

pytest-asyncio is an Apache2 licensed library, written in Python, for\ntesting asyncio code with pytest.

\n

asyncio code is usually written in the form of coroutines, which makes\nit slightly more difficult to test using normal testing tools.\npytest-asyncio provides useful fixtures and markers to make testing\neasier.

\n
@pytest.mark.asyncio\nasync def test_some_asyncio_code():\n    res = await library.do_something()\n    assert b"expected result" == res\n
\n

pytest-asyncio has been strongly influenced by\npytest-tornado.

\n

Features

\n
    \n
  • fixtures for creating and injecting versions of the asyncio event\nloop
  • \n
  • fixtures for injecting unused tcp/udp ports
  • \n
  • pytest markers for treating tests as asyncio coroutines
  • \n
  • easy testing with non-default event loops
  • \n
  • support for [async def]{.title-ref} fixtures and async generator\nfixtures
  • \n
  • support auto mode to handle all async fixtures and tests\nautomatically by asyncio; provide strict mode if a test suite\nshould work with different async frameworks simultaneously, e.g.\nasyncio and trio.
  • \n
\n

Installation

\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • 2e2d5d2 Bump to 0.17 release
  • \n
  • 90436c9 Fix pandoc installation procedure
  • \n
  • d291c66 Convert README.rst to Markdown for making githun release
  • \n
  • 141937b Fix release artifacts
  • \n
  • 696cf7d Fix trove classifier for asyncio
  • \n
  • 8ccb306 Build on tag
  • \n
  • cd84987 Release process automation (#252)
  • \n
  • 2eb12a7 Setup GitHub Workflows linter and yaml-reformatter (#253)
  • \n
  • d28b826 Bump codecov/codecov-action from 1 to 2.1.0 (#251)
  • \n
  • 2f523ba Configure dependabot version updater (#250)
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", "created_at": "2022-01-13T13:11:50Z", "updated_at": "2022-02-07T13:13:24Z", "closed_at": "2022-02-07T13:13:23Z", "merged_at": null, "merge_commit_sha": "750b3fa430a30ce5e44f146ffaa390937090db80", "assignee": null, "milestone": null, "draft": 0, "head": "df73ebb0c9a6e1d77ec08399608eb1422d43a779", "base": "8c401ee0f054de2f568c3a8302c9223555146407", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1593", "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": 883644303, "node_id": "PR_kwDOBm6k_c40q1eP", "number": 1665, "state": "closed", "locked": 0, "title": "Pin setup-gcloud to v0 instead of master", "user": {"value": 408570, "label": "sethvargo"}, "body": "setup-gcloud will be updating the branch name from master to main in\r\na future release. Even though GitHub will establish redirects, this\r\nwill break any GitHub Actions workflows that pin to master. This PR\r\nupdates your GitHub Actions workflows to pin to v0, which is the\r\nrecommended best practice.", "created_at": "2022-03-18T17:17:22Z", "updated_at": "2022-03-23T19:31:10Z", "closed_at": "2022-03-23T17:55:39Z", "merged_at": null, "merge_commit_sha": "5bd51d8eda65b25ce639a841944eb6b522768b2b", "assignee": null, "milestone": null, "draft": 0, "head": "c811c2181e298a48fdf50523525813c37f99e592", "base": "30e5f0e67c38054a8087a2a4eae3fc4d1779af90", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1665", "merged_by": null, "auto_merge": null} {"id": 889476515, "node_id": "PR_kwDOBm6k_c41BFWj", "number": 1685, "state": "closed", "locked": 0, "title": "Update jinja2 requirement from <3.1.0,>=2.10.3 to >=2.10.3,<3.2.0", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Updates the requirements on [jinja2](https://github.com/pallets/jinja) to permit the latest version.\n
\nRelease notes\n

Sourced from jinja2's releases.

\n
\n

3.1.0

\n

This is a feature release, which includes new features and removes previously deprecated features. The 3.1.x branch is now the supported bugfix branch, the 3.0.x branch has become a tag marking the end of support for that branch. We encourage everyone to upgrade, and to use a tool such as pip-tools to pin all dependencies and control upgrades. We also encourage upgrading to MarkupSafe 2.1.1, the latest version at this time.

\n\n
\n
\n
\nChangelog\n

Sourced from jinja2's changelog.

\n
\n

Version 3.1.0

\n

Released 2022-03-24

\n
    \n
  • \n

    Drop support for Python 3.6. :pr:1534

    \n
  • \n
  • \n

    Remove previously deprecated code. :pr:1544

    \n
      \n
    • WithExtension and AutoEscapeExtension are built-in now.
    • \n
    • contextfilter and contextfunction are replaced by\npass_context. evalcontextfilter and\nevalcontextfunction are replaced by pass_eval_context.\nenvironmentfilter and environmentfunction are replaced\nby pass_environment.
    • \n
    • Markup and escape should be imported from MarkupSafe.
    • \n
    • Compiled templates from very old Jinja versions may need to be\nrecompiled.
    • \n
    • Legacy resolve mode for Context subclasses is no longer\nsupported. Override resolve_or_missing instead of\nresolve.
    • \n
    • unicode_urlencode is renamed to url_quote.
    • \n
    \n
  • \n
  • \n

    Add support for native types in macros. :issue:1510

    \n
  • \n
  • \n

    The {% trans %} tag can use pgettext and npgettext by\npassing a context string as the first token in the tag, like\n{% trans "title" %}. :issue:1430

    \n
  • \n
  • \n

    Update valid identifier characters from Python 3.6 to 3.7.\n:pr:1571

    \n
  • \n
  • \n

    Filters and tests decorated with @async_variant are pickleable.\n:pr:1612

    \n
  • \n
  • \n

    Add items filter. :issue:1561

    \n
  • \n
  • \n

    Subscriptions ([0], etc.) can be used after filters, tests, and\ncalls when the environment is in async mode. :issue:1573

    \n
  • \n
  • \n

    The groupby filter is case-insensitive by default, matching\nother comparison filters. Added the case_sensitive parameter to\ncontrol this. :issue:1463

    \n
  • \n
  • \n

    Windows drive-relative path segments in template names will not\nresult in FileSystemLoader and PackageLoader loading from\ndrive-relative paths. :pr:1621

    \n
  • \n
\n

Version 3.0.3

\n

Released 2021-11-09

\n
    \n
  • Fix traceback rewriting internals for Python 3.10 and 3.11.\n:issue:1535
  • \n
  • Fix how the native environment treats leading and trailing spaces\nwhen parsing values on Python 3.10. :pr:1537
  • \n
\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • 84c0e2c Merge pull request #1625 from pallets/release-3.1.0
  • \n
  • 7b0c47f release version 3.1.0
  • \n
  • ede0f98 Merge pull request #1621 from pallets/template-safe-path
  • \n
  • 040088a use posixpath.join when loading template names
  • \n
  • a292075 Merge pull request #1620 from janfilips/patch-1
  • \n
  • 6e4df02 Fix formatting in tricks.rst
  • \n
  • 3a050b1 Merge pull request #1617 from pallets/docs-prose
  • \n
  • 4b63cd8 rewrite include statement section
  • \n
  • a98d482 clean up faq, move technical discussions
  • \n
  • 9de99f8 clean up engine comparisons
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", "created_at": "2022-03-25T13:12:13Z", "updated_at": "2022-09-05T18:36:49Z", "closed_at": "2022-09-05T18:36:48Z", "merged_at": null, "merge_commit_sha": "0a1124217cbfa997ae6b8976b3fc76fc443225fb", "assignee": null, "milestone": null, "draft": 0, "head": "933ce474aef535de92d89968816cbdde77c48c64", "base": "c496f2b663ff0cef908ffaaa68b8cb63111fb5f2", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1685", "merged_by": null, "auto_merge": null} {"id": 893039755, "node_id": "PR_kwDOBm6k_c41OrSL", "number": 1693, "state": "closed", "locked": 0, "title": "Bump black from 22.1.0 to 22.3.0", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [black](https://github.com/psf/black) from 22.1.0 to 22.3.0.\n
\nRelease notes\n

Sourced from black's releases.

\n
\n

22.3.0

\n

Preview style

\n
    \n
  • Code cell separators #%% are now standardised to # %% (#2919)
  • \n
  • Remove unnecessary parentheses from except statements (#2939)
  • \n
  • Remove unnecessary parentheses from tuple unpacking in for loops (#2945)
  • \n
  • Avoid magic-trailing-comma in single-element subscripts (#2942)
  • \n
\n

Configuration

\n
    \n
  • Do not format __pypackages__ directories by default (#2836)
  • \n
  • Add support for specifying stable version with --required-version (#2832).
  • \n
  • Avoid crashing when the user has no homedir (#2814)
  • \n
  • Avoid crashing when md5 is not available (#2905)
  • \n
  • Fix handling of directory junctions on Windows (#2904)
  • \n
\n

Documentation

\n
    \n
  • Update pylint config documentation (#2931)
  • \n
\n

Integrations

\n
    \n
  • Move test to disable plugin in Vim/Neovim, which speeds up loading (#2896)
  • \n
\n

Output

\n
    \n
  • In verbose, mode, log when Black is using user-level config (#2861)
  • \n
\n

Packaging

\n
    \n
  • Fix Black to work with Click 8.1.0 (#2966)
  • \n
  • On Python 3.11 and newer, use the standard library's tomllib instead of tomli\n(#2903)
  • \n
  • black-primer, the deprecated internal devtool, has been removed and copied to a\nseparate repository (#2924)
  • \n
\n

Parser

\n
    \n
  • Black can now parse starred expressions in the target of for and async for\nstatements, e.g for item in *items_1, *items_2: pass (#2879).
  • \n
\n
\n
\n
\nChangelog\n

Sourced from black's changelog.

\n
\n

22.3.0

\n

Preview style

\n
    \n
  • Code cell separators #%% are now standardised to # %% (#2919)
  • \n
  • Remove unnecessary parentheses from except statements (#2939)
  • \n
  • Remove unnecessary parentheses from tuple unpacking in for loops (#2945)
  • \n
  • Avoid magic-trailing-comma in single-element subscripts (#2942)
  • \n
\n

Configuration

\n
    \n
  • Do not format __pypackages__ directories by default (#2836)
  • \n
  • Add support for specifying stable version with --required-version (#2832).
  • \n
  • Avoid crashing when the user has no homedir (#2814)
  • \n
  • Avoid crashing when md5 is not available (#2905)
  • \n
  • Fix handling of directory junctions on Windows (#2904)
  • \n
\n

Documentation

\n
    \n
  • Update pylint config documentation (#2931)
  • \n
\n

Integrations

\n
    \n
  • Move test to disable plugin in Vim/Neovim, which speeds up loading (#2896)
  • \n
\n

Output

\n
    \n
  • In verbose, mode, log when Black is using user-level config (#2861)
  • \n
\n

Packaging

\n
    \n
  • Fix Black to work with Click 8.1.0 (#2966)
  • \n
  • On Python 3.11 and newer, use the standard library's tomllib instead of tomli\n(#2903)
  • \n
  • black-primer, the deprecated internal devtool, has been removed and copied to a\nseparate repository (#2924)
  • \n
\n

Parser

\n
    \n
  • Black can now parse starred expressions in the target of for and async for\nstatements, e.g for item in *items_1, *items_2: pass (#2879).
  • \n
\n
\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=black&package-manager=pip&previous-version=22.1.0&new-version=22.3.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", "created_at": "2022-03-29T13:11:09Z", "updated_at": "2022-06-28T13:11:38Z", "closed_at": "2022-06-28T13:11:36Z", "merged_at": null, "merge_commit_sha": "17e058e286104e9b9180df72c61eb9218f376c4d", "assignee": null, "milestone": null, "draft": 0, "head": "ec2d1e47dc39dd1db2048cd0a001aa9e4be20812", "base": "1d33fd03b3c211e0f48a8f3bde83880af89e4e69", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1693", "merged_by": null, "auto_merge": null} {"id": 959088871, "node_id": "PR_kwDOBm6k_c45Kojn", "number": 1753, "state": "closed", "locked": 0, "title": "Bump furo from 2022.4.7 to 2022.6.4.1", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [furo](https://github.com/pradyunsg/furo) from 2022.4.7 to 2022.6.4.1.\n
\nChangelog\n

Sourced from furo's changelog.

\n
\n

Changelog

\n\n

2022.06.04.1 -- Naughty Nickel bugfix

\n
    \n
  • Fix the URL used in the "Edit this page" for Read the Docs builds.
  • \n
\n

2022.06.04 -- Naughty Nickel

\n
    \n
  • \u2728 Advertise Sphinx 5 compatibility.
  • \n
  • \u2728 Change to basic-ng as the base theme (from {pypi}sphinx-basic-ng).
  • \n
  • Document site-wide announcement banners.
  • \n
  • Drop the pin on pygments.
  • \n
  • Improve edit button, using basic-ng's edit-this-page component.
  • \n
  • Tweak headings to better match what users expect.
  • \n
  • Tweak how Sphinx's default HTML is rendered, using docutils post-transforms (this replaces parsing+modifying it with BeautifulSoup).
  • \n
  • When built with docutils 0.18, footnotes are rendered differently and stylised differently in Furo.
  • \n
\n

2022.04.07 -- Magical Mauve

\n
    \n
  • \u2728 Make sphinx-copybutton look better.
  • \n
  • Add margin to indentations in line blocks.
  • \n
  • Add styling for non-arabic list styles
  • \n
  • Add support for html_baseurl.
  • \n
  • Improve "Edit this page" icon to be more accessible.
  • \n
  • Improve html_sidebars example.
  • \n
  • Tweak positioning of back to top on desktop.
  • \n
\n

2022.03.04 -- Lucent Lilac

\n
    \n
  • Improve support for print media.
  • \n
  • Reduce heading sizes for h3 and below.
  • \n
  • Don't allow selecting headerlink content.
  • \n
  • Improve how overflow wrapping is handled.
  • \n
  • Add a reference from the configuration variables to the color customisation page.
  • \n
\n

2022.02.23 -- Keen Kobi

\n
    \n
  • \u2728 Add a "Back to Top" button that shows up when scrolling up.
  • \n
  • Add a URL to GitHub in Project-URLs.
  • \n
  • Break long words in the prev/next buttons.
  • \n
  • Fix includes in Kitchen sink.
  • \n
\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • 1142fad Prepare release: 2022.06.04.1
  • \n
  • 211abb4 Update changelog
  • \n
  • 06cdba6 Fix the edit this page URL
  • \n
  • 43ce491 Back to development
  • \n
  • fb6e486 Prepare release: 2022.06.04
  • \n
  • 090b02e Update changelog
  • \n
  • 098d51d Fix the Just the Docs link
  • \n
  • 7fa8d08 Change to a post-transform for wrapping math blocks and table
  • \n
  • 51f1e52 Speed up determining if there's multiple toc entries
  • \n
  • 99a6ff8 Update caniuse-lite NPM package
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=furo&package-manager=pip&previous-version=2022.4.7&new-version=2022.6.4.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", "created_at": "2022-06-06T13:10:22Z", "updated_at": "2022-06-22T13:22:37Z", "closed_at": "2022-06-22T13:22:35Z", "merged_at": null, "merge_commit_sha": "7a9d91728ac8d15d558ffa4201ac3907f9e93905", "assignee": null, "milestone": null, "draft": 0, "head": "23a85154e276c001f920eacb9ad266cb227f7eab", "base": "2e9751672d4fe329b3c359d5b7b1992283185820", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1753", "merged_by": null, "auto_merge": null} {"id": 964640654, "node_id": "PR_kwDOBm6k_c45fz-O", "number": 1757, "state": "open", "locked": 0, "title": "feat: add a wildcard for _json columns", "user": {"value": 163156, "label": "ytjohn"}, "body": "This allows _json to accept a wildcard for when there are many JSON columns that the user wants to convert. I hope this is useful. I've tested it on our datasette and haven't ran into any issues. I imagine on a large set of results, there could be some performance issues, but it will probably be negligible for most use cases.\r\n\r\nOn a side note, I ran into an issue where I had to upgrade black on my system beyond the pinned version in setup.py. Here is the upstream issue < . I didn't include this in the PR yet since I didn't look into the issue too far, but I can if you would like.", "created_at": "2022-06-11T01:01:17Z", "updated_at": "2022-09-06T00:51:21Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "f302b919cb78f1e353fc14cb449cab4a93dcedc6", "assignee": null, "milestone": null, "draft": 0, "head": "1cdcd8894ce2bb76cf29f8ffcdadedbb6fa0dac1", "base": "2e9751672d4fe329b3c359d5b7b1992283185820", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1757", "merged_by": null, "auto_merge": null} {"id": 998860509, "node_id": "PR_kwDOBm6k_c47iWbd", "number": 1772, "state": "open", "locked": 0, "title": "Convert to setup.cfg", "user": {"value": 89725, "label": "kfdm"}, "body": "Recent versions of setuptools can run most things from setup.cfg so one can have a simpler version that does not require executing code on install.\r\n\r\nThe bulk of the changes were automated by running https://pypi.org/project/setup-py-upgrade/ with a few minor edits for the bits that it can not auto convert (the initial `get_long_description()` and `get_version()` can not be automatically converted)", "created_at": "2022-07-18T03:39:53Z", "updated_at": "2022-07-18T03:39:53Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "3abb0780f97901ae39f8a206c7c6d376f8574ffc", "assignee": null, "milestone": null, "draft": 0, "head": "c1b2f539c8d4cabe0a48d07bd8ce3fd1439a8f08", "base": "01369176b0a8943ab45292ffc6f9c929b80a00e8", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1772", "merged_by": null, "auto_merge": null} {"id": 1037685744, "node_id": "PR_kwDOBm6k_c492dPw", "number": 1793, "state": "closed", "locked": 0, "title": "Added a useful resource", "user": {"value": 111973926, "label": "MobiWancode"}, "body": "Have added a useful resource about the types of databases in SQL i.e SQLite, PostgreSQL, MySQL &, etc from the scaler topics.\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1793.org.readthedocs.build/en/1793/\n\r\n", "created_at": "2022-08-26T08:41:26Z", "updated_at": "2022-09-06T00:41:25Z", "closed_at": "2022-09-06T00:41:24Z", "merged_at": null, "merge_commit_sha": "40c948ac58afa155bbceaff70c43e85e58434188", "assignee": null, "milestone": null, "draft": 0, "head": "32a9224b7e107016e5ba0fc90ff86cfafad93b2f", "base": "ba35105eee2d3ba620e4f230028a02b2e2571df2", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1793", "merged_by": null, "auto_merge": null} {"id": 1046652968, "node_id": "PR_kwDOBm6k_c4-Yqgo", "number": 1799, "state": "closed", "locked": 0, "title": "Update aiofiles requirement from <0.9,>=0.4 to >=0.4,<22.2", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Updates the requirements on [aiofiles](https://github.com/Tinche/aiofiles) to permit the latest version.\n
\nCommits\n\n
\n
\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1799.org.readthedocs.build/en/1799/\n\r\n", "created_at": "2022-09-05T16:13:48Z", "updated_at": "2022-09-05T18:36:44Z", "closed_at": "2022-09-05T18:36:43Z", "merged_at": null, "merge_commit_sha": "1f3d29c2db5cbd793cd6224049cb3fe1f4a74b7e", "assignee": null, "milestone": null, "draft": 0, "head": "5abd55a273fedfb700f76b97dc88f5cc2620446e", "base": "ba35105eee2d3ba620e4f230028a02b2e2571df2", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1799", "merged_by": null, "auto_merge": null} {"id": 1067479608, "node_id": "PR_kwDOBm6k_c4_oHI4", "number": 1820, "state": "closed", "locked": 0, "title": "[SPIKE] Don't truncate query CSVs", "user": {"value": 536941, "label": "fgregg"}, "body": "Relates to #526 \r\n\r\nThis is a minimal set of changes needed for having *query* CSVs attempt to download all the rows. \r\n\r\nWhat's good about it is the minimalism.\r\n\r\nWhat's bad about it:\r\n\r\n1. We are abusing the `_size` argument to indicate we don't want truncation, which isn't the most obvious thing. Additionally, there are various checks that make sure the \"_size\" URL parameter is a positive integer, which we are relying on to prevent overloading.\r\n2. The default CSV on a table page will use the max_returned_rows argument. Changing this could be a breaking change, since that's currently a place that has some facilities for pagination. Additionally, i think there's a limit under the hood somewhere which if we removed could lead to sql timeouts\r\n3. There are similar reasons for leaving the current streaming method alone, as the current methods could allow for downloading very large files that could have a sql timeout if we tried to get them in one go.\r\n\r\n\r\n\r\n\r\n----\r\n:books: Documentation preview :books:: https://datasette--1820.org.readthedocs.build/en/1820/\r\n\r\n", "created_at": "2022-09-26T17:27:01Z", "updated_at": "2022-10-07T16:12:17Z", "closed_at": "2022-10-07T16:12:17Z", "merged_at": null, "merge_commit_sha": "bd62037d5cdf72c06fd4d78da162cbc1526c1ab6", "assignee": null, "milestone": null, "draft": 1, "head": "9bead2a95b74f3a2e0be2a9f1cb1f624aec22c2f", "base": "eff112498ecc499323c26612d707908831446d25", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1820", "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": 1079769381, "node_id": "PR_kwDOBm6k_c5AW_kl", "number": 1838, "state": "closed", "locked": 0, "title": "Open Datasette link in new tab", "user": {"value": 4399499, "label": "ocdtrekkie"}, "body": "This is technically a Sandstorm-specific fix (as external links do not work inside the grain frame), however, I think it is an improvement to the upstream project, so I wanted to propose it here rather than patching it in our package.\r\n\r\nThere's much opinions on the Internet about whether external links should open in a new tab by default or not, but I'd argue very few people who might click a \"powered by\" link intend to complete their interaction with the source page (a Datasette). And furthermore, users may be working within various queries or loading visualizations (navigating away when trying to plot a million GPS coordinates pretty much just resets your progress!), so linking away within the tab might be a frustrating or destructive act to one's work, even inadvertently.\r\n\r\noriginal report: https://github.com/ocdtrekkie/datasette-sandstorm/issues/1\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1838.org.readthedocs.build/en/1838/\n\r\n", "created_at": "2022-10-07T01:12:20Z", "updated_at": "2022-10-07T16:28:41Z", "closed_at": "2022-10-07T02:01:07Z", "merged_at": null, "merge_commit_sha": "9a7745ceef270893fa76a10ee70546f62d5110bd", "assignee": null, "milestone": null, "draft": 0, "head": "7f2a3376c348e9dd9ea926ab94ae6b610194e6c1", "base": "eff112498ecc499323c26612d707908831446d25", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1838", "merged_by": null, "auto_merge": null} {"id": 1081550456, "node_id": "PR_kwDOBm6k_c5AdyZ4", "number": 1840, "state": "closed", "locked": 0, "title": "test commit", "user": {"value": 102635518, "label": "7lingyuan"}, "body": "lalalalalalala\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1840.org.readthedocs.build/en/1840/\n\r\n", "created_at": "2022-10-10T05:15:26Z", "updated_at": "2022-10-10T09:11:50Z", "closed_at": "2022-10-10T09:11:50Z", "merged_at": null, "merge_commit_sha": null, "assignee": null, "milestone": null, "draft": 0, "head": "304ce7a516a0b361ae9f5f0059ce02eb675f69aa", "base": "b7fec7f9020b79c1fe60cc5a2def86b50eeb5af9", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1840", "merged_by": null, "auto_merge": null} {"id": 1102353255, "node_id": "PR_kwDOBm6k_c5BtJNn", "number": 1870, "state": "open", "locked": 0, "title": "don't use immutable=1, only mode=ro", "user": {"value": 536941, "label": "fgregg"}, "body": "Opening db files in immutable mode sometimes leads to the file being mutated, which causes duplication in the docker image layers: see #1836, #1480\r\n\r\nThat this happens in \"immutable\" mode is surprising, because the sqlite docs say that setting this should open the database as read only. \r\n\r\nhttps://www.sqlite.org/c3ref/open.html\r\n\r\n> immutable: The immutable parameter is a boolean query parameter that indicates that the database file is stored on read-only media. When immutable is set, SQLite assumes that the database file cannot be changed, even by a process with higher privilege, and so the database is opened read-only and all locking and change detection is disabled. Caution: Setting the immutable property on a database file that does in fact change can result in incorrect query results and/or [SQLITE_CORRUPT](https://www.sqlite.org/rescode.html#corrupt) errors. See also: [SQLITE_IOCAP_IMMUTABLE](https://www.sqlite.org/c3ref/c_iocap_atomic.html).\r\n\r\nPerhaps this is a bug in sqlite?\r\n\r\n\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1870.org.readthedocs.build/en/1870/\n\r\n", "created_at": "2022-10-27T23:33:04Z", "updated_at": "2023-10-03T19:12:37Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "fc2d316f9e22593d48036e9d81fe972bb5973016", "assignee": null, "milestone": null, "draft": 0, "head": "4faa4fd3b3e7f5eae758b713d0a121b960e2e261", "base": "bf00b0b59b6692bdec597ac9db4e0b497c5a47b4", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1870", "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": 1182593611, "node_id": "PR_kwDOBm6k_c5GfPJL", "number": 1974, "state": "closed", "locked": 0, "title": "Bump sphinx from 5.3.0 to 6.0.0", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 5.3.0 to 6.0.0.\n
\nRelease notes\n

Sourced from sphinx's releases.

\n
\n

v6.0.0

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n

v6.0.0b2

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n

v6.0.0b1

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n
\n
\n
\nChangelog\n

Sourced from sphinx's changelog.

\n
\n

Release 6.0.0 (released Dec 29, 2022)

\n

Dependencies

\n
    \n
  • #10468: Drop Python 3.6 support
  • \n
  • #10470: Drop Python 3.7, Docutils 0.14, Docutils 0.15, Docutils 0.16, and\nDocutils 0.17 support. Patch by Adam Turner
  • \n
\n

Incompatible changes

\n
    \n
  • \n

    #7405: Removed the jQuery and underscore.js JavaScript frameworks.

    \n

    These frameworks are no longer be automatically injected into themes from\nSphinx 6.0. If you develop a theme or extension that uses the\njQuery, $, or $u global objects, you need to update your\nJavaScript to modern standards, or use the mitigation below.

    \n

    The first option is to use the sphinxcontrib.jquery_ extension, which has been\ndeveloped by the Sphinx team and contributors. To use this, add\nsphinxcontrib.jquery to the extensions list in conf.py, or call\napp.setup_extension("sphinxcontrib.jquery") if you develop a Sphinx theme\nor extension.

    \n

    The second option is to manually ensure that the frameworks are present.\nTo re-add jQuery and underscore.js, you will need to copy jquery.js and\nunderscore.js from the Sphinx repository_ to your static directory,\nand add the following to your layout.html:

    \n

    .. code-block:: html+jinja

    \n

    {%- block scripts %}\n\n\n{{ super() }}\n{%- endblock %}

    \n

    .. _sphinxcontrib.jquery: https://github.com/sphinx-contrib/jquery/

    \n

    Patch by Adam Turner.

    \n
  • \n
  • \n

    #10471, #10565: Removed deprecated APIs scheduled for removal in Sphinx 6.0. See\n:ref:dev-deprecated-apis for details. Patch by Adam Turner.

    \n
  • \n
  • \n

    #10901: C Domain: Remove support for parsing pre-v3 style type directives and\nroles. Also remove associated configuration variables c_allow_pre_v3 and\nc_warn_on_allowed_pre_v3. Patch by Adam Turner.

    \n
  • \n
\n

Features added

\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • 5b56a23 Bump to 6.0.0 final
  • \n
  • f1d1e9c Update coverage workflow for Tox 4
  • \n
  • 66a738c Update coverage workflow for new configuration location
  • \n
  • 041e5f8 Add test coverage for 'today_fmt' reference substitution (#10980)
  • \n
  • da25145 Remove unnecessary conditional import in sphinx.ext.napoleon (#11043)
  • \n
  • 45a0ea9 Migrate coveragepy config into pyproject.toml (#11025)
  • \n
  • 3ec54f1 Create a pydata_sphinx_theme section in usage examples (#11046)
  • \n
  • 32bce8f Copy edit the tutorial (#11049)
  • \n
  • 9844162 Fix example using add_config_value (#10937)
  • \n
  • bf4a626 RTD builder: add graphviz depedendency (#11040)
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sphinx&package-manager=pip&previous-version=5.3.0&new-version=6.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1974.org.readthedocs.build/en/1974/\n\r\n", "created_at": "2023-01-02T13:04:26Z", "updated_at": "2023-01-05T13:02:42Z", "closed_at": "2023-01-05T13:02:40Z", "merged_at": null, "merge_commit_sha": "302502126c106d20af29005bbd3bc7e86ca69052", "assignee": null, "milestone": null, "draft": 0, "head": "1e213a39f9582f881c626888d704dd3f196f6ae7", "base": "572bdb5b8095bbdc5ec2aa95400055e49ea028cb", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1974", "merged_by": null, "auto_merge": null} {"id": 1186476109, "node_id": "PR_kwDOBm6k_c5GuDBN", "number": 1976, "state": "closed", "locked": 0, "title": "Bump sphinx from 5.3.0 to 6.1.0", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 5.3.0 to 6.1.0.\n
\nRelease notes\n

Sourced from sphinx's releases.

\n
\n

v6.1.0

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n

v6.0.1

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n

v6.0.0

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n

v6.0.0b2

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n

v6.0.0b1

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n
\n
\n
\nChangelog\n

Sourced from sphinx's changelog.

\n
\n

Release 6.1.0 (released Jan 05, 2023)

\n

Dependencies

\n\n

Incompatible changes

\n
    \n
  • #10979: gettext: Removed support for pluralisation in get_translation.\nThis was unused and complicated other changes to sphinx.locale.
  • \n
\n

Deprecated

\n
    \n
  • \n

    sphinx.util functions:

    \n
      \n
    • Renamed sphinx.util.typing.stringify()\nto sphinx.util.typing.stringify_annotation()
    • \n
    • Moved sphinx.util.xmlname_checker()\nto sphinx.builders.epub3._XML_NAME_PATTERN
    • \n
    \n

    Moved to sphinx.util.display:

    \n
      \n
    • sphinx.util.status_iterator
    • \n
    • sphinx.util.display_chunk
    • \n
    • sphinx.util.SkipProgressMessage
    • \n
    • sphinx.util.progress_message
    • \n
    \n

    Moved to sphinx.util.http_date:

    \n
      \n
    • sphinx.util.epoch_to_rfc1123
    • \n
    • sphinx.util.rfc1123_to_epoch
    • \n
    \n

    Moved to sphinx.util.exceptions:

    \n
      \n
    • sphinx.util.save_traceback
    • \n
    • sphinx.util.format_exception_cut_frames
    • \n
    \n
  • \n
\n

Features added

\n
    \n
  • Cache doctrees in the build environment during the writing phase.
  • \n
  • Make all writing phase tasks support parallel execution.
  • \n
  • #11072: Use PEP 604 (X | Y) display conventions for typing.Optional\nand typing.Optional types within the Python domain and autodoc.
  • \n
\n\n
\n

... (truncated)

\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sphinx&package-manager=pip&previous-version=5.3.0&new-version=6.1.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1976.org.readthedocs.build/en/1976/\n\r\n", "created_at": "2023-01-05T13:02:37Z", "updated_at": "2023-01-06T13:02:17Z", "closed_at": "2023-01-06T13:02:15Z", "merged_at": null, "merge_commit_sha": "21d3f3f92f1c902ba7acb267022b1c2b38a59bf3", "assignee": null, "milestone": null, "draft": 0, "head": "af76abcf2e9a6645e3d85acbc0da1f69d04e377c", "base": "c41278b46f7936b4b1a8a14bf285bed82c81c609", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1976", "merged_by": null, "auto_merge": null} {"id": 1188133959, "node_id": "PR_kwDOBm6k_c5G0XxH", "number": 1977, "state": "closed", "locked": 0, "title": "Bump sphinx from 5.3.0 to 6.1.1", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 5.3.0 to 6.1.1.\n
\nRelease notes\n

Sourced from sphinx's releases.

\n
\n

v6.1.1

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n

v6.1.0

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n

v6.0.1

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n

v6.0.0

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n

v6.0.0b2

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n

v6.0.0b1

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n
\n
\n
\nChangelog\n

Sourced from sphinx's changelog.

\n
\n

Release 6.1.1 (released Jan 05, 2023)

\n

Bugs fixed

\n
    \n
  • #11091: Fix util.nodes.apply_source_workaround for literal_block nodes\nwith no source information in the node or the node's parents.
  • \n
\n

Release 6.1.0 (released Jan 05, 2023)

\n

Dependencies

\n\n

Incompatible changes

\n
    \n
  • #10979: gettext: Removed support for pluralisation in get_translation.\nThis was unused and complicated other changes to sphinx.locale.
  • \n
\n

Deprecated

\n
    \n
  • \n

    sphinx.util functions:

    \n
      \n
    • Renamed sphinx.util.typing.stringify()\nto sphinx.util.typing.stringify_annotation()
    • \n
    • Moved sphinx.util.xmlname_checker()\nto sphinx.builders.epub3._XML_NAME_PATTERN
    • \n
    \n

    Moved to sphinx.util.display:

    \n
      \n
    • sphinx.util.status_iterator
    • \n
    • sphinx.util.display_chunk
    • \n
    • sphinx.util.SkipProgressMessage
    • \n
    • sphinx.util.progress_message
    • \n
    \n

    Moved to sphinx.util.http_date:

    \n
      \n
    • sphinx.util.epoch_to_rfc1123
    • \n
    • sphinx.util.rfc1123_to_epoch
    • \n
    \n

    Moved to sphinx.util.exceptions:

    \n
      \n
    • sphinx.util.save_traceback
    • \n
    \n
  • \n
\n\n
\n

... (truncated)

\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sphinx&package-manager=pip&previous-version=5.3.0&new-version=6.1.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1977.org.readthedocs.build/en/1977/\n\r\n", "created_at": "2023-01-06T13:02:12Z", "updated_at": "2023-01-09T13:06:17Z", "closed_at": "2023-01-09T13:06:14Z", "merged_at": null, "merge_commit_sha": "23faad99fb4d7282f6170742fa7e5ef2bbd935af", "assignee": null, "milestone": null, "draft": 0, "head": "a4eebeecd723ed9bc5517fd2f05320c11df3d749", "base": "c41278b46f7936b4b1a8a14bf285bed82c81c609", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1977", "merged_by": null, "auto_merge": null} {"id": 1190763280, "node_id": "PR_kwDOBm6k_c5G-ZsQ", "number": 1982, "state": "closed", "locked": 0, "title": "Bump sphinx from 5.3.0 to 6.1.2", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 5.3.0 to 6.1.2.\n
\nRelease notes\n

Sourced from sphinx's releases.

\n
\n

v6.1.2

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n

v6.1.1

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n

v6.1.0

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n

v6.0.1

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n

v6.0.0

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n

v6.0.0b2

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n

v6.0.0b1

\n

Changelog: https://www.sphinx-doc.org/en/master/changes.html

\n
\n
\n
\nChangelog\n

Sourced from sphinx's changelog.

\n
\n

Release 6.1.2 (released Jan 07, 2023)

\n

Bugs fixed

\n
    \n
  • \n

    #11101: LaTeX: div.topic_padding key of sphinxsetup documented at 5.1.0 was\nimplemented with name topic_padding

    \n
  • \n
  • \n

    #11099: LaTeX: shadowrule key of sphinxsetup causes PDF build to crash\nsince Sphinx 5.1.0

    \n
  • \n
  • \n

    #11096: LaTeX: shadowsize key of sphinxsetup causes PDF build to crash\nsince Sphinx 5.1.0

    \n
  • \n
  • \n

    #11095: LaTeX: shadow of :dudir:topic and contents_ boxes not in page\nmargin since Sphinx 5.1.0

    \n

    .. _contents: https://docutils.sourceforge.io/docs/ref/rst/directives.html#table-of-contents

    \n
  • \n
  • \n

    #11100: Fix copying images when running under parallel mode.

    \n
  • \n
\n

Release 6.1.1 (released Jan 05, 2023)

\n

Bugs fixed

\n
    \n
  • #11091: Fix util.nodes.apply_source_workaround for literal_block nodes\nwith no source information in the node or the node's parents.
  • \n
\n

Release 6.1.0 (released Jan 05, 2023)

\n

Dependencies

\n\n

Incompatible changes

\n
    \n
  • #10979: gettext: Removed support for pluralisation in get_translation.\nThis was unused and complicated other changes to sphinx.locale.
  • \n
\n

Deprecated

\n
    \n
  • \n

    sphinx.util functions:

    \n
      \n
    • Renamed sphinx.util.typing.stringify()\nto sphinx.util.typing.stringify_annotation()
    • \n
    \n
  • \n
\n\n
\n

... (truncated)

\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sphinx&package-manager=pip&previous-version=5.3.0&new-version=6.1.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1982.org.readthedocs.build/en/1982/\n\r\n", "created_at": "2023-01-09T13:06:11Z", "updated_at": "2023-01-10T02:03:21Z", "closed_at": "2023-01-10T02:03:19Z", "merged_at": null, "merge_commit_sha": "8e25eb9553a34438663c16a75d921f2ffe11b353", "assignee": null, "milestone": null, "draft": 0, "head": "700a12848da52e1f28a892d424319364e001ed6f", "base": "7b48664d751e59222c01c97a2739d53d6363bdda", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1982", "merged_by": null, "auto_merge": null} {"id": 1201985064, "node_id": "PR_kwDOBm6k_c5HpNYo", "number": 1996, "state": "open", "locked": 0, "title": "Document custom json encoder", "user": {"value": 25778, "label": "eyeseast"}, "body": "Closes #1983 \r\n\r\nAll documentation here. Edits welcome.\r\n\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1996.org.readthedocs.build/en/1996/\n\r\n", "created_at": "2023-01-18T16:54:14Z", "updated_at": "2023-01-19T12:55:57Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "b608768f75e8e15ee4618ebac8bcba2da47b2aa3", "assignee": null, "milestone": null, "draft": 0, "head": "96b8b7f1ecf3abaec5921aaedee251e36eed5339", "base": "6a352e99ab988dbf8fd22a100049caa6ad33f1ec", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1996", "merged_by": null, "auto_merge": null} {"id": 1215742203, "node_id": "PR_kwDOBm6k_c5IdsD7", "number": 2003, "state": "open", "locked": 0, "title": "Show referring tables and rows when the referring foreign key is compound", "user": {"value": 536941, "label": "fgregg"}, "body": "sqlite foreign keys can be compound, but that is not as well supported by datasette as single column foreign keys.\r\n\r\nin particular, \r\n\r\n1. in a table view, there is not a link from the row to the referenced row if the foreign key is compound\r\n2. in a row view, there is no listing of tables and rows that refer to the focal row if those referencing foreign keys are compound.\r\n\r\nBoth of these issues are discussed in #1099. \r\n\r\nThis PR only fixes the second one, because it's not clear what the right UX is for the first issue.\r\n\r\n![Screenshot 2023-01-24 at 19-47-40 nlrb bargaining_unit](https://user-images.githubusercontent.com/536941/214454749-d53deead-4151-4329-a5d4-8a7a454de7d3.png)\r\n\r\nSome things that might not be desirable about this approach.\r\n\r\n1. it changes the external API, by changing `column` => `columns` and `other_column` => `other_columns` (see inline comment for more discussion.\r\n2. There are various places where the plural foreign keys have to be checked for length and discarded or transformed to singular. \r\n", "created_at": "2023-01-24T21:31:31Z", "updated_at": "2023-01-25T18:44:42Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "fb3abeceb2785a582d2c120c7c1bf7dc3cd1de05", "assignee": null, "milestone": null, "draft": 0, "head": "1e5b42f9d6490926300953837cbaa571ef81d772", "base": "e4ebef082de90db4e1b8527abc0d582b7ae0bc9d", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2003", "merged_by": null, "auto_merge": null} {"id": 1216059840, "node_id": "PR_kwDOBm6k_c5Ie5nA", "number": 2004, "state": "open", "locked": 0, "title": "use single quotes for string literals, fixes #2001", "user": {"value": 193185, "label": "cldellow"}, "body": "This modernizes some uses of double quotes for string literals to use only single quotes, fixes simonw/datasette#2001\r\n\r\nWhile developing it, I manually enabled the stricter mode by using the code snippet at https://gist.github.com/cldellow/85bba507c314b127f85563869cd94820\r\n\r\nI think that code snippet isn't generally safe/portable, so I haven't tried to automate it in the tests.\r\n\r\n\r\n----\r\n:books: Documentation preview :books:: https://datasette--2004.org.readthedocs.build/en/2004/\r\n\r\n", "created_at": "2023-01-25T05:08:45Z", "updated_at": "2023-02-01T06:37:18Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "f678bfc05913a4b5ecf0c4cebe9ca8329c7d4a21", "assignee": null, "milestone": null, "draft": 0, "head": "dca7634c274e71fae0d95ea4ff1dfd987b9af63c", "base": "e4ebef082de90db4e1b8527abc0d582b7ae0bc9d", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2004", "merged_by": null, "auto_merge": null} {"id": 1220379312, "node_id": "PR_kwDOBm6k_c5IvYKw", "number": 2008, "state": "open", "locked": 0, "title": "array facet: don't materialize unnecessary columns", "user": {"value": 193185, "label": "cldellow"}, "body": "The presence of `inner.*` causes SQLite to materialize a row with all the columns. Those columns will be discarded later.\r\n\r\nInstead, we can select only the column we'll use. This lets SQLite's optimizer realize that the other columns in the CTE definition aren't needed.\r\n\r\nOn a test table with 278K rows, 98K of which had an array, this speeds up the facet calculation from 4 sec to 1 sec.\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--2008.org.readthedocs.build/en/2008/\n\r\n", "created_at": "2023-01-28T19:33:40Z", "updated_at": "2023-01-29T18:17:40Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "0eda5a57ead9bda8be4c9e5cd2fdb9f22e69222e", "assignee": null, "milestone": null, "draft": 0, "head": "f529a3001d35a114d2e622dcc7913c4c25a95ed8", "base": "0b4a28691468b5c758df74fa1d72a823813c96bf", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2008", "merged_by": null, "auto_merge": null} {"id": 1224851890, "node_id": "PR_kwDOBm6k_c5JAcGy", "number": 2014, "state": "closed", "locked": 0, "title": "Bump black from 22.12.0 to 23.1.0", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [black](https://github.com/psf/black) from 22.12.0 to 23.1.0.\n
\nRelease notes\n

Sourced from black's releases.

\n
\n

23.1.0

\n

Highlights

\n

This is the first release of 2023, and following our stability policy, it comes with a number of improvements to our stable style, notably improvements to empty line handling and the removal of redundant parentheses in several contexts.

\n

There are also many changes to the preview style; try out black --preview and give us feedback to help us set the stable style for next year.

\n

In addition to style changes, Black now automatically infers the supported Python versions from your pyproject.toml file, removing the need to set Black's target versions separately.

\n

Stable style

\n\n
    \n
  • Introduce the 2023 stable style, which incorporates most aspects of last year's preview style (#3418). Specific changes:\n
      \n
    • Enforce empty lines before classes and functions with sticky leading comments (#3302) (22.12.0)
    • \n
    • Reformat empty and whitespace-only files as either an empty file (if no newline is present) or as a single newline character (if a newline is present) (#3348) (22.12.0)
    • \n
    • Correctly handle trailing commas that are inside a line's leading non-nested parens (#3370) (22.12.0)
    • \n
    • --skip-string-normalization / -S now prevents docstring prefixes from being normalized as expected (#3168) (since 22.8.0)
    • \n
    • When using --skip-magic-trailing-comma or -C, trailing commas are stripped from subscript expressions with more than 1 element (#3209) (22.8.0)
    • \n
    • Fix a string merging/split issue when a comment is present in the middle of implicitly concatenated strings on its own line (#3227) (22.8.0)
    • \n
    • Docstring quotes are no longer moved if it would violate the line length limit (#3044, #3430) (22.6.0)
    • \n
    • Parentheses around return annotations are now managed (#2990) (22.6.0)
    • \n
    • Remove unnecessary parentheses around awaited objects (#2991) (22.6.0)
    • \n
    • Remove unnecessary parentheses in with statements (#2926) (22.6.0)
    • \n
    • Remove trailing newlines after code block open (#3035) (22.6.0)
    • \n
    • Code cell separators #%% are now standardised to # %% (#2919) (22.3.0)
    • \n
    • Remove unnecessary parentheses from except statements (#2939) (22.3.0)
    • \n
    • Remove unnecessary parentheses from tuple unpacking in for loops (#2945) (22.3.0)
    • \n
    • Avoid magic-trailing-comma in single-element subscripts (#2942) (22.3.0)
    • \n
    \n
  • \n
  • Fix a crash when a colon line is marked between # fmt: off and # fmt: on (#3439)
  • \n
\n

Preview style

\n\n
    \n
  • Format hex codes in unicode escape sequences in string literals (#2916)
  • \n
  • Add parentheses around if-else expressions (#2278)
  • \n
  • Improve performance on large expressions that contain many strings (#3467)
  • \n
  • Fix a crash in preview style with assert + parenthesized string (#3415)
  • \n
  • Fix crashes in preview style with walrus operators used in function return annotations and except clauses (#3423)
  • \n
  • Fix a crash in preview advanced string processing where mixed implicitly concatenated regular and f-strings start with an empty span (#3463)
  • \n
  • Fix a crash in preview advanced string processing where a standalone comment is placed before a dict's value (#3469)
  • \n
  • Fix an issue where extra empty lines are added when a decorator has # fmt: skip applied or there is a standalone comment between decorators (#3470)
  • \n
  • Do not put the closing quotes in a docstring on a separate line, even if the line is too long (#3430)
  • \n
  • Long values in dict literals are now wrapped in parentheses; correspondingly unnecessary parentheses around short values in dict literals are now removed; long string lambda values are now wrapped in parentheses (#3440)
  • \n
  • Fix two crashes in preview style involving edge cases with docstrings (#3451)
  • \n
  • Exclude string type annotations from improved string processing; fix crash when the return type annotation is stringified and spans across multiple lines (#3462)
  • \n
  • Wrap multiple context managers in parentheses when targeting Python 3.9+ (#3489)
  • \n
  • Fix several crashes in preview style with walrus operators used in with statements or tuples (#3473)
  • \n
  • Fix an invalid quote escaping bug in f-string expressions where it produced invalid code. Implicitly concatenated f-strings with different quotes can now be merged or quote-normalized by changing the quotes used in expressions. (#3509)
  • \n
\n\n
\n

... (truncated)

\n
\n
\nChangelog\n

Sourced from black's changelog.

\n
\n

23.1.0

\n

Highlights

\n

This is the first release of 2023, and following our\nstability policy,\nit comes with a number of improvements to our stable style, including improvements to\nempty line handling, removal of redundant parentheses in several contexts, and output\nthat highlights implicitly concatenated strings better.

\n

There are also many changes to the preview style; try out black --preview and give us\nfeedback to help us set the stable style for next year.

\n

In addition to style changes, Black now automatically infers the supported Python\nversions from your pyproject.toml file, removing the need to set Black's target\nversions separately.

\n

Stable style

\n\n
    \n
  • Introduce the 2023 stable style, which incorporates most aspects of last year's\npreview style (#3418). Specific changes:\n
      \n
    • Enforce empty lines before classes and functions with sticky leading comments\n(#3302) (22.12.0)
    • \n
    • Reformat empty and whitespace-only files as either an empty file (if no newline is\npresent) or as a single newline character (if a newline is present) (#3348)\n(22.12.0)
    • \n
    • Implicitly concatenated strings used as function args are now wrapped inside\nparentheses (#3307) (22.12.0)
    • \n
    • Correctly handle trailing commas that are inside a line's leading non-nested parens\n(#3370) (22.12.0)
    • \n
    • --skip-string-normalization / -S now prevents docstring prefixes from being\nnormalized as expected (#3168) (since 22.8.0)
    • \n
    • When using --skip-magic-trailing-comma or -C, trailing commas are stripped from\nsubscript expressions with more than 1 element (#3209) (22.8.0)
    • \n
    • Implicitly concatenated strings inside a list, set, or tuple are now wrapped inside\nparentheses (#3162) (22.8.0)
    • \n
    • Fix a string merging/split issue when a comment is present in the middle of\nimplicitly concatenated strings on its own line (#3227) (22.8.0)
    • \n
    • Docstring quotes are no longer moved if it would violate the line length limit\n(#3044, #3430) (22.6.0)
    • \n
    • Parentheses around return annotations are now managed (#2990) (22.6.0)
    • \n
    • Remove unnecessary parentheses around awaited objects (#2991) (22.6.0)
    • \n
    • Remove unnecessary parentheses in with statements (#2926) (22.6.0)
    • \n
    • Remove trailing newlines after code block open (#3035) (22.6.0)
    • \n
    • Code cell separators #%% are now standardised to # %% (#2919) (22.3.0)
    • \n
    • Remove unnecessary parentheses from except statements (#2939) (22.3.0)
    • \n
    • Remove unnecessary parentheses from tuple unpacking in for loops (#2945) (22.3.0)
    • \n
    • Avoid magic-trailing-comma in single-element subscripts (#2942) (22.3.0)
    • \n
    \n
  • \n
\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • b0d1fba Prepare release 23.1.0 (#3536)
  • \n
  • 69ca0a4 Infer target version based on project metadata (#3219)
  • \n
  • c4bd2e3 Draft for Black 2023 stable style (#3418)
  • \n
  • 226cbf0 Fix unsafe cast in linegen.py w/ await yield handling (#3533)
  • \n
  • f4ebc68 Upgrade isort (#3534)
  • \n
  • 6407ebb Remove Python version in the_basics.md (#3528)
  • \n
  • 196b1f3 Fix black --help output for --python-cell-magics option to be reproducibl...
  • \n
  • d950f15 Update document now that paren wrapping CMs on Python 3.9+ is implemented (#3...
  • \n
  • a36878e Fix an invalid quote escaping bug in f-string expressions (#3509)
  • \n
  • eabff67 Format hex code in unicode escape sequences in string literals (#2916)
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=black&package-manager=pip&previous-version=22.12.0&new-version=23.1.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--2014.org.readthedocs.build/en/2014/\n\r\n", "created_at": "2023-02-01T13:06:16Z", "updated_at": "2023-03-29T06:09:14Z", "closed_at": "2023-03-29T06:09:12Z", "merged_at": null, "merge_commit_sha": "38f5695c85ee073f2405dfe89d6ff798b01222f8", "assignee": null, "milestone": null, "draft": 0, "head": "c631684bc7bde78f77a564b337d2e2e6e87cfa7e", "base": "0b4a28691468b5c758df74fa1d72a823813c96bf", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2014", "merged_by": null, "auto_merge": null} {"id": 1238017010, "node_id": "PR_kwDOBm6k_c5JyqPy", "number": 2025, "state": "open", "locked": 0, "title": "Add database metadata to index.html template context", "user": {"value": 9993, "label": "palewire"}, "body": "Fixes #2016 \r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--2025.org.readthedocs.build/en/2025/\n\r\n", "created_at": "2023-02-12T11:16:58Z", "updated_at": "2023-02-12T11:17:14Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "a2d3bb02cf2c9b8ed7c788910fdda606108cd584", "assignee": null, "milestone": null, "draft": 0, "head": "912ed9de92d1bb9a28f50a2e08c5e7df2b827c15", "base": "0b4a28691468b5c758df74fa1d72a823813c96bf", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2025", "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": 1259276997, "node_id": "PR_kwDOBm6k_c5LDwrF", "number": 2031, "state": "open", "locked": 0, "title": "Expand foreign key references in row view as well", "user": {"value": 82332573, "label": "tmcl-it"}, "body": "Unlike the table view, the single row view does not resolve foreign key references into labels. This patch extracts the foreign key reference expansion code from TableView.data() into a standalone function that is then called by both TableView.data() and RowView.data().\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--2031.org.readthedocs.build/en/2031/\n\r\n", "created_at": "2023-03-01T18:43:09Z", "updated_at": "2023-03-24T18:35:25Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "ee7aec6175d0934c0420002529d21a767d2a527d", "assignee": null, "milestone": null, "draft": 0, "head": "ef25867492ce6eb69492aa37fcde98936a95365c", "base": "3feed1f66e2b746f349ee56970a62246a18bb164", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2031", "merged_by": null, "auto_merge": null} {"id": 1266742462, "node_id": "PR_kwDOBm6k_c5LgPS-", "number": 2034, "state": "open", "locked": 0, "title": "remove an unused `app` var in cli.py", "user": {"value": 4370201, "label": "wenhoujx"}, "body": "this var `app` isn't actually used? unless init it does some side-effect outside of the event loop, idon't think it's necessary. \r\n\r\nFeel free to ignore this PR if the deleted line actually does something.\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--2034.org.readthedocs.build/en/2034/\n\r\n", "created_at": "2023-03-07T18:19:05Z", "updated_at": "2023-03-29T20:56:20Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "9bd2128399e6dff33f97b3aa7adbd8f3a36daad7", "assignee": null, "milestone": null, "draft": 0, "head": "28239c5bed362f2b9ee9e780bf23e5f31b680b5d", "base": "1ad92a1d87d79084ebe524ed186c900ff042328c", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2034", "merged_by": null, "auto_merge": null}