{"id": 2029908157, "node_id": "I_kwDOBm6k_c54_fC9", "number": 2214, "title": "CSV export fails for some `text` foreign key references", "user": {"value": 2874, "label": "precipice"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2023-12-07T05:04:34Z", "updated_at": "2023-12-07T07:36:34Z", "closed_at": null, "author_association": "NONE", "pull_request": null, "body": "I'm starting this issue without a clear reproduction in case someone else has seen this behavior, and to use the issue as a notebook for research. \r\n\r\nI'm using Datasette with the [SWITRS](https://iswitrs.chp.ca.gov/) data set, which is a California Highway Patrol collection of traffic incident data from the past decade or so. I receive data from them in CSV and want to work with it in Datasette, then export it to CSV for mapping in Felt.com.\r\n\r\nTheir data makes extensive use of codes for incident column data (`1` for `Monday` and so on), some of it integer codes and some of it letter/text codes. The text codes are sometimes blank or `-`. During import, I'm creating lookup tables for foreign key references to make the Datasette UI presentation of the data easier to read.\r\n\r\nIf I import the data and set up the integer foreign keys, everything works fine, but if I set up the text foreign keys, CSV export starts to fail. \r\n\r\nThe foreign key configuration is as follows:\r\n\r\n```\r\n# Some tables use integer ids, like sensible tables do. Let's import them first\r\n# since we favor them.\r\n\r\nfor TABLE in DAY_OF_WEEK CHP_SHIFT POPULATION SPECIAL_COND BEAT_TYPE COLLISION_SEVERITY\r\ndo\r\n\tsqlite-utils create-table records.db $TABLE id integer name text --pk=id\r\n\tsqlite-utils insert records.db $TABLE lookup-tables/$TABLE.csv --csv\r\n\tsqlite-utils add-foreign-key records.db collisions $TABLE $TABLE id\r\n\tsqlite-utils create-index records.db collisions $TABLE\r\ndone\r\n\r\n# *Other* tables use letter keys, like they were raised by WOLVES. Let's put them\r\n# at the end of the import queue.\r\n\r\nfor TABLE in WEATHER_1 WEATHER_2 LOCATION_TYPE RAMP_INTERSECTION SIDE_OF_HWY \\\r\nPRIMARY_COLL_FACTOR PCF_CODE_OF_VIOL PCF_VIOL_CATEGORY TYPE_OF_COLLISION MVIW \\\r\nPED_ACTION ROAD_SURFACE ROAD_COND_1 ROAD_COND_2 LIGHTING CONTROL_DEVICE \\\r\nSTWD_VEHTYPE_AT_FAULT CHP_VEHTYPE_AT_FAULT PRIMARY_RAMP SECONDARY_RAMP\r\ndo\r\n\tsqlite-utils create-table records.db $TABLE key text name text --pk=key\r\n\tsqlite-utils insert records.db $TABLE lookup-tables/$TABLE.csv --csv\r\n\tsqlite-utils add-foreign-key records.db collisions $TABLE $TABLE key\r\n\tsqlite-utils create-index records.db collisions $TABLE\r\ndone\r\n```\r\n\r\nYou can see the full code and import script here: https://github.com/radical-bike-lobby/switrs-db\r\n\r\nIf I run this code and then hit the CSV export link in the Datasette interface (the simple link or the \"advanced\" dialog), export fails after a small number of CSV rows are written. I am not seeing any detailed error messages but this appears in the logging output:\r\n\r\n```\r\nINFO:     127.0.0.1:57885 - \"GET /records/collisions.csv?_facet=PRIMARY_RD&PRIMARY_RD=ASHBY+AV&_labels=on&_size=max HTTP/1.1\" 200 OK\r\nCaught this error: \r\n\r\n```\r\n\r\n(No other output follows `error:` other than a blank line.)\r\n\r\nI've stared at the rows directly after the error occurs and can't yet see what is causing the problem. I'm going to set up a development environment and see if I get any more detailed error output, and then stare more at some problematic lines to see if I can get a simple reproduction.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2214/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 2028698018, "node_id": "I_kwDOBm6k_c5463mi", "number": 2213, "title": "feature request: gzip compression of database downloads", "user": {"value": 536941, "label": "fgregg"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2023-12-06T14:35:03Z", "updated_at": "2023-12-06T15:05:46Z", "closed_at": null, "author_association": "CONTRIBUTOR", "pull_request": null, "body": "At the bottom of database pages, datasette gives users the opportunity to download the underlying sqlite database. It would be great if that could be served gzip compressed. \r\n\r\nthis is similar to #1213, but for me, i don't need datasette to compress html and json because my CDN layer does it for me, however, cloudflare at least, will not compress a mimetype of \"application\"\r\n\r\n(see list of mimetype: https://developers.cloudflare.com/speed/optimization/content/brotli/content-compression/)", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2213/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 2023057255, "node_id": "I_kwDOBm6k_c54lWdn", "number": 2212, "title": "Can't filter with numbers", "user": {"value": 605070, "label": "fzakaria"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2023-12-04T05:26:29Z", "updated_at": "2023-12-04T05:26:29Z", "closed_at": null, "author_association": "NONE", "pull_request": null, "body": "I have a schema that uses numbers for a column (actually it's a boolean 1 or 0 but SQLite doesn't have Boolean).\r\nI can't seem to get the facet to work or even filtering on this column.\r\n\r\nMy guess is that Datasette is \"stringifying\" the number and it's not matching?\r\nExample: https://debian-sqlelf.fly.dev/debian/elf_symbols?_sort_desc=name&_facet=exported&exported=0", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2212/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 2019811176, "node_id": "I_kwDOBm6k_c54Y99o", "number": 2211, "title": "Unreachable exception handlers for `sqlite3.OperationalError`", "user": {"value": 1214074, "label": "mattparmett"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2023-12-01T00:50:22Z", "updated_at": "2023-12-01T00:50:22Z", "closed_at": null, "author_association": "NONE", "pull_request": null, "body": "There are several places where `sqlite3.OperationalError` is caught as part of an exception handler which catches multiple exceptions, but is then caught again immediately afterwards by a dedicated exception handler.\r\n\r\nBecause the exception will be caught by the first handler, the logic in the second handler is unreachable and will never be executed.  If this is intended behavior, the second handler can be removed.  If this is not intended, and the second handler should be the one that catches this exception, then `sqlite3.OperationalError` should be removed from the tuple of exceptions in the first handler.\r\n\r\nThis issue was found via a CodeQL query on the repository, and I've listed the occurrences found by the query below.  There may be other instances of this issue in the code that were not surfaced by the query.  I'd be happy to share the query if others would like to view or run it.\r\n\r\nOne example:\r\n\r\nhttps://github.com/simonw/datasette/blob/452a587e236ef642cbc6ae345b58767ea8420cb5/datasette/views/database.py#L534-L537\r\n\r\nOther instances:\r\n\r\nhttps://github.com/simonw/datasette/blob/main/datasette/views/base.py#L266-L270\r\nhttps://github.com/simonw/datasette/blob/main/datasette/views/base.py#L452-L456", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2211/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1994861266, "node_id": "PR_kwDOBm6k_c5fhgOS", "number": 2209, "title": "Fix query for suggested facets with column named value", "user": {"value": 198537, "label": "rgieseke"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 3, "created_at": "2023-11-15T14:13:30Z", "updated_at": "2023-11-15T15:31:12Z", "closed_at": null, "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2209", "body": "See discussion in https://github.com/simonw/datasette/issues/2208\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2209.org.readthedocs.build/en/2209/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2209/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1994857251, "node_id": "I_kwDOBm6k_c525xsj", "number": 2208, "title": "No suggested facets when a column named 'value' is included", "user": {"value": 198537, "label": "rgieseke"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2023-11-15T14:11:17Z", "updated_at": "2023-11-15T14:18:59Z", "closed_at": null, "author_association": "CONTRIBUTOR", "pull_request": null, "body": "When a column named 'value' is included there are no suggested facets is shown as the query uses an alias of 'value'.\r\n\r\nhttps://github.com/simonw/datasette/blob/452a587e236ef642cbc6ae345b58767ea8420cb5/datasette/facets.py#L168-L174\r\n\r\nCurrently the following is shown (from https://latest.datasette.io/fixtures/facetable)\r\n\r\n![image](https://github.com/simonw/datasette/assets/198537/a919509a-ea88-461b-b25b-8b776720c7c5)\r\n\r\nWhen I add a column named 'value' only the JSON facets are processed.\r\n\r\n![image](https://github.com/simonw/datasette/assets/198537/092bd0b3-4c20-434e-88f8-47e2b8994a1d)\r\n\r\nI think that not using aliases could be a solution (except if someone wants to use a column named `count(*)` though this seems to be unlikely). I'll open a PR with that.\r\n\r\nThere is also a TODO with a similar question in the same file. I have not looked into that yet.\r\n\r\nhttps://github.com/simonw/datasette/blob/452a587e236ef642cbc6ae345b58767ea8420cb5/datasette/facets.py#L512", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2208/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1994845152, "node_id": "I_kwDOBm6k_c525uvg", "number": 2207, "title": "ModuleNotFoundError: No module named 'click_default_group", "user": {"value": 283441, "label": "honzajavorek"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2023-11-15T14:04:32Z", "updated_at": "2023-11-15T14:04:32Z", "closed_at": null, "author_association": "NONE", "pull_request": null, "body": "No matter what I do, I'm getting this error:\r\n\r\n```\r\n$ datasette\r\nTraceback (most recent call last):\r\n  File \"/Users/honza/Library/Caches/pypoetry/virtualenvs/juniorguru-Lgaxwd2n-py3.11/bin/datasette\", line 5, in <module>\r\n    from datasette.cli import cli\r\n  File \"/Users/honza/Library/Caches/pypoetry/virtualenvs/juniorguru-Lgaxwd2n-py3.11/lib/python3.11/site-packages/datasette/cli.py\", line 6, in <module>\r\n    from click_default_group import DefaultGroup\r\nModuleNotFoundError: No module named 'click_default_group'\r\n```\r\n\r\nI have datasette in my dependencies like this:\r\n\r\n```toml\r\n[tool.poetry.group.dev.dependencies]\r\ndatasette = {version = \"1.0a7\", allow-prereleases = true}\r\n```\r\n\r\nI had the latest regular version (not pre-release) there originally, but the result was the same:\r\n\r\n```toml\r\n[tool.poetry.group.dev.dependencies]\r\ndatasette = \"0.64.5\"\r\n```\r\n\r\nFull pyproject.toml is at https://github.com/honzajavorek/junior.guru/ Previously datasette worked for me, but I guess something had to upgrade and now I can't even launch it.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2207/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1983600865, "node_id": "PR_kwDOBm6k_c5e7WH7", "number": 2206, "title": "Bump the python-packages group with 1 update", "user": {"value": 49699333, "label": "dependabot[bot]"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2023-11-08T13:18:56Z", "updated_at": "2023-12-08T13:46:24Z", "closed_at": null, "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2206", "body": "Bumps the python-packages group with 1 update: [black](https://github.com/psf/black).\n\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/psf/black/releases\">black's releases</a>.</em></p>\n<blockquote>\n<h2>23.11.0</h2>\n<h3>Highlights</h3>\n<ul>\n<li>Support formatting ranges of lines with the new <code>--line-ranges</code> command-line option\n(<a href=\"https://redirect.github.com/psf/black/issues/4020\">#4020</a>)</li>\n</ul>\n<h3>Stable style</h3>\n<ul>\n<li>Fix crash on formatting bytes strings that look like docstrings (<a href=\"https://redirect.github.com/psf/black/issues/4003\">#4003</a>)</li>\n<li>Fix crash when whitespace followed a backslash before newline in a docstring (<a href=\"https://redirect.github.com/psf/black/issues/4008\">#4008</a>)</li>\n<li>Fix standalone comments inside complex blocks crashing Black (<a href=\"https://redirect.github.com/psf/black/issues/4016\">#4016</a>)</li>\n<li>Fix crash on formatting code like <code>await (a ** b)</code> (<a href=\"https://redirect.github.com/psf/black/issues/3994\">#3994</a>)</li>\n<li>No longer treat leading f-strings as docstrings. This matches Python's behaviour and\nfixes a crash (<a href=\"https://redirect.github.com/psf/black/issues/4019\">#4019</a>)</li>\n</ul>\n<h3>Preview style</h3>\n<ul>\n<li>Multiline dicts and lists that are the sole argument to a function are now\nindented less (<a href=\"https://redirect.github.com/psf/black/issues/3964\">#3964</a>)</li>\n<li>Multiline unpacked dicts and lists as the sole argument to a function are now also\nindented less (<a href=\"https://redirect.github.com/psf/black/issues/3992\">#3992</a>)</li>\n<li>In f-string debug expressions, quote types that are visible in the final string\nare now preserved (<a href=\"https://redirect.github.com/psf/black/issues/4005\">#4005</a>)</li>\n<li>Fix a bug where long <code>case</code> blocks were not split into multiple lines. Also enable\ngeneral trailing comma rules on <code>case</code> blocks (<a href=\"https://redirect.github.com/psf/black/issues/4024\">#4024</a>)</li>\n<li>Keep requiring two empty lines between module-level docstring and first function or\nclass definition (<a href=\"https://redirect.github.com/psf/black/issues/4028\">#4028</a>)</li>\n<li>Add support for single-line format skip with other comments on the same line (<a href=\"https://redirect.github.com/psf/black/issues/3959\">#3959</a>)</li>\n</ul>\n<h3>Configuration</h3>\n<ul>\n<li>Consistently apply force exclusion logic before resolving symlinks (<a href=\"https://redirect.github.com/psf/black/issues/4015\">#4015</a>)</li>\n<li>Fix a bug in the matching of absolute path names in <code>--include</code> (<a href=\"https://redirect.github.com/psf/black/issues/3976\">#3976</a>)</li>\n</ul>\n<h3>Performance</h3>\n<ul>\n<li>Fix mypyc builds on arm64 on macOS (<a href=\"https://redirect.github.com/psf/black/issues/4017\">#4017</a>)</li>\n</ul>\n<h3>Integrations</h3>\n<ul>\n<li>Black's pre-commit integration will now run only on git hooks appropriate for a code\nformatter (<a href=\"https://redirect.github.com/psf/black/issues/3940\">#3940</a>)</li>\n</ul>\n<h2>23.10.1</h2>\n<h3>Highlights</h3>\n<ul>\n<li>Maintanence release to get a fix out for GitHub Action edge case (<a href=\"https://redirect.github.com/psf/black/issues/3957\">#3957</a>)</li>\n</ul>\n<h3>Preview style</h3>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/psf/black/blob/main/CHANGES.md\">black's changelog</a>.</em></p>\n<blockquote>\n<h2>23.11.0</h2>\n<h3>Highlights</h3>\n<ul>\n<li>Support formatting ranges of lines with the new <code>--line-ranges</code> command-line option\n(<a href=\"https://redirect.github.com/psf/black/issues/4020\">#4020</a>)</li>\n</ul>\n<h3>Stable style</h3>\n<ul>\n<li>Fix crash on formatting bytes strings that look like docstrings (<a href=\"https://redirect.github.com/psf/black/issues/4003\">#4003</a>)</li>\n<li>Fix crash when whitespace followed a backslash before newline in a docstring (<a href=\"https://redirect.github.com/psf/black/issues/4008\">#4008</a>)</li>\n<li>Fix standalone comments inside complex blocks crashing Black (<a href=\"https://redirect.github.com/psf/black/issues/4016\">#4016</a>)</li>\n<li>Fix crash on formatting code like <code>await (a ** b)</code> (<a href=\"https://redirect.github.com/psf/black/issues/3994\">#3994</a>)</li>\n<li>No longer treat leading f-strings as docstrings. This matches Python's behaviour and\nfixes a crash (<a href=\"https://redirect.github.com/psf/black/issues/4019\">#4019</a>)</li>\n</ul>\n<h3>Preview style</h3>\n<ul>\n<li>Multiline dicts and lists that are the sole argument to a function are now indented\nless (<a href=\"https://redirect.github.com/psf/black/issues/3964\">#3964</a>)</li>\n<li>Multiline unpacked dicts and lists as the sole argument to a function are now also\nindented less (<a href=\"https://redirect.github.com/psf/black/issues/3992\">#3992</a>)</li>\n<li>In f-string debug expressions, quote types that are visible in the final string are\nnow preserved (<a href=\"https://redirect.github.com/psf/black/issues/4005\">#4005</a>)</li>\n<li>Fix a bug where long <code>case</code> blocks were not split into multiple lines. Also enable\ngeneral trailing comma rules on <code>case</code> blocks (<a href=\"https://redirect.github.com/psf/black/issues/4024\">#4024</a>)</li>\n<li>Keep requiring two empty lines between module-level docstring and first function or\nclass definition (<a href=\"https://redirect.github.com/psf/black/issues/4028\">#4028</a>)</li>\n<li>Add support for single-line format skip with other comments on the same line (<a href=\"https://redirect.github.com/psf/black/issues/3959\">#3959</a>)</li>\n</ul>\n<h3>Configuration</h3>\n<ul>\n<li>Consistently apply force exclusion logic before resolving symlinks (<a href=\"https://redirect.github.com/psf/black/issues/4015\">#4015</a>)</li>\n<li>Fix a bug in the matching of absolute path names in <code>--include</code> (<a href=\"https://redirect.github.com/psf/black/issues/3976\">#3976</a>)</li>\n</ul>\n<h3>Performance</h3>\n<ul>\n<li>Fix mypyc builds on arm64 on macOS (<a href=\"https://redirect.github.com/psf/black/issues/4017\">#4017</a>)</li>\n</ul>\n<h3>Integrations</h3>\n<ul>\n<li>Black's pre-commit integration will now run only on git hooks appropriate for a code\nformatter (<a href=\"https://redirect.github.com/psf/black/issues/3940\">#3940</a>)</li>\n</ul>\n<h2>23.10.1</h2>\n<h3>Highlights</h3>\n<ul>\n<li>Maintenance release to get a fix out for GitHub Action edge case (<a href=\"https://redirect.github.com/psf/black/issues/3957\">#3957</a>)</li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/psf/black/commit/2a1c67e0b2f81df602ec1f6e7aeb030b9709dc7c\"><code>2a1c67e</code></a> Prepare release 23.11.0 (<a href=\"https://redirect.github.com/psf/black/issues/4032\">#4032</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/72e7a2e43eef2aa0c83652bb6725eb004a2a69f3\"><code>72e7a2e</code></a> Remove redundant condition from <code>has_magic_trailing_comma</code> (<a href=\"https://redirect.github.com/psf/black/issues/4023\">#4023</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/1a7d9c2f58de1ffcbbe6d133f60f283601ba3f54\"><code>1a7d9c2</code></a> Preserve visible quote types for f-string debug expressions (<a href=\"https://redirect.github.com/psf/black/issues/4005\">#4005</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/f4c7be5445c87d9af5eba3d12faea62d2635e3d8\"><code>f4c7be5</code></a> docs: fix minor typo (<a href=\"https://redirect.github.com/psf/black/issues/4030\">#4030</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/2e4fac9d87615e904a49e46a9cab2293e0b13126\"><code>2e4fac9</code></a> Apply force exclude logic before symlink resolution (<a href=\"https://redirect.github.com/psf/black/issues/4015\">#4015</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/66008fda5dc07f5626e5f5d0dcefc476a9c12ab8\"><code>66008fd</code></a> [563] Fix standalone comments inside complex blocks crashing Black (<a href=\"https://redirect.github.com/psf/black/issues/4016\">#4016</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/50ed6221d97b265025abaa66116a7b185f2df5e2\"><code>50ed622</code></a> Fix long case blocks not split into multiple lines (<a href=\"https://redirect.github.com/psf/black/issues/4024\">#4024</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/46be1f8e54ac9a7d67723c0fa28c7bec13a0a2bf\"><code>46be1f8</code></a> Support formatting specified lines (<a href=\"https://redirect.github.com/psf/black/issues/4020\">#4020</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/ecbd9e8cf71f13068c7e6803a534e00363114c91\"><code>ecbd9e8</code></a> Fix crash with f-string docstrings (<a href=\"https://redirect.github.com/psf/black/issues/4019\">#4019</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/e808e61db8c7a8f9c7fd4b2fff2281141f6b2517\"><code>e808e61</code></a> Preview: Keep requiring two empty lines between module-level docstring and fi...</li>\n<li>Additional commits viewable in <a href=\"https://github.com/psf/black/compare/23.9.1...23.11.0\">compare view</a></li>\n</ul>\n</details>\n<br />\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=black&package-manager=pip&previous-version=23.9.1&new-version=23.11.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<details>\n<summary>Dependabot commands and options</summary>\n<br />\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 show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n</details>\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2206.org.readthedocs.build/en/2206/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2206/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1978023780, "node_id": "I_kwDOBm6k_c515j9k", "number": 2205, "title": "request.post_vars() method obliterates form keys with multiple values", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": {"value": 8755003, "label": "Datasette 1.0a-next"}, "comments": 3, "created_at": "2023-11-05T23:25:08Z", "updated_at": "2023-11-06T04:10:34Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "https://github.com/simonw/datasette/blob/452a587e236ef642cbc6ae345b58767ea8420cb5/datasette/utils/asgi.py#L137-L139\r\n\r\nIn GET requests you can do `?foo=1&foo=2` - you can do the same in POST requests, but the `dict()` call here eliminates those duplicates.\r\n\r\nYou can't even try calling `post_body()` and implement your own custom parsing because of:\r\n- #2204", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2205/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1978022687, "node_id": "I_kwDOBm6k_c515jsf", "number": 2204, "title": "request.post_body() can only be called once", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2023-11-05T23:22:03Z", "updated_at": "2023-11-05T23:23:23Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "This code here:\r\n\r\nhttps://github.com/simonw/datasette/blob/452a587e236ef642cbc6ae345b58767ea8420cb5/datasette/utils/asgi.py#L127-L135\r\n\r\nIt consumes the messages, which means if you try to call it a second time you won't be able to get at the body.\r\n\r\nThis is efficient - we don't end up with a `request` object property with potentially megabytes of content that we never look at again - but it's inconvenient for cases like middleware or functions where we don't know if the body has been consumed yet or not.\r\n\r\nPotential solution: set `request._body` the first time it is called, and return that on subsequent calls.\r\n\r\nPotential optimization: only do this for bodies that are shorter than a certain threshold - maybe 1MB - and raise an exception if you attempt to call `post_body()` multiple times against one of those larger bodies.\r\n\r\nI'm a bit nervous about that option though, since it could result in errors that don't show up in testing but do show up in production.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2204/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1977726056, "node_id": "I_kwDOBm6k_c514bRo", "number": 2203, "title": "custom plugin not seen as sql function", "user": {"value": 7113541, "label": "LyzardKing"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2023-11-05T10:30:19Z", "updated_at": "2023-11-05T10:30:19Z", "closed_at": null, "author_association": "NONE", "pull_request": null, "body": "Hi, I'm not sure if this is the right repo for this issue.\r\n\r\nI'm using datasette with the parquet (to read a duckdb), and jellyfish plugins. Both work perfectly.\r\n\r\nNow I need to create a simple plugin that uses the python rouge package and returns a similarity score (similarly to how the jellyfish plugin works).\r\nIf I create a custom plugin, even the example hello_world one, copied directly from the tutorial, I get the following error:\r\n```duckdb.duckdb.CatalogException: Catalog Error: Scalar Function with name hello_world does not exist!```\r\n\r\nSince the jellyfish plugin doesn't do anything more complex, I'm wondering if there is some other kind of issue with my setup.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2203/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1959278971, "node_id": "PR_kwDOBm6k_c5dpF-F", "number": 2202, "title": "Bump the python-packages group with 1 update", "user": {"value": 49699333, "label": "dependabot[bot]"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 2, "created_at": "2023-10-24T13:40:21Z", "updated_at": "2023-11-08T13:19:03Z", "closed_at": "2023-11-08T13:19:01Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2202", "body": "Bumps the python-packages group with 1 update: [black](https://github.com/psf/black).\n\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/psf/black/releases\">black's releases</a>.</em></p>\n<blockquote>\n<h2>23.10.1</h2>\n<h3>Highlights</h3>\n<ul>\n<li>Maintanence release to get a fix out for GitHub Action edge case (<a href=\"https://redirect.github.com/psf/black/issues/3957\">#3957</a>)</li>\n</ul>\n<h3>Preview style</h3>\n<ul>\n<li>Fix merging implicit multiline strings that have inline comments (<a href=\"https://redirect.github.com/psf/black/issues/3956\">#3956</a>)</li>\n<li>Allow empty first line after block open before a comment or compound statement (<a href=\"https://redirect.github.com/psf/black/issues/3967\">#3967</a>)</li>\n</ul>\n<h3>Packaging</h3>\n<ul>\n<li>Change Dockerfile to hatch + compile black (<a href=\"https://redirect.github.com/psf/black/issues/3965\">#3965</a>)</li>\n</ul>\n<h3>Integrations</h3>\n<ul>\n<li>The summary output for GitHub workflows is now suppressible using the <code>summary</code>\nparameter. (<a href=\"https://redirect.github.com/psf/black/issues/3958\">#3958</a>)</li>\n<li>Fix the action failing when Black check doesn't pass (<a href=\"https://redirect.github.com/psf/black/issues/3957\">#3957</a>)</li>\n</ul>\n<h3>Documentation</h3>\n<ul>\n<li>It is known Windows documentation CI is broken\n<a href=\"https://redirect.github.com/psf/black/issues/3968\">psf/black#3968</a></li>\n</ul>\n<h2>23.10.0</h2>\n<h3>Stable style</h3>\n<ul>\n<li>Fix comments getting removed from inside parenthesized strings (<a href=\"https://redirect.github.com/psf/black/issues/3909\">#3909</a>)</li>\n</ul>\n<h3>Preview style</h3>\n<ul>\n<li>Fix long lines with power operators getting split before the line length (<a href=\"https://redirect.github.com/psf/black/issues/3942\">#3942</a>)</li>\n<li>Long type hints are now wrapped in parentheses and properly indented when split across\nmultiple lines (<a href=\"https://redirect.github.com/psf/black/issues/3899\">#3899</a>)</li>\n<li>Magic trailing commas are now respected in return types. (<a href=\"https://redirect.github.com/psf/black/issues/3916\">#3916</a>)</li>\n<li>Require one empty line after module-level docstrings. (<a href=\"https://redirect.github.com/psf/black/issues/3932\">#3932</a>)</li>\n<li>Treat raw triple-quoted strings as docstrings (<a href=\"https://redirect.github.com/psf/black/issues/3947\">#3947</a>)</li>\n</ul>\n<h3>Configuration</h3>\n<ul>\n<li>Fix cache versioning logic when <code>BLACK_CACHE_DIR</code> is set (<a href=\"https://redirect.github.com/psf/black/issues/3937\">#3937</a>)</li>\n</ul>\n<h3>Parser</h3>\n<ul>\n<li>Fix bug where attributes named <code>type</code> were not acccepted inside <code>match</code> statements\n(<a href=\"https://redirect.github.com/psf/black/issues/3950\">#3950</a>)</li>\n<li>Add support for PEP 695 type aliases containing lambdas and other unusual expressions\n(<a href=\"https://redirect.github.com/psf/black/issues/3949\">#3949</a>)</li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/psf/black/blob/main/CHANGES.md\">black's changelog</a>.</em></p>\n<blockquote>\n<h2>23.10.1</h2>\n<h3>Highlights</h3>\n<ul>\n<li>Maintanence release to get a fix out for GitHub Action edge case (<a href=\"https://redirect.github.com/psf/black/issues/3957\">#3957</a>)</li>\n</ul>\n<h3>Preview style</h3>\n<ul>\n<li>Fix merging implicit multiline strings that have inline comments (<a href=\"https://redirect.github.com/psf/black/issues/3956\">#3956</a>)</li>\n<li>Allow empty first line after block open before a comment or compound statement (<a href=\"https://redirect.github.com/psf/black/issues/3967\">#3967</a>)</li>\n</ul>\n<h3>Packaging</h3>\n<ul>\n<li>Change Dockerfile to hatch + compile black (<a href=\"https://redirect.github.com/psf/black/issues/3965\">#3965</a>)</li>\n</ul>\n<h3>Integrations</h3>\n<ul>\n<li>The summary output for GitHub workflows is now suppressible using the <code>summary</code>\nparameter. (<a href=\"https://redirect.github.com/psf/black/issues/3958\">#3958</a>)</li>\n<li>Fix the action failing when Black check doesn't pass (<a href=\"https://redirect.github.com/psf/black/issues/3957\">#3957</a>)</li>\n</ul>\n<h3>Documentation</h3>\n<ul>\n<li>It is known Windows documentation CI is broken\n<a href=\"https://redirect.github.com/psf/black/issues/3968\">psf/black#3968</a></li>\n</ul>\n<h2>23.10.0</h2>\n<h3>Stable style</h3>\n<ul>\n<li>Fix comments getting removed from inside parenthesized strings (<a href=\"https://redirect.github.com/psf/black/issues/3909\">#3909</a>)</li>\n</ul>\n<h3>Preview style</h3>\n<ul>\n<li>Fix long lines with power operators getting split before the line length (<a href=\"https://redirect.github.com/psf/black/issues/3942\">#3942</a>)</li>\n<li>Long type hints are now wrapped in parentheses and properly indented when split across\nmultiple lines (<a href=\"https://redirect.github.com/psf/black/issues/3899\">#3899</a>)</li>\n<li>Magic trailing commas are now respected in return types. (<a href=\"https://redirect.github.com/psf/black/issues/3916\">#3916</a>)</li>\n<li>Require one empty line after module-level docstrings. (<a href=\"https://redirect.github.com/psf/black/issues/3932\">#3932</a>)</li>\n<li>Treat raw triple-quoted strings as docstrings (<a href=\"https://redirect.github.com/psf/black/issues/3947\">#3947</a>)</li>\n</ul>\n<h3>Configuration</h3>\n<ul>\n<li>Fix cache versioning logic when <code>BLACK_CACHE_DIR</code> is set (<a href=\"https://redirect.github.com/psf/black/issues/3937\">#3937</a>)</li>\n</ul>\n<h3>Parser</h3>\n<ul>\n<li>Fix bug where attributes named <code>type</code> were not accepted inside <code>match</code> statements\n(<a href=\"https://redirect.github.com/psf/black/issues/3950\">#3950</a>)</li>\n<li>Add support for PEP 695 type aliases containing lambdas and other unusual expressions</li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/psf/black/commit/744d23b34800c06e10272149b70752396e90eeb8\"><code>744d23b</code></a> Prepare release 23.10.1 (<a href=\"https://redirect.github.com/psf/black/issues/3969\">#3969</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/8de4be516879302afce542ac80a6a43ced807759\"><code>8de4be5</code></a> Fix CI failing (<a href=\"https://redirect.github.com/psf/black/issues/3957\">#3957</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/c0adca321dc0d97a704de8ed0353e5b894a6a912\"><code>c0adca3</code></a> docs: specifies the use of the .git-blame-ignore-revs file (<a href=\"https://redirect.github.com/psf/black/issues/3961\">#3961</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/a7643fac8d97c15640a2b1a79f68b3dc771aebfb\"><code>a7643fa</code></a> Add summary parameter to action (<a href=\"https://redirect.github.com/psf/black/issues/3958\">#3958</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/d291c2338c3c1feee4f3f26985c0964ec1b7eb9f\"><code>d291c23</code></a> Move Docker image to hatch + compile (<a href=\"https://redirect.github.com/psf/black/issues/3965\">#3965</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/7f1c578b89b2c256a6ce3b70fc1b970b3ffa3349\"><code>7f1c578</code></a> Bump peter-evans/create-or-update-comment from 3.0.2 to 3.1.0 (<a href=\"https://redirect.github.com/psf/black/issues/3966\">#3966</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/2db5ab0a7b3b321e4cec70964239ee88087cd810\"><code>2db5ab0</code></a> Allow empty line after block open before a comment or compound statement (<a href=\"https://redirect.github.com/psf/black/issues/3967\">#3967</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/0a37888e79059018eef9293a724b14da59d3377a\"><code>0a37888</code></a> Fix typos in CHANGES.md (<a href=\"https://redirect.github.com/psf/black/issues/3963\">#3963</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/882d8795c6ff65c02f2657e596391748d1b6b7f5\"><code>882d879</code></a> Fix merging implicit multiline strings that have inline comments (<a href=\"https://redirect.github.com/psf/black/issues/3956\">#3956</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/9edba85f71d50d12996ef7bda576426362016171\"><code>9edba85</code></a> Prepare release 23.10.0 (<a href=\"https://redirect.github.com/psf/black/issues/3951\">#3951</a>)</li>\n<li>Additional commits viewable in <a href=\"https://github.com/psf/black/compare/23.9.1...23.10.1\">compare view</a></li>\n</ul>\n</details>\n<br />\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=black&package-manager=pip&previous-version=23.9.1&new-version=23.10.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<details>\n<summary>Dependabot commands and options</summary>\n<br />\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 show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n</details>\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2202.org.readthedocs.build/en/2202/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2202/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1955676270, "node_id": "I_kwDOBm6k_c50kUBu", "number": 2201, "title": "Discord invite link is invalid", "user": {"value": 11708906, "label": "andrewsanchez"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2023-10-21T21:50:05Z", "updated_at": "2023-10-21T21:50:05Z", "closed_at": null, "author_association": "NONE", "pull_request": null, "body": "https://datasette.io/discord leads to https://discord.com/invite/ktd74dm5mw and returns the following:\r\n\r\n<img width=\"448\" alt=\"CleanShot 2023-10-21 at 14 49 45@2x\" src=\"https://github.com/simonw/datasette/assets/11708906/a126cbf6-0a4d-41b8-9986-7567d40d453f\">\r\n", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2201/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1949756141, "node_id": "PR_kwDOBm6k_c5dJF8z", "number": 2200, "title": "Bump the python-packages group with 1 update", "user": {"value": 49699333, "label": "dependabot[bot]"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2023-10-18T13:25:55Z", "updated_at": "2023-10-24T13:40:29Z", "closed_at": "2023-10-24T13:40:26Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2200", "body": "Bumps the python-packages group with 1 update: [black](https://github.com/psf/black).\n\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/psf/black/releases\">black's releases</a>.</em></p>\n<blockquote>\n<h2>23.10.0</h2>\n<h3>Stable style</h3>\n<ul>\n<li>Fix comments getting removed from inside parenthesized strings (<a href=\"https://redirect.github.com/psf/black/issues/3909\">#3909</a>)</li>\n</ul>\n<h3>Preview style</h3>\n<ul>\n<li>Fix long lines with power operators getting split before the line length (<a href=\"https://redirect.github.com/psf/black/issues/3942\">#3942</a>)</li>\n<li>Long type hints are now wrapped in parentheses and properly indented when split across\nmultiple lines (<a href=\"https://redirect.github.com/psf/black/issues/3899\">#3899</a>)</li>\n<li>Magic trailing commas are now respected in return types. (<a href=\"https://redirect.github.com/psf/black/issues/3916\">#3916</a>)</li>\n<li>Require one empty line after module-level docstrings. (<a href=\"https://redirect.github.com/psf/black/issues/3932\">#3932</a>)</li>\n<li>Treat raw triple-quoted strings as docstrings (<a href=\"https://redirect.github.com/psf/black/issues/3947\">#3947</a>)</li>\n</ul>\n<h3>Configuration</h3>\n<ul>\n<li>Fix cache versioning logic when <code>BLACK_CACHE_DIR</code> is set (<a href=\"https://redirect.github.com/psf/black/issues/3937\">#3937</a>)</li>\n</ul>\n<h3>Parser</h3>\n<ul>\n<li>Fix bug where attributes named <code>type</code> were not acccepted inside <code>match</code> statements\n(<a href=\"https://redirect.github.com/psf/black/issues/3950\">#3950</a>)</li>\n<li>Add support for PEP 695 type aliases containing lambdas and other unusual expressions\n(<a href=\"https://redirect.github.com/psf/black/issues/3949\">#3949</a>)</li>\n</ul>\n<h3>Output</h3>\n<ul>\n<li>Black no longer attempts to provide special errors for attempting to format Python 2\ncode (<a href=\"https://redirect.github.com/psf/black/issues/3933\">#3933</a>)</li>\n<li>Black will more consistently print stacktraces on internal errors in verbose mode\n(<a href=\"https://redirect.github.com/psf/black/issues/3938\">#3938</a>)</li>\n</ul>\n<h3>Integrations</h3>\n<ul>\n<li>The action output displayed in the job summary is now wrapped in Markdown (<a href=\"https://redirect.github.com/psf/black/issues/3914\">#3914</a>)</li>\n</ul>\n</blockquote>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/psf/black/blob/main/CHANGES.md\">black's changelog</a>.</em></p>\n<blockquote>\n<h2>23.10.0</h2>\n<h3>Stable style</h3>\n<ul>\n<li>Fix comments getting removed from inside parenthesized strings (<a href=\"https://redirect.github.com/psf/black/issues/3909\">#3909</a>)</li>\n</ul>\n<h3>Preview style</h3>\n<ul>\n<li>Fix long lines with power operators getting split before the line length (<a href=\"https://redirect.github.com/psf/black/issues/3942\">#3942</a>)</li>\n<li>Long type hints are now wrapped in parentheses and properly indented when split across\nmultiple lines (<a href=\"https://redirect.github.com/psf/black/issues/3899\">#3899</a>)</li>\n<li>Magic trailing commas are now respected in return types. (<a href=\"https://redirect.github.com/psf/black/issues/3916\">#3916</a>)</li>\n<li>Require one empty line after module-level docstrings. (<a href=\"https://redirect.github.com/psf/black/issues/3932\">#3932</a>)</li>\n<li>Treat raw triple-quoted strings as docstrings (<a href=\"https://redirect.github.com/psf/black/issues/3947\">#3947</a>)</li>\n</ul>\n<h3>Configuration</h3>\n<ul>\n<li>Fix cache versioning logic when <code>BLACK_CACHE_DIR</code> is set (<a href=\"https://redirect.github.com/psf/black/issues/3937\">#3937</a>)</li>\n</ul>\n<h3>Parser</h3>\n<ul>\n<li>Fix bug where attributes named <code>type</code> were not acccepted inside <code>match</code> statements\n(<a href=\"https://redirect.github.com/psf/black/issues/3950\">#3950</a>)</li>\n<li>Add support for PEP 695 type aliases containing lambdas and other unusual expressions\n(<a href=\"https://redirect.github.com/psf/black/issues/3949\">#3949</a>)</li>\n</ul>\n<h3>Output</h3>\n<ul>\n<li>Black no longer attempts to provide special errors for attempting to format Python 2\ncode (<a href=\"https://redirect.github.com/psf/black/issues/3933\">#3933</a>)</li>\n<li>Black will more consistently print stacktraces on internal errors in verbose mode\n(<a href=\"https://redirect.github.com/psf/black/issues/3938\">#3938</a>)</li>\n</ul>\n<h3>Integrations</h3>\n<ul>\n<li>The action output displayed in the job summary is now wrapped in Markdown (<a href=\"https://redirect.github.com/psf/black/issues/3914\">#3914</a>)</li>\n</ul>\n</blockquote>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/psf/black/commit/9edba85f71d50d12996ef7bda576426362016171\"><code>9edba85</code></a> Prepare release 23.10.0 (<a href=\"https://redirect.github.com/psf/black/issues/3951\">#3951</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/bb588073ab286a9f1f8d839ab2cebe13011dd22c\"><code>bb58807</code></a> Fix parser bug where &quot;type&quot; was misinterpreted as a keyword inside a match (#...</li>\n<li><a href=\"https://github.com/psf/black/commit/722735d20ebdc66c0da0e0df7658293455694500\"><code>722735d</code></a> Fix grammar for type alias support (<a href=\"https://redirect.github.com/psf/black/issues/3949\">#3949</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/abe57e3d92727f1b26c717fad3978159b987fe79\"><code>abe57e3</code></a> Treat raw strings like other docstrings (<a href=\"https://redirect.github.com/psf/black/issues/3947\">#3947</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/1648ac51806d092c95cb9bb2e4a5bffda6095bc1\"><code>1648ac5</code></a> Fix long lines with power operator(s) getting splitted before line length (<a href=\"https://redirect.github.com/psf/black/issues/3\">#3</a>...</li>\n<li><a href=\"https://github.com/psf/black/commit/6f84f652850dca8a1b578581e2fbb2cb95e791cc\"><code>6f84f65</code></a> Migrate mypy config to pyproject.toml (<a href=\"https://redirect.github.com/psf/black/issues/3936\">#3936</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/3bb92146f59804a6ead47d5f2d0fdc47daa6b698\"><code>3bb9214</code></a> CI Test: Deprecating 'Healthcheck.all()' from Hypothesis in fuzz.py (<a href=\"https://redirect.github.com/psf/black/issues/3945\">#3945</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/935f303a0a7b794e722c7df00c906be285884874\"><code>935f303</code></a> Fix test that was not being run (<a href=\"https://redirect.github.com/psf/black/issues/3939\">#3939</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/b7717c3f1e73d6b847e2534a2cebbb657b96caf8\"><code>b7717c3</code></a> Standardise newlines after module-level docstrings (<a href=\"https://redirect.github.com/psf/black/issues/3932\">#3932</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/7aa37ea0adf864baf3ef3dfbcfaf5ff1ff780250\"><code>7aa37ea</code></a> Report all stacktraces in verbose mode (<a href=\"https://redirect.github.com/psf/black/issues/3938\">#3938</a>)</li>\n<li>Additional commits viewable in <a href=\"https://github.com/psf/black/compare/23.9.1...23.10.0\">compare view</a></li>\n</ul>\n</details>\n<br />\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=black&package-manager=pip&previous-version=23.9.1&new-version=23.10.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<details>\n<summary>Dependabot commands and options</summary>\n<br />\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 show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n</details>\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2200.org.readthedocs.build/en/2200/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2200/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1940346034, "node_id": "I_kwDOBm6k_c5zp1Sy", "number": 2199, "title": "Detailed upgrade instructions for metadata.yaml -> datasette.yaml", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": {"value": 3268330, "label": "Datasette 1.0"}, "comments": 7, "created_at": "2023-10-12T16:21:25Z", "updated_at": "2023-10-12T22:08:42Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "> `Exception: Datasette no longer accepts plugin configuration in --metadata. Move your \"plugins\" configuration blocks to a separate file - we suggest calling that datasette..json - and start Datasette with datasette -c datasette..json. See https://docs.datasette.io/en/latest/configuration.html for more details.`\r\n>\r\n> I think we should link directly to documentation that tells people how to perform this upgrade.\r\n\r\n_Originally posted by @simonw in https://github.com/simonw/datasette/issues/2190#issuecomment-1759947021_\r\n            ", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2199/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1931794126, "node_id": "I_kwDOBm6k_c5zJNbO", "number": 2198, "title": "--load-extension=spatialite not working with Windows", "user": {"value": 363004, "label": "hcarter333"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2023-10-08T12:50:22Z", "updated_at": "2023-10-08T12:50:22Z", "closed_at": null, "author_association": "NONE", "pull_request": null, "body": "Using each of\r\n`python -m datasette counties.db -m metadata.yml --load-extension=SpatiaLite`\r\n\r\nand \r\n\r\n`python -m datasette counties.db --load-extension=\"C:\\Windows\\System32\\mod_spatialite.dll\"`\r\n\r\nand\r\n\r\n`python -m datasette counties.db --load-extension=C:\\Windows\\System32\\mod_spatialite.dll`\r\n\r\nI got the error:\r\n\r\n```\r\n  File \"C:\\Users\\m3n7es\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\datasette\\database.py\", line 209, in in_thread\r\n    self.ds._prepare_connection(conn, self.name)\r\n  File \"C:\\Users\\m3n7es\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\datasette\\app.py\", line 596, in _prepare_connection\r\n    conn.execute(\"SELECT load_extension(?, ?)\", [path, entrypoint])\r\nsqlite3.OperationalError: The specified module could not be found.\r\n\r\n```\r\n\r\nI finally tried modifying the code in app.py to read:\r\n\r\n```\r\n    def _prepare_connection(self, conn, database):\r\n        conn.row_factory = sqlite3.Row\r\n        conn.text_factory = lambda x: str(x, \"utf-8\", \"replace\")\r\n        if self.sqlite_extensions:\r\n            conn.enable_load_extension(True)\r\n            for extension in self.sqlite_extensions:\r\n                # \"extension\" is either a string path to the extension\r\n                # or a 2-item tuple that specifies which entrypoint to load.\r\n                #if isinstance(extension, tuple):\r\n                #    path, entrypoint = extension\r\n                #    conn.execute(\"SELECT load_extension(?, ?)\", [path, entrypoint])\r\n                #else:\r\n                conn.execute(\"SELECT load_extension('C:\\Windows\\System32\\mod_spatialite.dll')\")\r\n\r\n```\r\nAt which point the counties example worked. \r\n\r\nIs there a correct way to install/use the extension on Windows? My method will cause issues if there's a second extension to be used.\r\n\r\nOn an unrelated note, my next step is to figure out how to write a query across the two loaded databases supplied from the command line:\r\n`python -m datasette rm_toucans_23_10_07.db counties.db -m metadata.yml --load-extension=SpatiaLite`\r\n\r\n\r\n\r\n", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2198/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1930008379, "node_id": "I_kwDOBm6k_c5zCZc7", "number": 2197, "title": "click-default-group-wheel dependency conflict", "user": {"value": 1176293, "label": "ar-jan"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 3, "created_at": "2023-10-06T11:49:20Z", "updated_at": "2023-10-12T21:53:17Z", "closed_at": "2023-10-12T21:53:17Z", "author_association": "NONE", "pull_request": null, "body": "I upgraded my dependencies, then ran into this problem running `datasette inspect`:\r\n\r\n> env/lib/python3.9/site-packages/datasette/cli.py\", line 6, in <module>\r\n>     from click_default_group import DefaultGroup\r\n> ModuleNotFoundError: No module named 'click_default_group'\r\n\r\nTurns out the released version of datasette still depends on `click-default-group-wheel`, so `click-default-group` doesn't get installed/recognized:\r\n\r\n```\r\n$ virtualenv venv\r\n$ source venv/bin/activate\r\n$ pip install datasette\r\n$ pip list | grep click-default-group\r\nclick-default-group       1.2.4\r\nclick-default-group-wheel 1.2.3\r\n$ python -c \"from click_default_group import DefaultGroup\"\r\nTraceback (most recent call last):\r\n  File \"<string>\", line 1, in <module>\r\nModuleNotFoundError: No module named 'click_default_group'\r\n$ pip install --force-reinstall click-default-group\r\n...\r\nERROR: pip's dependency resolver does not currently take into account all the packages that are installed.\r\nThis behaviour is the source of the following dependency conflicts.\r\ndatasette 0.64.4 requires click-default-group-wheel>=1.2.2, which is not installed.\r\nSuccessfully installed click-8.1.7 click-default-group-1.2.4\r\n```", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2197/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1910269679, "node_id": "I_kwDOBm6k_c5x3Gbv", "number": 2196, "title": "Discord invite link returns 401", "user": {"value": 1892194, "label": "Olshansk"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 2, "created_at": "2023-09-24T15:16:54Z", "updated_at": "2023-10-13T00:07:08Z", "closed_at": "2023-10-12T21:54:54Z", "author_association": "NONE", "pull_request": null, "body": "I found the link to the datasette discord channel via [this query](https://github.com/search?q=repo%3Asimonw%2Fdatasette%20discord&type=code).\r\n\r\nThe following video should be self explanatory:\r\n\r\nhttps://github.com/simonw/datasette/assets/1892194/8cd33e88-bcaa-41f3-9818-ab4d589c3f02\r\n\r\n\r\nLink for reference: https://discord.com/invite/ktd74dm5mw", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2196/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1907765514, "node_id": "I_kwDOBm6k_c5xtjEK", "number": 2195, "title": "`datasette publish` needs support for the new config/metadata split", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 9, "created_at": "2023-09-21T21:08:12Z", "updated_at": "2023-09-21T22:57:48Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "> ... which raises the challenge that `datasette publish` doesn't yet know what to do with a config file!\r\n\r\n_Originally posted by @simonw in https://github.com/simonw/datasette/issues/2194#issuecomment-1730259871_\r\n            ", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2195/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1907695234, "node_id": "I_kwDOBm6k_c5xtR6C", "number": 2194, "title": "Deploy failing with \"plugins/alternative_route.py: Not a directory\"", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 8, "created_at": "2023-09-21T20:17:49Z", "updated_at": "2023-09-21T22:08:19Z", "closed_at": "2023-09-21T22:08:19Z", "author_association": "OWNER", "pull_request": null, "body": "https://github.com/simonw/datasette/actions/runs/6266449018/job/17017460074\r\n\r\n<img width=\"826\" alt=\"CleanShot 2023-09-21 at 13 17 12@2x\" src=\"https://github.com/simonw/datasette/assets/9599/9f58f39b-4cca-455f-bc6d-ecab14e841a5\">\r\n\r\nThis is a bit of a mystery, I don't think I've changed anything recently that could have broken this.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2194/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1907655261, "node_id": "I_kwDOBm6k_c5xtIJd", "number": 2193, "title": "\"Test DATASETTE_LOAD_PLUGINS\" test shows errors but did not fail the CI run", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 6, "created_at": "2023-09-21T19:49:34Z", "updated_at": "2023-09-21T21:56:43Z", "closed_at": "2023-09-21T21:56:43Z", "author_association": "OWNER", "pull_request": null, "body": "> That passed on 3.8 but should have failed: https://github.com/simonw/datasette/actions/runs/6266341481/job/17017099801 - the \"Test DATASETTE_LOAD_PLUGINS\" test shows errors but did not fail the CI run.\r\n\r\n_Originally posted by @simonw in https://github.com/simonw/datasette/issues/2057#issuecomment-1730201226_\r\n            ", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2193/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1903932086, "node_id": "PR_kwDOBm6k_c5aumyn", "number": 2192, "title": "Stop using parallel SQL queries for tables", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2023-09-20T01:28:43Z", "updated_at": "2023-09-20T22:10:56Z", "closed_at": "2023-09-20T22:10:55Z", "author_association": "OWNER", "pull_request": "simonw/datasette/pulls/2192", "body": "Refs:\r\n- #2189\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2192.org.readthedocs.build/en/2192/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2192/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1901768721, "node_id": "PR_kwDOBm6k_c5anSg5", "number": 2191, "title": "Move `permissions`,  `allow` blocks, canned queries and more out of `metadata.yaml` and into `datasette.yaml`", "user": {"value": 15178711, "label": "asg017"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 4, "created_at": "2023-09-18T21:21:16Z", "updated_at": "2023-10-12T16:16:38Z", "closed_at": "2023-10-12T16:16:38Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2191", "body": "The PR moves the following fields from `metadata.yaml` to `datasette.yaml`:\r\n\r\n```\r\npermissions\r\nallow\r\nallow_sql\r\nqueries\r\nextra_css_urls\r\nextra_js_urls\r\n```\r\n\r\nThis is a significant breaking change that users will need to upgrade their `metadata.yaml` files for. But the format/locations are similar to the previous version, so it shouldn't be too difficult to upgrade.\r\n\r\nOne note: I'm still working on the Configuration docs, specifically the \"reference\" section. Though it's pretty small, the rest of read to review", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2191/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1901483874, "node_id": "PR_kwDOBm6k_c5amULw", "number": 2190, "title": "Raise an exception if a \"plugins\" block exists in metadata.json", "user": {"value": 15178711, "label": "asg017"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 5, "created_at": "2023-09-18T18:08:56Z", "updated_at": "2023-10-12T16:20:51Z", "closed_at": "2023-10-12T16:20:51Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2190", "body": "refs #2183 #2093\r\n\r\nFrom [this comment](https://github.com/simonw/datasette/pull/2183#issuecomment-1714699724) in #2183: If a `\"plugins\"` block appears in `metadata.json`, it means that a user hasn't migrated over their plugin configuration from `metadata.json` to `datasette.yaml`, which is a breaking change in Datasette 1.0. \r\n\r\nThis PR will ensure that an error is raised whenever that happens.\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2190.org.readthedocs.build/en/2190/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2190/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1901416155, "node_id": "I_kwDOBm6k_c5xVU7b", "number": 2189, "title": "Server hang on parallel execution of queries to named in-memory databases", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 31, "created_at": "2023-09-18T17:23:18Z", "updated_at": "2023-09-21T22:26:21Z", "closed_at": "2023-09-21T22:26:21Z", "author_association": "OWNER", "pull_request": null, "body": "I've started to encounter a bug where queries to tables inside named in-memory databases sometimes trigger server hangs.\r\n\r\nI'm still trying to figure out what's going on here - on one occasion I managed to Ctrl+C the server and saw an exception that mentioned a thread lock, but usually hitting Ctrl+C does nothing and I have to `kill -9` the PID instead.\r\n\r\nThis is all running on my M2 Mac.\r\n\r\nI've seen the bug in the Datasette 1.0 alphas and in Datasette 0.64.3 - but reverting to 0.61 appeared to fix it.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2189/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1900026059, "node_id": "I_kwDOBm6k_c5xQBjL", "number": 2188, "title": "Plugin Hooks for \"compile to SQL\" languages", "user": {"value": 15178711, "label": "asg017"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 2, "created_at": "2023-09-18T01:37:15Z", "updated_at": "2023-09-18T06:58:53Z", "closed_at": null, "author_association": "CONTRIBUTOR", "pull_request": null, "body": "There's a ton of tools/languages that compile to SQL, which may be nice in Datasette. Some examples:\r\n\r\n- Logica https://logica.dev\r\n- PRQL https://prql-lang.org\r\n- Malloy, but not sure if it works with SQLite? https://github.com/malloydata/malloy\r\n\r\nIt would be cool if plugins could extend Datasette to use these languages, in both the code editor and API usage.\r\n\r\nA few things I'd imagine a `datasette-prql` or `datasette-logica` plugin would do:\r\n\r\n- `prql=` instead of `sql=`\r\n- Code editor support (syntax highlighting, autocomplete)\r\n- Hide/show SQL", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2188/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1899310542, "node_id": "I_kwDOBm6k_c5xNS3O", "number": 2187, "title": "Datasette for serving JSON only", "user": {"value": 19705106, "label": "geofinder"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2023-09-16T05:48:29Z", "updated_at": "2023-09-16T05:48:29Z", "closed_at": null, "author_association": "NONE", "pull_request": null, "body": "Hi, is there any way to use datasette for serving json only without displaying webpage? I've tried to search about this in documentation but didn't get any information", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2187/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1898927976, "node_id": "I_kwDOBm6k_c5xL1do", "number": 2186, "title": "Mechanism for register_output_renderer hooks to access full count", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": {"value": 3268330, "label": "Datasette 1.0"}, "comments": 2, "created_at": "2023-09-15T18:57:54Z", "updated_at": "2023-09-15T19:27:59Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "The cause of this bug:\r\n- https://github.com/simonw/datasette-export-notebook/issues/17\r\n\r\nIs that `datasette-export-notebook` was consulting `data[\"filtered_table_rows_count\"]` in the render output plugin function in order to show the total number of rows that would be exported.\r\n\r\nThat field is no longer available by default - the `\"count\"` field is only available if `?_extra=count` was passed.\r\n\r\nIt would be useful if plugins like this could access the total count on demand, should they need to.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2186/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1896578249, "node_id": "PR_kwDOBm6k_c5aWACP", "number": 2185, "title": "Bump the python-packages group with 3 updates", "user": {"value": 49699333, "label": "dependabot[bot]"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2023-09-14T13:27:40Z", "updated_at": "2023-09-20T22:11:25Z", "closed_at": "2023-09-20T22:11:24Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2185", "body": "Bumps the python-packages group with 3 updates: [sphinx](https://github.com/sphinx-doc/sphinx), [furo](https://github.com/pradyunsg/furo) and [black](https://github.com/psf/black).\n\nUpdates `sphinx` from 7.2.5 to 7.2.6\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/releases\">sphinx's releases</a>.</em></p>\n<blockquote>\n<h2>Sphinx 7.2.6</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n</blockquote>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/blob/master/CHANGES.rst\">sphinx's changelog</a>.</em></p>\n<blockquote>\n<h1>Release 7.2.6 (released Sep 13, 2023)</h1>\n<h2>Bugs fixed</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11679\">#11679</a>: Add the :envvar:<code>!SPHINX_AUTODOC_RELOAD_MODULES</code> environment variable,\nwhich if set reloads modules when using autodoc with <code>TYPE_CHECKING = True</code>.\nPatch by Matt Wozniski and Adam Turner.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11679\">#11679</a>: Use :py:func:<code>importlib.reload</code> to reload modules in autodoc.\nPatch by Matt Wozniski and Adam Turner.</li>\n</ul>\n</blockquote>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/cf7d2759af0852d67288e58d823d51fe860749ca\"><code>cf7d275</code></a> Bump to 7.2.6 final</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/43d69755df0088fd0ec099c0893da059f50175e4\"><code>43d6975</code></a> Leverage <code>importlib.reload</code> for reloading modules (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11679\">#11679</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/13da5d7b2fda0da58137534e8fcdb0da9c88e55f\"><code>13da5d7</code></a> Inline makecmd in make mode</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/3d0110a95a5260cc5056322eb8c2ae7f031a6667\"><code>3d0110a</code></a> Enable test_cython on Python 3.12</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/22759fb9457bd9f1b01003daa47d7a2e78b6303c\"><code>22759fb</code></a> Bump version</li>\n<li>See full diff in <a href=\"https://github.com/sphinx-doc/sphinx/compare/v7.2.5...v7.2.6\">compare view</a></li>\n</ul>\n</details>\n<br />\n\nUpdates `furo` from 2023.8.19 to 2023.9.10\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/pradyunsg/furo/blob/main/docs/changelog.md\">furo's changelog</a>.</em></p>\n<blockquote>\n<h1>Changelog</h1>\n<!-- raw HTML omitted -->\n<h2>2023.09.10 -- Zesty Zaffre</h2>\n<ul>\n<li>Make asset hash injection idempotent, fixing Sphinx 6 compatibility.</li>\n<li>Fix the check for HTML builders, fixing non-HTML Read the Docs builds.</li>\n</ul>\n<h2>2023.08.19 -- Xenolithic Xanadu</h2>\n<ul>\n<li>Fix missing search context with Sphinx 7.2, for dirhtml builds.</li>\n<li>Drop support for Python 3.7.</li>\n<li>Present configuration errors in a better format -- thanks <a href=\"https://github.com/AA-Turner\"><code>@\u200bAA-Turner</code></a>!</li>\n<li>Bump <code>require_sphinx()</code> to Sphinx 6.0, in line with dependency changes in Unassuming Ultramarine.</li>\n</ul>\n<h2>2023.08.17 -- Wonderous White</h2>\n<ul>\n<li>Fix compatiblity with Sphinx 7.2.0 and 7.2.1.</li>\n</ul>\n<h2>2023.07.26 -- Vigilant Volt</h2>\n<ul>\n<li>Fix compatiblity with Sphinx 7.1.</li>\n<li>Improve how content overflow is handled.</li>\n<li>Improve how literal blocks containing inline code are handled.</li>\n</ul>\n<h2>2023.05.20 -- Unassuming Ultramarine</h2>\n<ul>\n<li>\u2728 Add support for Sphinx 7.</li>\n<li>Drop support for Sphinx 5.</li>\n<li>Improve the screen-reader label for sidebar collapse.</li>\n<li>Make it easier to create derived themes from Furo.</li>\n<li>Bump all JS dependencies (NodeJS and npm packages).</li>\n</ul>\n<h2>2023.03.27 -- Tasty Tangerine</h2>\n<ul>\n<li>Regenerate with newer version of sphinx-theme-builder, to fix RECORD hashes.</li>\n<li>Add missing class to Font Awesome examples</li>\n</ul>\n<h2>2023.03.23 -- Sassy Saffron</h2>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/2718ca42930f7c8c11bc96341e0d3db6f532b08d\"><code>2718ca4</code></a> Prepare release: 2023.09.10</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/c22c99d931decfa4641e400e428606bc6184af56\"><code>c22c99d</code></a> Update changelog</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/c37e84961d9ffbc77ab7be268081d1b3497f0311\"><code>c37e849</code></a> Quote a not-runtime-generic type annotation</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/9cfdf44784dc90085549490ff1eddd2afc37c1d6\"><code>9cfdf44</code></a> Rework infrastructure for linting</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/5abeb9fc962aee61eda02e0c75e872004635e9d5\"><code>5abeb9f</code></a> Fix the check for HTML builders</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/ee2ab5459ddb0a32c3467b88c9c628611eb55073\"><code>ee2ab54</code></a> Tweak how tests are run with nox</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/cdae2366c340695ba724ca8438a4cd1e605c8848\"><code>cdae236</code></a> Test against Sphinx minor versions in CI</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/9e40071eb8c4c3e38845b57c4f5242bef2a44af2\"><code>9e40071</code></a> Make asset hash injection idempotent</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/aab86f4624b6ef38a151440be5624746d41882b1\"><code>aab86f4</code></a> Revert &quot;Exclude incompatible Sphinx releases (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/711\">#711</a>)&quot;</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/4dd6eec9e306b5fd0624ec8d1d90c6ad416c5182\"><code>4dd6eec</code></a> Exclude incompatible Sphinx releases (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/711\">#711</a>)</li>\n<li>Additional commits viewable in <a href=\"https://github.com/pradyunsg/furo/compare/2023.08.19...2023.09.10\">compare view</a></li>\n</ul>\n</details>\n<br />\n\nUpdates `black` from 23.7.0 to 23.9.1\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/psf/black/releases\">black's releases</a>.</em></p>\n<blockquote>\n<h2>23.9.1</h2>\n<p>Due to various issues, the previous release (23.9.0) did not include compiled mypyc\nwheels, which make Black significantly faster. These issues have now been fixed, and\nthis release should come with compiled wheels once again.</p>\n<p>There will be no wheels for Python 3.12 due to a bug in mypyc. We will provide 3.12\nwheels in a future release as soon as the mypyc bug is fixed.</p>\n<h3>Packaging</h3>\n<ul>\n<li>Upgrade to mypy 1.5.1 (<a href=\"https://redirect.github.com/psf/black/issues/3864\">#3864</a>)</li>\n</ul>\n<h3>Performance</h3>\n<ul>\n<li>Store raw tuples instead of NamedTuples in Black's cache, improving performance and\ndecreasing the size of the cache (<a href=\"https://redirect.github.com/psf/black/issues/3877\">#3877</a>)</li>\n</ul>\n<h2>23.9.0</h2>\n<h3>Preview style</h3>\n<ul>\n<li>More concise formatting for dummy implementations (<a href=\"https://redirect.github.com/psf/black/issues/3796\">#3796</a>)</li>\n<li>In stub files, add a blank line between a statement with a body (e.g an\n<code>if sys.version_info &gt; (3, x):</code>) and a function definition on the same level (<a href=\"https://redirect.github.com/psf/black/issues/3862\">#3862</a>)</li>\n<li>Fix a bug whereby spaces were removed from walrus operators within subscript(<a href=\"https://redirect.github.com/psf/black/issues/3823\">#3823</a>)</li>\n</ul>\n<h3>Configuration</h3>\n<ul>\n<li>Black now applies exclusion and ignore logic before resolving symlinks (<a href=\"https://redirect.github.com/psf/black/issues/3846\">#3846</a>)</li>\n</ul>\n<h3>Performance</h3>\n<ul>\n<li>Avoid importing <code>IPython</code> if notebook cells do not contain magics (<a href=\"https://redirect.github.com/psf/black/issues/3782\">#3782</a>)</li>\n<li>Improve caching by comparing file hashes as fallback for mtime and size (<a href=\"https://redirect.github.com/psf/black/issues/3821\">#3821</a>)</li>\n</ul>\n<h3><em>Blackd</em></h3>\n<ul>\n<li>Fix an issue in <code>blackd</code> with single character input (<a href=\"https://redirect.github.com/psf/black/issues/3558\">#3558</a>)</li>\n</ul>\n<h3>Integrations</h3>\n<ul>\n<li>Black now has an\n<a href=\"https://github.com/psf/black-pre-commit-mirror\">official pre-commit mirror</a>. Swapping\n<code>https://github.com/psf/black</code> to <code>https://github.com/psf/black-pre-commit-mirror</code> in\nyour <code>.pre-commit-config.yaml</code> will make Black about 2x faster (<a href=\"https://redirect.github.com/psf/black/issues/3828\">#3828</a>)</li>\n<li>The <code>.black.env</code> folder specified by <code>ENV_PATH</code> will now be removed on the completion\nof the GitHub Action (<a href=\"https://redirect.github.com/psf/black/issues/3759\">#3759</a>)</li>\n</ul>\n</blockquote>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/psf/black/blob/main/CHANGES.md\">black's changelog</a>.</em></p>\n<blockquote>\n<h2>23.9.1</h2>\n<p>Due to various issues, the previous release (23.9.0) did not include compiled mypyc\nwheels, which make Black significantly faster. These issues have now been fixed, and\nthis release should come with compiled wheels once again.</p>\n<p>There will be no wheels for Python 3.12 due to a bug in mypyc. We will provide 3.12\nwheels in a future release as soon as the mypyc bug is fixed.</p>\n<h3>Packaging</h3>\n<ul>\n<li>Upgrade to mypy 1.5.1 (<a href=\"https://redirect.github.com/psf/black/issues/3864\">#3864</a>)</li>\n</ul>\n<h3>Performance</h3>\n<ul>\n<li>Store raw tuples instead of NamedTuples in Black's cache, improving performance and\ndecreasing the size of the cache (<a href=\"https://redirect.github.com/psf/black/issues/3877\">#3877</a>)</li>\n</ul>\n<h2>23.9.0</h2>\n<h3>Preview style</h3>\n<ul>\n<li>More concise formatting for dummy implementations (<a href=\"https://redirect.github.com/psf/black/issues/3796\">#3796</a>)</li>\n<li>In stub files, add a blank line between a statement with a body (e.g an\n<code>if sys.version_info &gt; (3, x):</code>) and a function definition on the same level (<a href=\"https://redirect.github.com/psf/black/issues/3862\">#3862</a>)</li>\n<li>Fix a bug whereby spaces were removed from walrus operators within subscript(<a href=\"https://redirect.github.com/psf/black/issues/3823\">#3823</a>)</li>\n</ul>\n<h3>Configuration</h3>\n<ul>\n<li>Black now applies exclusion and ignore logic before resolving symlinks (<a href=\"https://redirect.github.com/psf/black/issues/3846\">#3846</a>)</li>\n</ul>\n<h3>Performance</h3>\n<ul>\n<li>Avoid importing <code>IPython</code> if notebook cells do not contain magics (<a href=\"https://redirect.github.com/psf/black/issues/3782\">#3782</a>)</li>\n<li>Improve caching by comparing file hashes as fallback for mtime and size (<a href=\"https://redirect.github.com/psf/black/issues/3821\">#3821</a>)</li>\n</ul>\n<h3><em>Blackd</em></h3>\n<ul>\n<li>Fix an issue in <code>blackd</code> with single character input (<a href=\"https://redirect.github.com/psf/black/issues/3558\">#3558</a>)</li>\n</ul>\n<h3>Integrations</h3>\n<ul>\n<li>Black now has an\n<a href=\"https://github.com/psf/black-pre-commit-mirror\">official pre-commit mirror</a>. Swapping\n<code>https://github.com/psf/black</code> to <code>https://github.com/psf/black-pre-commit-mirror</code> in\nyour <code>.pre-commit-config.yaml</code> will make Black about 2x faster (<a href=\"https://redirect.github.com/psf/black/issues/3828\">#3828</a>)</li>\n<li>The <code>.black.env</code> folder specified by <code>ENV_PATH</code> will now be removed on the completion\nof the GitHub Action (<a href=\"https://redirect.github.com/psf/black/issues/3759\">#3759</a>)</li>\n</ul>\n</blockquote>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/psf/black/commit/e87737140f32d3cd7c44ede75f02dcd58e55820e\"><code>e877371</code></a> Prepare release 23.9.1 (<a href=\"https://redirect.github.com/psf/black/issues/3878\">#3878</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/62dca32dc55a850f39d78ba8b9c21cc4261a2ddf\"><code>62dca32</code></a> mypyc builds on PRs, skip mypyc wheels for 3.12 (<a href=\"https://redirect.github.com/psf/black/issues/3870\">#3870</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/751583a1dfc691423d96d7711a4c8d9cfe3ee9c8\"><code>751583a</code></a> Pickle raw tuples in FileData cache (<a href=\"https://redirect.github.com/psf/black/issues/3877\">#3877</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/f7917453c99f8183ffd0397affcccb2c37594771\"><code>f791745</code></a> Re-export black.Mode (<a href=\"https://redirect.github.com/psf/black/issues/3875\">#3875</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/0b62b9c9a44a995e44d64ecf7cc08d8d7037642d\"><code>0b62b9c</code></a> Ignore aiohttp DeprecationWarning for 3.12 (<a href=\"https://redirect.github.com/psf/black/issues/3876\">#3876</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/c83ad6c077e7bb281cfd3fbdd89bbeb4c980e563\"><code>c83ad6c</code></a> Upgrade to Furo 2023.9.10 to fix docs build (<a href=\"https://redirect.github.com/psf/black/issues/3873\">#3873</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/4eebfd1a7a4aa2652cfc674cf301d1f2f48098aa\"><code>4eebfd1</code></a> Add mypyc test marks to new tests that patch (<a href=\"https://redirect.github.com/psf/black/issues/3871\">#3871</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/add161b367a0d5a3cc395ec8e045f7b965edaef8\"><code>add161b</code></a> Bump RTD Python version from 3.8 to 3.11 (<a href=\"https://redirect.github.com/psf/black/issues/3868\">#3868</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/4e93f2aa01606154dc6af6e494b9f2b7e4c8c7fa\"><code>4e93f2a</code></a> Add classifier for 3.12 (<a href=\"https://redirect.github.com/psf/black/issues/3866\">#3866</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/716fa08090b6a51e4c72dd0a14b6c45f7da4a9d0\"><code>716fa08</code></a> Upgrade mypy (<a href=\"https://redirect.github.com/psf/black/issues/3864\">#3864</a>)</li>\n<li>Additional commits viewable in <a href=\"https://github.com/psf/black/compare/23.7.0...23.9.1\">compare view</a></li>\n</ul>\n</details>\n<br />\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<details>\n<summary>Dependabot commands and options</summary>\n<br />\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 show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n</details>\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2185.org.readthedocs.build/en/2185/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2185/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1895266807, "node_id": "I_kwDOBm6k_c5w93n3", "number": 2184, "title": "Design decision - should configuration be exposed at /-/config ?", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2023-09-13T21:07:08Z", "updated_at": "2023-09-13T21:07:38Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "> This made me think. That `{\"$env\": \"ENV_VAR\"}` hack was introduced back here:\r\n>\r\n> - https://github.com/simonw/datasette/issues/538\r\n>\r\n> The problem it was solving was that metadata was visible to everyone with access to the instance at `/-/metadata` but plugins clearly needed a way to set secret settings.\r\n>\r\n> Now that this stuff is moving to config, we have some decisions to make:\r\n>\r\n> 1. Add `/-/config` to let people see the configuration of their instance, and keep the `$env` trick for secret settings.\r\n> 2. Say all configuration aside from metadata is secret and make `$env` optional or ditch it entirely.\r\n> 3. Allow plugins to announce which of their configuration options are secret so we can automatically redact them from `/-/config`\r\n>\r\n> I've found `/-/metadata` extraordinarily useful as a user of Datasette - it really helps me understand exactly what's going on if I run into any problems with a plugin, if I can quickly check what the settings look like.\r\n>\r\n> So I'm leaning towards option 1 or 3.\r\n\r\n_Originally posted by @simonw in https://github.com/simonw/datasette/pull/2183#discussion_r1325076924_\r\n\r\nAlso refs:\r\n- #2093", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2184/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1891212159, "node_id": "PR_kwDOBm6k_c5aD33C", "number": 2183, "title": "`datasette.yaml` plugin support", "user": {"value": 15178711, "label": "asg017"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 4, "created_at": "2023-09-11T20:26:04Z", "updated_at": "2023-09-13T21:06:25Z", "closed_at": "2023-09-13T21:06:25Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2183", "body": "Part of #2093\r\n\r\nIn #2149 , we ported over `\"settings.json\"` into the new `datasette.yaml` config file, with a top-level `\"settings\"` key. This PR ports over plugin configuration into top-level `\"plugins\"` key, as well as nested database/table plugin config.\r\n\r\nFrom now on, no plugin-related configuration is allowed in `metadata.yaml`, and must be in `datasette.yaml` in this new format. This is a pretty significant breaking change. Thankfully, you should be able to copy-paste your legacy plugin key/values into the new `datasette.yaml` format.\r\n\r\nAn example of what `datasette.yaml` would look like with this new plugin config:\r\n\r\n```yaml\r\n\r\nplugins:\r\n  datasette-my-plugin:\r\n    config_key: value\r\n\r\ndatabases:\r\n  fixtures:\r\n      plugins: \r\n        datasette-my-plugin:\r\n          config_key: fixtures-db-value\r\n    tables:\r\n      students:\r\n        plugins:\r\n          datasette-my-plugin:\r\n            config_key: fixtures-students-table-value\r\n\r\n```\r\n\r\nAs an additional benefit, this now works with the new `-s` flag:\r\n\r\n```bash\r\ndatasette --memory -s 'plugins.datasette-my-plugin.config_key' new_value\r\n```\r\n\r\n\r\nMarked as a \"Draft\" right now until I add better documentation. We also should have a plan for the next alpha release to document and publicize this change, especially for plugin authors (since their docs will have to change to say `datasette.yaml` instead of `metadata.yaml`\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2183.org.readthedocs.build/en/2183/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2183/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1890593563, "node_id": "PR_kwDOBm6k_c5aBx3g", "number": 2182, "title": "Bump the python-packages group with 2 updates", "user": {"value": 49699333, "label": "dependabot[bot]"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2023-09-11T14:01:25Z", "updated_at": "2023-09-14T13:27:30Z", "closed_at": "2023-09-14T13:27:28Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2182", "body": "Bumps the python-packages group with 2 updates: [furo](https://github.com/pradyunsg/furo) and [black](https://github.com/psf/black).\n\nUpdates `furo` from 2023.8.19 to 2023.9.10\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/pradyunsg/furo/blob/main/docs/changelog.md\">furo's changelog</a>.</em></p>\n<blockquote>\n<h1>Changelog</h1>\n<!-- raw HTML omitted -->\n<h2>2023.09.10 -- Zesty Zaffre</h2>\n<ul>\n<li>Make asset hash injection idempotent, fixing Sphinx 6 compatibility.</li>\n<li>Fix the check for HTML builders, fixing non-HTML Read the Docs builds.</li>\n</ul>\n<h2>2023.08.19 -- Xenolithic Xanadu</h2>\n<ul>\n<li>Fix missing search context with Sphinx 7.2, for dirhtml builds.</li>\n<li>Drop support for Python 3.7.</li>\n<li>Present configuration errors in a better format -- thanks <a href=\"https://github.com/AA-Turner\"><code>@\u200bAA-Turner</code></a>!</li>\n<li>Bump <code>require_sphinx()</code> to Sphinx 6.0, in line with dependency changes in Unassuming Ultramarine.</li>\n</ul>\n<h2>2023.08.17 -- Wonderous White</h2>\n<ul>\n<li>Fix compatiblity with Sphinx 7.2.0 and 7.2.1.</li>\n</ul>\n<h2>2023.07.26 -- Vigilant Volt</h2>\n<ul>\n<li>Fix compatiblity with Sphinx 7.1.</li>\n<li>Improve how content overflow is handled.</li>\n<li>Improve how literal blocks containing inline code are handled.</li>\n</ul>\n<h2>2023.05.20 -- Unassuming Ultramarine</h2>\n<ul>\n<li>\u2728 Add support for Sphinx 7.</li>\n<li>Drop support for Sphinx 5.</li>\n<li>Improve the screen-reader label for sidebar collapse.</li>\n<li>Make it easier to create derived themes from Furo.</li>\n<li>Bump all JS dependencies (NodeJS and npm packages).</li>\n</ul>\n<h2>2023.03.27 -- Tasty Tangerine</h2>\n<ul>\n<li>Regenerate with newer version of sphinx-theme-builder, to fix RECORD hashes.</li>\n<li>Add missing class to Font Awesome examples</li>\n</ul>\n<h2>2023.03.23 -- Sassy Saffron</h2>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/2718ca42930f7c8c11bc96341e0d3db6f532b08d\"><code>2718ca4</code></a> Prepare release: 2023.09.10</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/c22c99d931decfa4641e400e428606bc6184af56\"><code>c22c99d</code></a> Update changelog</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/c37e84961d9ffbc77ab7be268081d1b3497f0311\"><code>c37e849</code></a> Quote a not-runtime-generic type annotation</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/9cfdf44784dc90085549490ff1eddd2afc37c1d6\"><code>9cfdf44</code></a> Rework infrastructure for linting</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/5abeb9fc962aee61eda02e0c75e872004635e9d5\"><code>5abeb9f</code></a> Fix the check for HTML builders</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/ee2ab5459ddb0a32c3467b88c9c628611eb55073\"><code>ee2ab54</code></a> Tweak how tests are run with nox</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/cdae2366c340695ba724ca8438a4cd1e605c8848\"><code>cdae236</code></a> Test against Sphinx minor versions in CI</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/9e40071eb8c4c3e38845b57c4f5242bef2a44af2\"><code>9e40071</code></a> Make asset hash injection idempotent</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/aab86f4624b6ef38a151440be5624746d41882b1\"><code>aab86f4</code></a> Revert &quot;Exclude incompatible Sphinx releases (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/711\">#711</a>)&quot;</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/4dd6eec9e306b5fd0624ec8d1d90c6ad416c5182\"><code>4dd6eec</code></a> Exclude incompatible Sphinx releases (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/711\">#711</a>)</li>\n<li>Additional commits viewable in <a href=\"https://github.com/pradyunsg/furo/compare/2023.08.19...2023.09.10\">compare view</a></li>\n</ul>\n</details>\n<br />\n\nUpdates `black` from 23.7.0 to 23.9.1\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/psf/black/releases\">black's releases</a>.</em></p>\n<blockquote>\n<h2>23.9.1</h2>\n<p>Due to various issues, the previous release (23.9.0) did not include compiled mypyc\nwheels, which make Black significantly faster. These issues have now been fixed, and\nthis release should come with compiled wheels once again.</p>\n<p>There will be no wheels for Python 3.12 due to a bug in mypyc. We will provide 3.12\nwheels in a future release as soon as the mypyc bug is fixed.</p>\n<h3>Packaging</h3>\n<ul>\n<li>Upgrade to mypy 1.5.1 (<a href=\"https://redirect.github.com/psf/black/issues/3864\">#3864</a>)</li>\n</ul>\n<h3>Performance</h3>\n<ul>\n<li>Store raw tuples instead of NamedTuples in Black's cache, improving performance and\ndecreasing the size of the cache (<a href=\"https://redirect.github.com/psf/black/issues/3877\">#3877</a>)</li>\n</ul>\n<h2>23.9.0</h2>\n<h3>Preview style</h3>\n<ul>\n<li>More concise formatting for dummy implementations (<a href=\"https://redirect.github.com/psf/black/issues/3796\">#3796</a>)</li>\n<li>In stub files, add a blank line between a statement with a body (e.g an\n<code>if sys.version_info &gt; (3, x):</code>) and a function definition on the same level (<a href=\"https://redirect.github.com/psf/black/issues/3862\">#3862</a>)</li>\n<li>Fix a bug whereby spaces were removed from walrus operators within subscript(<a href=\"https://redirect.github.com/psf/black/issues/3823\">#3823</a>)</li>\n</ul>\n<h3>Configuration</h3>\n<ul>\n<li>Black now applies exclusion and ignore logic before resolving symlinks (<a href=\"https://redirect.github.com/psf/black/issues/3846\">#3846</a>)</li>\n</ul>\n<h3>Performance</h3>\n<ul>\n<li>Avoid importing <code>IPython</code> if notebook cells do not contain magics (<a href=\"https://redirect.github.com/psf/black/issues/3782\">#3782</a>)</li>\n<li>Improve caching by comparing file hashes as fallback for mtime and size (<a href=\"https://redirect.github.com/psf/black/issues/3821\">#3821</a>)</li>\n</ul>\n<h3><em>Blackd</em></h3>\n<ul>\n<li>Fix an issue in <code>blackd</code> with single character input (<a href=\"https://redirect.github.com/psf/black/issues/3558\">#3558</a>)</li>\n</ul>\n<h3>Integrations</h3>\n<ul>\n<li>Black now has an\n<a href=\"https://github.com/psf/black-pre-commit-mirror\">official pre-commit mirror</a>. Swapping\n<code>https://github.com/psf/black</code> to <code>https://github.com/psf/black-pre-commit-mirror</code> in\nyour <code>.pre-commit-config.yaml</code> will make Black about 2x faster (<a href=\"https://redirect.github.com/psf/black/issues/3828\">#3828</a>)</li>\n<li>The <code>.black.env</code> folder specified by <code>ENV_PATH</code> will now be removed on the completion\nof the GitHub Action (<a href=\"https://redirect.github.com/psf/black/issues/3759\">#3759</a>)</li>\n</ul>\n</blockquote>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/psf/black/blob/main/CHANGES.md\">black's changelog</a>.</em></p>\n<blockquote>\n<h2>23.9.1</h2>\n<p>Due to various issues, the previous release (23.9.0) did not include compiled mypyc\nwheels, which make Black significantly faster. These issues have now been fixed, and\nthis release should come with compiled wheels once again.</p>\n<p>There will be no wheels for Python 3.12 due to a bug in mypyc. We will provide 3.12\nwheels in a future release as soon as the mypyc bug is fixed.</p>\n<h3>Packaging</h3>\n<ul>\n<li>Upgrade to mypy 1.5.1 (<a href=\"https://redirect.github.com/psf/black/issues/3864\">#3864</a>)</li>\n</ul>\n<h3>Performance</h3>\n<ul>\n<li>Store raw tuples instead of NamedTuples in Black's cache, improving performance and\ndecreasing the size of the cache (<a href=\"https://redirect.github.com/psf/black/issues/3877\">#3877</a>)</li>\n</ul>\n<h2>23.9.0</h2>\n<h3>Preview style</h3>\n<ul>\n<li>More concise formatting for dummy implementations (<a href=\"https://redirect.github.com/psf/black/issues/3796\">#3796</a>)</li>\n<li>In stub files, add a blank line between a statement with a body (e.g an\n<code>if sys.version_info &gt; (3, x):</code>) and a function definition on the same level (<a href=\"https://redirect.github.com/psf/black/issues/3862\">#3862</a>)</li>\n<li>Fix a bug whereby spaces were removed from walrus operators within subscript(<a href=\"https://redirect.github.com/psf/black/issues/3823\">#3823</a>)</li>\n</ul>\n<h3>Configuration</h3>\n<ul>\n<li>Black now applies exclusion and ignore logic before resolving symlinks (<a href=\"https://redirect.github.com/psf/black/issues/3846\">#3846</a>)</li>\n</ul>\n<h3>Performance</h3>\n<ul>\n<li>Avoid importing <code>IPython</code> if notebook cells do not contain magics (<a href=\"https://redirect.github.com/psf/black/issues/3782\">#3782</a>)</li>\n<li>Improve caching by comparing file hashes as fallback for mtime and size (<a href=\"https://redirect.github.com/psf/black/issues/3821\">#3821</a>)</li>\n</ul>\n<h3><em>Blackd</em></h3>\n<ul>\n<li>Fix an issue in <code>blackd</code> with single character input (<a href=\"https://redirect.github.com/psf/black/issues/3558\">#3558</a>)</li>\n</ul>\n<h3>Integrations</h3>\n<ul>\n<li>Black now has an\n<a href=\"https://github.com/psf/black-pre-commit-mirror\">official pre-commit mirror</a>. Swapping\n<code>https://github.com/psf/black</code> to <code>https://github.com/psf/black-pre-commit-mirror</code> in\nyour <code>.pre-commit-config.yaml</code> will make Black about 2x faster (<a href=\"https://redirect.github.com/psf/black/issues/3828\">#3828</a>)</li>\n<li>The <code>.black.env</code> folder specified by <code>ENV_PATH</code> will now be removed on the completion\nof the GitHub Action (<a href=\"https://redirect.github.com/psf/black/issues/3759\">#3759</a>)</li>\n</ul>\n</blockquote>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/psf/black/commit/e87737140f32d3cd7c44ede75f02dcd58e55820e\"><code>e877371</code></a> Prepare release 23.9.1 (<a href=\"https://redirect.github.com/psf/black/issues/3878\">#3878</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/62dca32dc55a850f39d78ba8b9c21cc4261a2ddf\"><code>62dca32</code></a> mypyc builds on PRs, skip mypyc wheels for 3.12 (<a href=\"https://redirect.github.com/psf/black/issues/3870\">#3870</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/751583a1dfc691423d96d7711a4c8d9cfe3ee9c8\"><code>751583a</code></a> Pickle raw tuples in FileData cache (<a href=\"https://redirect.github.com/psf/black/issues/3877\">#3877</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/f7917453c99f8183ffd0397affcccb2c37594771\"><code>f791745</code></a> Re-export black.Mode (<a href=\"https://redirect.github.com/psf/black/issues/3875\">#3875</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/0b62b9c9a44a995e44d64ecf7cc08d8d7037642d\"><code>0b62b9c</code></a> Ignore aiohttp DeprecationWarning for 3.12 (<a href=\"https://redirect.github.com/psf/black/issues/3876\">#3876</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/c83ad6c077e7bb281cfd3fbdd89bbeb4c980e563\"><code>c83ad6c</code></a> Upgrade to Furo 2023.9.10 to fix docs build (<a href=\"https://redirect.github.com/psf/black/issues/3873\">#3873</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/4eebfd1a7a4aa2652cfc674cf301d1f2f48098aa\"><code>4eebfd1</code></a> Add mypyc test marks to new tests that patch (<a href=\"https://redirect.github.com/psf/black/issues/3871\">#3871</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/add161b367a0d5a3cc395ec8e045f7b965edaef8\"><code>add161b</code></a> Bump RTD Python version from 3.8 to 3.11 (<a href=\"https://redirect.github.com/psf/black/issues/3868\">#3868</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/4e93f2aa01606154dc6af6e494b9f2b7e4c8c7fa\"><code>4e93f2a</code></a> Add classifier for 3.12 (<a href=\"https://redirect.github.com/psf/black/issues/3866\">#3866</a>)</li>\n<li><a href=\"https://github.com/psf/black/commit/716fa08090b6a51e4c72dd0a14b6c45f7da4a9d0\"><code>716fa08</code></a> Upgrade mypy (<a href=\"https://redirect.github.com/psf/black/issues/3864\">#3864</a>)</li>\n<li>Additional commits viewable in <a href=\"https://github.com/psf/black/compare/23.7.0...23.9.1\">compare view</a></li>\n</ul>\n</details>\n<br />\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<details>\n<summary>Dependabot commands and options</summary>\n<br />\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 show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n</details>\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2182.org.readthedocs.build/en/2182/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2182/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1886812002, "node_id": "PR_kwDOBm6k_c5Z1N2L", "number": 2181, "title": "actors_from_ids plugin hook and datasette.actors_from_ids() method", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 3, "created_at": "2023-09-08T01:51:07Z", "updated_at": "2023-09-08T04:24:00Z", "closed_at": "2023-09-08T04:23:59Z", "author_association": "OWNER", "pull_request": "simonw/datasette/pulls/2181", "body": "Refs:\r\n- #2180\r\n\r\nThis plugin hook is feature complete - including documentation and tests.\r\n\r\nI'm not going to land it in Datasette `main` until we've used it at least once though, which should happen promptly in development for [Datasette Cloud](https://www.datasette.cloud/).\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2181.org.readthedocs.build/en/2181/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2181/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1886791100, "node_id": "I_kwDOBm6k_c5wdiW8", "number": 2180, "title": "Plugin hook: `actors_from_ids()`", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 6, "created_at": "2023-09-08T01:16:41Z", "updated_at": "2023-09-10T17:44:14Z", "closed_at": "2023-09-08T04:28:03Z", "author_association": "OWNER", "pull_request": null, "body": "In building Datasette Cloud we realized that a bunch of the features we are building need a way of resolving an actor ID to the actual actor, in order to display something more interesting than just an integer ID.\r\n\r\nSocial plugins in particular need this - comments by X, CSV uploaded by X, that kind of thing.\r\n\r\nI think the solution is a new plugin hook: `actors_from_ids(datasette, ids)` which can return a list of actor dictionaries.\r\n\r\nThe default implementation can return `[{\"id\": \"...\"}]` for the IDs passed to it.\r\n\r\nPluggy has a `firstresult=True` option which is relevant here, since this is the first plugin hook we will have implemented where only one plugin should provide an answer.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2180/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1886649402, "node_id": "I_kwDOBm6k_c5wc_w6", "number": 2179, "title": "Flaky test: test_hidden_sqlite_stat1_table", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2023-09-07T22:48:43Z", "updated_at": "2023-09-07T22:51:19Z", "closed_at": "2023-09-07T22:51:19Z", "author_association": "OWNER", "pull_request": null, "body": "This test here: https://github.com/simonw/datasette/blob/fbcb103c0cb6668018ace539a01a6a1f156e8d6a/tests/test_api.py#L1011-L1020\r\n\r\nIt failed for me like this:\r\n\r\n`E       AssertionError: assert [('normal', False), ('sqlite_stat1', True), ('sqlite_stat4', True)] in ([('normal', False), ('sqlite_stat1', True)],)`\r\n\r\nLooks like some builds of SQLite include a `sqlite_stat4` table.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2179/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1886350562, "node_id": "I_kwDOBm6k_c5wb2zi", "number": 2178, "title": "Don't show foreign key links to tables the user cannot access", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 5, "created_at": "2023-09-07T17:56:41Z", "updated_at": "2023-09-07T23:28:27Z", "closed_at": "2023-09-07T23:28:27Z", "author_association": "OWNER", "pull_request": null, "body": "Spotted this problem while working on this plugin:\r\n- https://github.com/simonw/datasette-public\r\n\r\nIt's possible to make a table public to any users - but then you may end up with situations like this:\r\n\r\n<img width=\"1095\" alt=\"CleanShot 2023-09-07 at 10 55 02@2x\" src=\"https://github.com/simonw/datasette/assets/9599/514a00be-f399-4b08-aa5e-f07d603b5ffe\">\r\n\r\nThat table is public, but the foreign key links go to tables that are NOT public.\r\n\r\nWe're also leaking the names of the values in those private tables here, which we shouldn't do. So this is a tiny bit of an information leak.\r\n\r\nSince this only affects people who have configured a table to be public that has foreign keys to a table that is private I don't think this is worth issuing a vulnerability report about - I very much doubt anyone is running Datasette configured in a way that could result in problems because of this.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2178/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1884408624, "node_id": "I_kwDOBm6k_c5wUcsw", "number": 2177, "title": "Move schema tables from _internal to _catalog", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2023-09-06T16:58:33Z", "updated_at": "2023-09-06T17:04:30Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "This came up in discussion over:\r\n- https://github.com/simonw/datasette/pull/2174\r\n\r\n", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2177/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1884333600, "node_id": "PR_kwDOBm6k_c5Zszqk", "number": 2175, "title": "Test against Python 3.12 preview", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2023-09-06T16:09:05Z", "updated_at": "2023-09-06T16:16:28Z", "closed_at": "2023-09-06T16:16:27Z", "author_association": "OWNER", "pull_request": "simonw/datasette/pulls/2175", "body": "https://dev.to/hugovk/help-test-python-312-beta-1508/\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2175.org.readthedocs.build/en/2175/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2175/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1884330740, "node_id": "PR_kwDOBm6k_c5ZszDF", "number": 2174, "title": "Use $DATASETTE_INTERNAL in absence of --internal", "user": {"value": 15178711, "label": "asg017"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 3, "created_at": "2023-09-06T16:07:15Z", "updated_at": "2023-09-08T00:46:13Z", "closed_at": null, "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2174", "body": "#refs 2157, specifically [this comment](https://github.com/simonw/datasette/issues/2157#issuecomment-1700291967)\r\n\r\nPassing in `--internal my_internal.db` over and over again can get repetitive. \r\n\r\nThis PR adds a new configurable env variable `DATASETTE_INTERNAL_DB_PATH`. If it's defined, then it takes place as the path to the internal database. Users can still overwrite this behavior by passing in their own `--internal internal.db` flag.\r\n\r\nIn draft mode for now, needs tests and documentation. \r\n\r\nSide note: Maybe we can have a sections in the docs that lists all the \"configuration environment variables\" that Datasette respects? I did a quick grep and found:\r\n\r\n- `DATASETTE_LOAD_PLUGINS`\r\n- `DATASETTE_SECRETS`\r\n\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2174.org.readthedocs.build/en/2174/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2174/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1883055640, "node_id": "PR_kwDOBm6k_c5ZociX", "number": 2173, "title": "click-default-group>=1.2.3", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 3, "created_at": "2023-09-06T02:33:28Z", "updated_at": "2023-09-06T02:50:10Z", "closed_at": "2023-09-06T02:50:10Z", "author_association": "OWNER", "pull_request": "simonw/datasette/pulls/2173", "body": "Now available as a wheel:\r\n- https://github.com/click-contrib/click-default-group/issues/21\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2173.org.readthedocs.build/en/2173/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2173/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1876407598, "node_id": "I_kwDOBm6k_c5v17Uu", "number": 2169, "title": "execute-sql on a database should imply view-database/view-permission", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2023-08-31T22:45:56Z", "updated_at": "2023-08-31T22:46:28Z", "closed_at": "2023-08-31T22:46:28Z", "author_association": "OWNER", "pull_request": null, "body": "I noticed that a token with `execute-sql` permission alone did not work, because it was not allowed to view the instance of the database.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2169/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1876353656, "node_id": "I_kwDOBm6k_c5v1uJ4", "number": 2168, "title": "Consider a request/response wrapping hook slightly higher level than asgi_wrapper()", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 6, "created_at": "2023-08-31T21:42:04Z", "updated_at": "2023-09-10T17:54:08Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "There's a long justification for why this might be needed here:\r\n- https://github.com/simonw/datasette-auth-tokens/issues/10#issuecomment-1701820001\r\n\r\nShort version: it would be neat if it was possible to stash some data on the `request` object such that a later plugin/middleware-type-thing could use that to influence the final returned response - similar to the kinds of things you can do with Django middleware.\r\n\r\nThe `asgi_wrapper()` mechanism doesn't have access to the request or response objects - it gets `scope` and can mess around with `receive` and `send`, but those are pretty low-level primitives.\r\n\r\nSince Datasette has well-defined `request` and `response` objects now it might be nice to have a middleware layer that can manipulate those directly.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2168/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1875739055, "node_id": "I_kwDOBm6k_c5vzYGv", "number": 2167, "title": "Document return type of await ds.permission_allowed()", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2023-08-31T15:14:23Z", "updated_at": "2023-08-31T15:14:23Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "The return type isn't documented here: https://github.com/simonw/datasette/blob/4c3ef033110407f3b3dbce501659d523724985e0/docs/internals.rst#L327-L350\r\n\r\nOn inspecting the code I'm not 100% sure if it's possible for this. method to return `None`, or if it can only return `True` or `False`. Need to confirm that.\r\n\r\nhttps://github.com/simonw/datasette/blob/4c3ef033110407f3b3dbce501659d523724985e0/datasette/app.py#L822C15-L853", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2167/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1875519316, "node_id": "PR_kwDOBm6k_c5ZPO5y", "number": 2166, "title": "Bump the python-packages group with 1 update", "user": {"value": 49699333, "label": "dependabot[bot]"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2023-08-31T13:19:57Z", "updated_at": "2023-09-06T16:34:32Z", "closed_at": "2023-09-06T16:34:31Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2166", "body": "Bumps the python-packages group with 1 update: [sphinx](https://github.com/sphinx-doc/sphinx).\n\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/releases\">sphinx's releases</a>.</em></p>\n<blockquote>\n<h2>Sphinx 7.2.5</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n</blockquote>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/blob/master/CHANGES\">sphinx's changelog</a>.</em></p>\n<blockquote>\n<h1>Release 7.2.5 (released Aug 30, 2023)</h1>\n<h2>Bugs fixed</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11645\">#11645</a>: Fix a regression preventing autodoc from importing modules within\npackages that make use of <code>if typing.TYPE_CHECKING:</code> to guard circular\nimports needed by type checkers.\nPatch by Matt Wozniski.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11634\">#11634</a>: Fixed inheritance diagram relative link resolution\nfor sibling files in a subdirectory.\nPatch by Albert Shih.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11659\">#11659</a>: Allow <code>?config=...</code> in :confval:<code>mathjax_path</code>.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11654\">#11654</a>: autodoc: Fail with a more descriptive error message\nwhen an object claims to be an instance of <code>type</code>,\nbut is not a class.\nPatch by James Braza.</li>\n<li>11620: Cease emitting :event:<code>source-read</code> events for files read via\nthe :dudir:<code>include</code> directive.</li>\n<li>11620: Add a new :event:<code>include-read</code> for observing and transforming\nthe content of included files via the :dudir:<code>include</code> directive.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11627\">#11627</a>: Restore support for copyright lines of the form <code>YYYY</code>\nwhen <code>SOURCE_DATE_EPOCH</code> is set.</li>\n</ul>\n</blockquote>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/fcc38997f1d9b728bb4ffc64fc362c7763a4ee25\"><code>fcc3899</code></a> Bump to 7.2.5 final</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/2a631f97ef7f4b0edc2470c9cc2b7d809dd75a87\"><code>2a631f9</code></a> Restore support for YYYY copyright lines</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/2730cc3353b06f16786d697c61c8b847a91ddd30\"><code>2730cc3</code></a> Remove double spaces in CHANGES</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/ff18318613db56d0000db47e5c8f0140556cef0c\"><code>ff18318</code></a> Add an <code>'include-read'</code> event (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11657\">#11657</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/74329d9c51c16be54e1f3dece07461f67cfb8ab0\"><code>74329d9</code></a> Fail better in <code>ExceptionDocumenter.can_document_member</code> (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11660\">#11660</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/7d046a862f06631367984b87c1e8c2acb518de4f\"><code>7d046a8</code></a> Allow <code>?config=...</code> in <code>mathjax_path</code> (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11659\">#11659</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/4692208fde90f5a651f303c0550bcf2b7a8a049c\"><code>4692208</code></a> Fix two relative link bugs in inheritance diagrams (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11634\">#11634</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/ca0fc7aa86cb8acfb4445aab17666a836abaee43\"><code>ca0fc7a</code></a> Add git .mailmap file</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/8248be31dbd6f235b9393f39ff16fa9e67dec67c\"><code>8248be3</code></a> autodoc: Reset <code>sys.modules</code> on partial import failure (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11645\">#11645</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/e494baa9dd3f43ceeab29454f6b433456339da78\"><code>e494baa</code></a> Recommend correct replacement names for deprecated APIs (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11655\">#11655</a>)</li>\n<li>Additional commits viewable in <a href=\"https://github.com/sphinx-doc/sphinx/compare/v7.2.4...v7.2.5\">compare view</a></li>\n</ul>\n</details>\n<br />\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sphinx&package-manager=pip&previous-version=7.2.4&new-version=7.2.5)](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<details>\n<summary>Dependabot commands and options</summary>\n<br />\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 show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n</details>\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2166.org.readthedocs.build/en/2166/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2166/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1874327336, "node_id": "PR_kwDOBm6k_c5ZLMSe", "number": 2165, "title": "DATASETTE_LOAD_PLUGINS environment variable for loading specific plugins", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 6, "created_at": "2023-08-30T20:33:30Z", "updated_at": "2023-08-30T22:12:25Z", "closed_at": "2023-08-30T22:12:25Z", "author_association": "OWNER", "pull_request": "simonw/datasette/pulls/2165", "body": "- #2164\r\n\r\nTODO:\r\n\r\n- [x] Automated tests\r\n- [ ] Documentation\r\n- [x] Make sure `DATASETTE_LOAD_PLUGINS=''` works for loading zero plugins", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2165/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1874255116, "node_id": "I_kwDOBm6k_c5vtt0M", "number": 2164, "title": "Ability to only load a specific list of plugins", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2023-08-30T19:33:41Z", "updated_at": "2023-09-08T04:35:46Z", "closed_at": "2023-08-30T22:12:27Z", "author_association": "OWNER", "pull_request": null, "body": "I'm going to try and get this working through an environment variable, so that you can start Datasette and it will only load a subset of plugins including those that use the `register_commands()` hook.\r\n\r\nInitial research on this:\r\n- https://github.com/pytest-dev/pluggy/issues/422", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2164/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1872043170, "node_id": "I_kwDOBm6k_c5vlRyi", "number": 2163, "title": "Rename core_X to catalog_X in the internals", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2023-08-29T16:45:00Z", "updated_at": "2023-08-29T17:01:31Z", "closed_at": "2023-08-29T17:01:31Z", "author_association": "OWNER", "pull_request": null, "body": "Discussed with Alex this morning. We think the American spelling is fine here (it's shorter than `catalogue`) and that it's a slightly less lazy name than `core_`.\r\n\r\nFollows:\r\n- https://github.com/simonw/datasette/issues/2157", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2163/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1870672704, "node_id": "PR_kwDOBm6k_c5Y-7Em", "number": 2162, "title": "Add new `--internal internal.db` option, deprecate legacy `_internal` database", "user": {"value": 15178711, "label": "asg017"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 4, "created_at": "2023-08-29T00:05:07Z", "updated_at": "2023-08-29T03:24:23Z", "closed_at": "2023-08-29T03:24:23Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2162", "body": "refs #2157 \r\n\r\nThis PR adds a new `--internal` option to datasette serve. If provided, it is the path to a persistent internal database that Datasette core and Datasette plugins can use to store data, as discussed in the proposal issue. \r\n\r\nThis PR also removes and deprecates the previous in-memory `_internal` database. Those tables now appear in the `internal` database, with `core_` prefixes (ex `tables` in `_internal` is now `core_tables` in `internal`).\r\n\r\n\r\n## A note on the new `core_` tables\r\nHowever, one important notes about those new `core_` tables: If a `--internal` DB is passed in, that means those `core_` tables will persist across multiple Datasette instances. This wasn't the case before, since `_internal` was always an in-memory database created from scratch.\r\n\r\nI tried to put those `core_` tables as `TEMP` tables - after all, there's always one 1 `internal` DB connection at a time, so I figured it would work. But, since we use the `Database()` wrapper for the internal DB, it has two separate connections: a default read-only connection and a write connection that is created when a write operation occurs. Which meant the `TEMP` tables would be created by the write connection, but not available in the read-only connection. \r\n\r\nSo I had a brillant idea: Attach an in-memory named database with `cache=shared`, and create those tables there! \r\n\r\n```sql\r\nATTACH DATABASE 'file:datasette_internal_core?mode=memory&cache=shared' AS core;\r\n```\r\n\r\nWe'd run this on both the read-only connection and the write-only connection. That way, those tables would stay in memory, they'd communicate with the `cache=shared` feature, and we'd be good to go.\r\n\r\n\r\nHowever, I couldn't find an easy way to run a `ATTACH DATABASE` command on the read-only query. \r\n\r\nUsing `Database()` as a wrapper for the internal DB is pretty limiting - it's meant for Datasette \"data\" databases, where we want multiple readers and possibly 1 write connection at a time. But the internal database doesn't really require that kind of support - I think we could get away with a single read/write connection, but it seemed like too big of a rabbithole to go through now. \r\n\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\r\n:books: Documentation preview :books:: https://datasette--2162.org.readthedocs.build/en/2162/\r\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2162/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1870345352, "node_id": "PR_kwDOBm6k_c5Y90K9", "number": 2161, "title": "-s/--setting x y gets merged into datasette.yml, refs #2143, #2156", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2023-08-28T19:30:42Z", "updated_at": "2023-08-28T20:06:15Z", "closed_at": "2023-08-28T20:06:14Z", "author_association": "OWNER", "pull_request": "simonw/datasette/pulls/2161", "body": "This change updates the `-s/--setting` option to `datasette serve` to allow it to be used to set arbitrarily complex nested settings in a way that is compatible with the new `-c datasette.yml` work happening in:\r\n- #2143\r\n\r\nIt will enable things like this:\r\n```\r\ndatasette data.db --setting plugins.datasette-ripgrep.path \"/home/simon/code\"\r\n```\r\nFor the moment though it just affects [settings](https://docs.datasette.io/en/1.0a4/settings.html) - so you can do this:\r\n```\r\ndatasette data.db --setting settings.sql_time_limit_ms 3500\r\n```\r\nI've also implemented a backwards compatibility mechanism, so if you use it this way (the old way):\r\n```\r\ndatasette data.db --setting sql_time_limit_ms 3500\r\n```\r\nIt will notice that the setting you passed is one of Datasette's core settings, and will treat that as if you said `settings.sql_time_limit_ms` instead.\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2161.org.readthedocs.build/en/2161/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2161/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1869807874, "node_id": "PR_kwDOBm6k_c5Y8AN0", "number": 2160, "title": "Bump sphinx, furo, blacken-docs dependencies", "user": {"value": 49699333, "label": "dependabot[bot]"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 5, "created_at": "2023-08-28T13:49:31Z", "updated_at": "2023-08-29T00:38:33Z", "closed_at": "2023-08-29T00:38:32Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2160", "body": "Bumps the python-packages group with 3 updates: [sphinx](https://github.com/sphinx-doc/sphinx), [furo](https://github.com/pradyunsg/furo) and [blacken-docs](https://github.com/asottile/blacken-docs).\n\nUpdates `sphinx` from 7.1.2 to 7.2.4\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/releases\">sphinx's releases</a>.</em></p>\n<blockquote>\n<h2>Sphinx 7.2.4</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>Sphinx 7.2.3</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>Sphinx 7.2.2</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>Sphinx 7.2.1</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>Sphinx 7.2.0</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n</blockquote>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/blob/master/CHANGES\">sphinx's changelog</a>.</em></p>\n<blockquote>\n<h1>Release 7.2.4 (released Aug 28, 2023)</h1>\n<h2>Bugs fixed</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11618\">#11618</a>: Fix a regression in the MoveModuleTargets transform,\nintroduced in <a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/10478\">#10478</a> (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/9662\">#9662</a>).</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11649\">#11649</a>: linkcheck: Resolve hanging tests for timezones west of London\nand incorrect conversion from UTC to offsets from the UNIX epoch.\nPatch by Dmitry Shachnev and Adam Turner.</li>\n</ul>\n<h1>Release 7.2.3 (released Aug 23, 2023)</h1>\n<h2>Dependencies</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11576\">#11576</a>: Require sphinxcontrib-serializinghtml 1.1.9.</li>\n</ul>\n<h2>Bugs fixed</h2>\n<ul>\n<li>Fix regression in <code>autodoc.Documenter.parse_name()</code>.</li>\n<li>Fix regression in JSON serialisation.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11543\">#11543</a>: autodoc: Support positional-only parameters in <code>classmethod</code> methods\nwhen <code>autodoc_preserve_defaults</code> is <code>True</code>.</li>\n<li>Restore support string methods on path objects.\nThis is deprecated and will be removed in Sphinx 8.\nUse :py:func:<code>os.fspath</code> to convert :py:class:<code>~pathlib.Path</code> objects to strings,\nor :py:class:<code>~pathlib.Path</code>'s methods to work with path objects.</li>\n</ul>\n<h1>Release 7.2.2 (released Aug 17, 2023)</h1>\n<h2>Bugs fixed</h2>\n<ul>\n<li>Fix the signature of the <code>StateMachine.insert_input()</code> patch,\nfor when calling with keyword arguments.</li>\n<li>Fixed membership testing (<code>in</code>) for the :py:class:<code>str</code> interface\nof the asset classes (<code>_CascadingStyleSheet</code> and <code>_JavaScript</code>),\nwhich several extensions relied upon.</li>\n<li>Fixed a type error in <code>SingleFileHTMLBuilder._get_local_toctree</code>,\n<code>includehidden</code> may be passed as a string or a boolean.</li>\n<li>Fix <code>:noindex:</code> for <code>PyModule</code> and <code>JSModule</code>.</li>\n</ul>\n<h1>Release 7.2.1 (released Aug 17, 2023)</h1>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/3256f1f22092a3e9c2925472f6f0b41e4f09e902\"><code>3256f1f</code></a> Bump to 7.2.4 final</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/2f025a4b226610a170d008a24eeba4f90719fa76\"><code>2f025a4</code></a> linkcheck: Fix conversion from UTC time to the UNIX epoch (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11649\">#11649</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/1567281287f780d83d5c1b1202a7e551fd0b3998\"><code>1567281</code></a> autodoc: Fix UnboundLocalError in <code>filter_members</code> (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11651\">#11651</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/5e88b9f88665dd8782b9feb381b499ae580cfa1a\"><code>5e88b9f</code></a> Fix the MoveModuleTargets transform (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11647\">#11647</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/694fcee13d4298ca39ff08837c28b12b2485fbfd\"><code>694fcee</code></a> Fix markup in CHANGES (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11639\">#11639</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/c503c90090efb54eab81621dde73e4c57e1af1e6\"><code>c503c90</code></a> Improve <code>pathlib</code> type annotations (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11646\">#11646</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/bf339b123e9f01bfc62663849563d52a7099701a\"><code>bf339b1</code></a> Bump version</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/2f6ea1422b08f9494f34b80c2ff6c96b5f396fdc\"><code>2f6ea14</code></a> Bump to 7.2.3 final</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/511e4070aa429a41eac04e88d96806c8fd0a5cc7\"><code>511e407</code></a> Implement <code>bool()</code> for string paths</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/494de7327f23e1b8a09f4e327f6d4cdf4e351013\"><code>494de73</code></a> Implement <code>hash()</code> for string paths</li>\n<li>Additional commits viewable in <a href=\"https://github.com/sphinx-doc/sphinx/compare/v7.1.2...v7.2.4\">compare view</a></li>\n</ul>\n</details>\n<br />\n\nUpdates `furo` from 2023.7.26 to 2023.8.19\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/pradyunsg/furo/blob/main/docs/changelog.md\">furo's changelog</a>.</em></p>\n<blockquote>\n<h1>Changelog</h1>\n<!-- raw HTML omitted -->\n<h2>2023.08.19 -- Xenolithic Xanadu</h2>\n<ul>\n<li>Fix missing search context with Sphinx 7.2, for dirhtml builds.</li>\n<li>Drop support for Python 3.7.</li>\n<li>Present configuration errors in a better format -- thanks <a href=\"https://github.com/AA-Turner\"><code>@\u200bAA-Turner</code></a>!</li>\n<li>Bump <code>require_sphinx()</code> to Sphinx 6.0, in line with dependency changes in Unassuming Ultramarine.</li>\n</ul>\n<h2>2023.08.17 -- Wonderous White</h2>\n<ul>\n<li>Fix compatiblity with Sphinx 7.2.0 and 7.2.1.</li>\n</ul>\n<h2>2023.07.26 -- Vigilant Volt</h2>\n<ul>\n<li>Fix compatiblity with Sphinx 7.1.</li>\n<li>Improve how content overflow is handled.</li>\n<li>Improve how literal blocks containing inline code are handled.</li>\n</ul>\n<h2>2023.05.20 -- Unassuming Ultramarine</h2>\n<ul>\n<li>\u2728 Add support for Sphinx 7.</li>\n<li>Drop support for Sphinx 5.</li>\n<li>Improve the screen-reader label for sidebar collapse.</li>\n<li>Make it easier to create derived themes from Furo.</li>\n<li>Bump all JS dependencies (NodeJS and npm packages).</li>\n</ul>\n<h2>2023.03.27 -- Tasty Tangerine</h2>\n<ul>\n<li>Regenerate with newer version of sphinx-theme-builder, to fix RECORD hashes.</li>\n<li>Add missing class to Font Awesome examples</li>\n</ul>\n<h2>2023.03.23 -- Sassy Saffron</h2>\n<ul>\n<li>Update Python version classifiers.</li>\n<li>Increase the icon size in mobile header.</li>\n<li>Increase admonition title bg opacity.</li>\n<li>Change the default API background to transparent.</li>\n<li>Transition the API background change.</li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/0766bb2d6d0392bf90d4e4ac447ae721fa673ee9\"><code>0766bb2</code></a> Prepare release: 2023.08.19</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/807d73cb1080a1c9b8321a1dcffd84aee73e859a\"><code>807d73c</code></a> Update changelog</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/364b2611f27e463cd1f879bf348975c01294ffc0\"><code>364b261</code></a> Accomodate for the required <code>data-content_root</code> for search</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/0d38bc6cffc528ce3cf742fe2bd20e83c46d7891\"><code>0d38bc6</code></a> Simplify retrieval of <code>pygments_dark_style</code> value (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/699\">#699</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/3631ffc4ea2f241b89bbd9b6c9d76e52a4226c56\"><code>3631ffc</code></a> Use <code>sphinx.errors.ConfigError</code> (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/697\">#697</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/d2e2448852752ec570313bc1daea3bda56069816\"><code>d2e2448</code></a> Remove duplicate HTML builder check (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/698\">#698</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/7b4f1308832e99d8e49c80f24665e938673c1644\"><code>7b4f130</code></a> Drop Python 3.7 (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/701\">#701</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/e322b71b10c959cce0af80d3ac6934725ce728bb\"><code>e322b71</code></a> Remove pointless assert (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/702\">#702</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/ee2097a797e92f1155a17287d063b3181f137115\"><code>ee2097a</code></a> Bump <code>require_sphinx()</code> to Sphinx 6.0 (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/700\">#700</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/c1ff10b768aaa2a2e479bbf8d58187e12a2731ac\"><code>c1ff10b</code></a> Back to development</li>\n<li>Additional commits viewable in <a href=\"https://github.com/pradyunsg/furo/compare/2023.07.26...2023.08.19\">compare view</a></li>\n</ul>\n</details>\n<br />\n\nUpdates `blacken-docs` from 1.15.0 to 1.16.0\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/adamchainz/blacken-docs/blob/main/CHANGELOG.rst\">blacken-docs's changelog</a>.</em></p>\n<blockquote>\n<h2>1.16.0 (2023-08-16)</h2>\n<ul>\n<li>\n<p>Allow Markdown fence options.</p>\n<p>Thanks to initial work from Matthew Anderson in <code>PR [#246](https://github.com/asottile/blacken-docs/issues/246) &lt;https://github.com/adamchainz/blacken-docs/pull/246&gt;</code>__.</p>\n</li>\n<li>\n<p>Expand Markdown detection to all Python language names from Pygments: <code>py</code>, <code>sage</code>, <code>python3</code>, <code>py3</code>, and <code>numpy</code>.</p>\n</li>\n<li>\n<p>Preserve leading whitespace lines in reStructuredText code blocks.</p>\n<p>Thanks to Julianus Pfeuffer for the report in <code>Issue [#217](https://github.com/asottile/blacken-docs/issues/217) &lt;https://github.com/adamchainz/blacken-docs/issues/217&gt;</code>__.</p>\n</li>\n<li>\n<p>Use exit code 2 to indicate errors from Black, whilst exit code 1 remains for \u201cfiles have been formatted\u201d.</p>\n<p>Thanks to Julianus Pfeuffer for the report in <code>Issue [#218](https://github.com/asottile/blacken-docs/issues/218) &lt;https://github.com/adamchainz/blacken-docs/issues/218&gt;</code>__.</p>\n</li>\n<li>\n<p>Support passing the <code>--preview</code> option through to Black, to select the future style.</p>\n</li>\n<li>\n<p>Remove <code>language_version</code> from <code>.pre-commit-hooks.yaml</code>.\nThis change allows <code>default_language_version</code> in ``.pre-commit-config.yaml` to take precedence.</p>\n<p>Thanks to Aneesh Agrawal in <code>PR [#258](https://github.com/asottile/blacken-docs/issues/258) &lt;https://github.com/adamchainz/blacken-docs/pull/258&gt;</code>__.</p>\n</li>\n</ul>\n</blockquote>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/960ead214cd1184149d366c6d27ca6c369ce46b6\"><code>960ead2</code></a> Version 1.16.0</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/8f0ed18ce69d35e7e631d2b01983ecf8248667a0\"><code>8f0ed18</code></a> Support passing --preview through to Black (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/273\">#273</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/4eb4e4cdbff31cde3d9ffdd7693d5b7dce4dc506\"><code>4eb4e4c</code></a> Tweak changelog note</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/6c7450cfa90581b482d71b451b2d007361aa47c1\"><code>6c7450c</code></a> Use exit code 2 to indicate errors (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/272\">#272</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/99dfc8d0b402b9b7b0f0e723fc1d030063249eac\"><code>99dfc8d</code></a> Preserve leading whitespace lines in rST (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/271\">#271</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/94465e83e7253b4caef1e00fcb30b74ced33f08e\"><code>94465e8</code></a> Reformat markdown tests with dedent() (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/270\">#270</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/7cd5f30f0f9e014bda566a1893df3b9c7f9a2c48\"><code>7cd5f30</code></a> Use .md in glob example</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/f97e56994178e079ab807cebe54c2044f7b2ae55\"><code>f97e569</code></a> Document applying to many files (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/269\">#269</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/ae612b095b5005eee8c3ab9fe65a248d7654582d\"><code>ae612b0</code></a> Expand Markdown detection to all Python language names (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/268\">#268</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/da9b4557afc9b820c40b8d6bdb8f515c6cdec0f5\"><code>da9b455</code></a> Replace NamedTuple with plain class (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/267\">#267</a>)</li>\n<li>Additional commits viewable in <a href=\"https://github.com/asottile/blacken-docs/compare/1.15.0...1.16.0\">compare view</a></li>\n</ul>\n</details>\n<br />\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<details>\n<summary>Dependabot commands and options</summary>\n<br />\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 show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n</details>\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2160.org.readthedocs.build/en/2160/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2160/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1866815458, "node_id": "PR_kwDOBm6k_c5YyF-C", "number": 2159, "title": "Implement Dark Mode colour scheme", "user": {"value": 3315059, "label": "jamietanna"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2023-08-25T10:46:23Z", "updated_at": "2023-08-25T10:46:35Z", "closed_at": null, "author_association": "FIRST_TIME_CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2159", "body": "Closes #2095.\n\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2159.org.readthedocs.build/en/2159/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2159/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 1, "state_reason": null}
{"id": 1865983069, "node_id": "PR_kwDOBm6k_c5YvQSi", "number": 2158, "title": "add brand option to metadata.json.", "user": {"value": 52261150, "label": "publicmatt"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2023-08-24T22:37:41Z", "updated_at": "2023-08-24T22:37:57Z", "closed_at": null, "author_association": "FIRST_TIME_CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2158", "body": "This adds a brand link to the top navbar if 'brand' key is populated in metadata.json. The link will be either '#' or use the contents of 'brand_url' in metadata.json for href.\r\n\r\nI was able to get this done on my own site by replacing `templates/_crumbs.html` with a custom version, but I thought it would be nice to incorporate this in the tool directly.\r\n\r\n![image](https://github.com/simonw/datasette/assets/52261150/fdfe9bb5-fee4-466c-8074-6132071d94e6)\r\n\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2158.org.readthedocs.build/en/2158/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2158/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1865869205, "node_id": "I_kwDOBm6k_c5vNueV", "number": 2157, "title": "Proposal: Make the `_internal` database persistent, customizable, and hidden", "user": {"value": 15178711, "label": "asg017"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 3, "created_at": "2023-08-24T20:54:29Z", "updated_at": "2023-08-31T02:45:56Z", "closed_at": null, "author_association": "CONTRIBUTOR", "pull_request": null, "body": "The current `_internal` database is used by Datasette core to cache info about databases/tables/columns/foreign keys of databases in a Datasette instance. It's a temporary database created at startup, that can only be seen by the root user. See an [example `_internal` DB here](https://latest.datasette.io/_internal), after [logging in as root](https://latest.datasette.io/login-as-root).\r\n\r\nThe current `_internal` database has a few rough edges:\r\n\r\n- It's part of `datasette.databases`, so many plugins have to specifically exclude `_internal` from their queries [examples here](https://github.com/search?q=datasette+hookimpl+%22_internal%22+language%3APython+-path%3Adatasette%2F&ref=opensearch&type=code)\r\n- It's only used by Datasette core and can't be used by plugins or 3rd parties\r\n- It's created from scratch at startup and stored in memory. Why is fine, the performance is great, but persistent storage would be nice.\r\n\r\nAdditionally, it would be really nice if plugins could use this `_internal` database to store their own configuration, secrets, and settings. For example:\r\n\r\n- `datasette-auth-tokens` [creates a `_datasette_auth_tokens` table](https://github.com/simonw/datasette-auth-tokens/blob/main/datasette_auth_tokens/__init__.py#L15) to store auth token metadata. This could be moved into the `_internal` database to avoid writing to the gues database\r\n- `datasette-socrata` [creates a `socrata_imports`](https://github.com/simonw/datasette-socrata/blob/1409aa9b4d2fc3aff286b52e73af33b5786d56d0/datasette_socrata/__init__.py#L190-L198) table, which also can be in `_internal`\r\n- `datasette-upload-csvs` [creates a `_csv_progress_`](https://github.com/simonw/datasette-upload-csvs/blob/main/datasette_upload_csvs/__init__.py#L154) table, which can be in `_internal`\r\n- `datasette-write-ui` wants to have the ability for users to toggle whether a table appears editable, which can be either in `datasette.yaml` or on-the-fly by storing config in `_internal`\r\n\r\n\r\nIn general, these are specific features that Datasette plugins would have access to if there was a central internal database they could read/write to:\r\n\r\n- **Dynamic configuration**. Changing the `datasette.yaml` file works, but can be tedious to restart the server every time. Plugins can define their own configuration table in `_internal`, and could read/write to it to store configuration based on user actions (cell menu click, API access, etc.)\r\n- **Caching**. If a plugin or Datasette Core needs to cache some expensive computation, they can store it inside `_internal` (possibly as a temporary table) instead of managing their own caching solution.\r\n- **Audit logs**. If a plugin performs some sensitive operations, they can log usage info to `_internal` for others to audit later. \r\n- **Long running process status**. Many plugins (`datasette-upload-csvs`, `datasette-litestream`, `datasette-socrata`) perform tasks that run for a really long time, and want to give continue status updates to the user. They can store this info inside` _internal`\r\n- **Safer authentication**. Passwords and authentication plugins usually store credentials/hashed secrets in configuration files or environment variables, which can be difficult to handle. Now, they can store them in `_internal` \r\n\r\n## Proposal\r\n\r\n- We remove `_internal` from [`datasette.databases`](https://docs.datasette.io/en/latest/internals.html#databases) property.\r\n- We add new `datasette.get_internal_db()` method that returns the `_internal` database, for plugins to use\r\n- We add a new `--internal internal.db` flag. If provided, then the `_internal` DB will be sourced from that file, and further updates will be persisted to that file (instead of an in-memory database)\r\n- When creating internal.db, create a new `_datasette_internal` table to mark it a an \"datasette internal database\"\r\n- In `datasette serve`, we check for the existence of the `_datasette_internal` table. If it exists, we assume the user provided that file in error and raise an error. This is to limit the chance that someone accidentally publishes their internal database to the internet. We could optionally add a `--unsafe-allow-internal` flag (or database plugin) that allows someone to do this if they really want to.\r\n\r\n\r\n## New features unlocked with this\r\n\r\nThese features don't really need a standardized `_internal` table per-say (plugins could currently configure their own long-time storage features if they really wanted to), but it would make it much simpler to create these kinds of features with a persistent application database.\r\n\r\n- **`datasette-comments`** : A plugin for commenting on rows or specific values in a database. Comment contents + threads + email notification info can be stored in `_internal`\r\n- **Bookmarks**: \"Bookmarking\" an SQL query could be stored in `_internal`, or a URL link shortener\r\n- **Webhooks**: If a plugin wants to either consume a webhook or create a new one, they can store hashed credentials/API endpoints in `_internal`", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2157/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1865649347, "node_id": "I_kwDOBm6k_c5vM4zD", "number": 2156, "title": "datasette -s/--setting option for setting nested configuration options", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 4, "created_at": "2023-08-24T18:09:27Z", "updated_at": "2023-08-28T19:33:05Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "> I've been thinking about what it might look like to allow command-line arguments to be used to define _any_ of the configuration options in `datasette.yml`, as alternative and more convenient syntax.\r\n>\r\n> Here's what I've come up with:\r\n> ```\r\n> datasette \\\r\n>   -s settings.sql_time_limit_ms 1000 \\\r\n>   -s plugins.datasette-auth-tokens.manage_tokens true \\\r\n>   -s plugins.datasette-auth-tokens.manage_tokens_database tokens \\\r\n>  mydatabase.db tokens.db\r\n> ```\r\n> Which would be equivalent to `datasette.yml` containing this:\r\n> ```yaml\r\n> plugins:\r\n>   datasette-auth-tokens:\r\n>     manage_tokens: true\r\n>     manage_tokens_database: tokens\r\n> settings:\r\n>   sql_time_limit_ms: 1000\r\n> ```\r\nMore details in https://github.com/simonw/datasette/issues/2143#issuecomment-1690792514\r\n            ", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2156/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1865572575, "node_id": "PR_kwDOBm6k_c5Yt2eO", "number": 2155, "title": "Fix hupper.start_reloader entry point", "user": {"value": 79087, "label": "cadeef"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 2, "created_at": "2023-08-24T17:14:08Z", "updated_at": "2023-09-27T18:44:02Z", "closed_at": null, "author_association": "FIRST_TIME_CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2155", "body": "Update hupper's entry point so that click commands are processed properly.\r\n\r\nFixes #2123\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2155.org.readthedocs.build/en/2155/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2155/reactions\", \"total_count\": 2, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 2, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1865281760, "node_id": "PR_kwDOBm6k_c5Ys3C5", "number": 2154, "title": "Cascade for restricted token view-table/view-database/view-instance operations", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 8, "created_at": "2023-08-24T14:24:23Z", "updated_at": "2023-08-29T16:32:35Z", "closed_at": "2023-08-29T16:32:34Z", "author_association": "OWNER", "pull_request": "simonw/datasette/pulls/2154", "body": "Refs:\r\n- #2102\r\n\r\nAlso includes a prototype implementation of `--actor option` which I'm using for testing this, from:\r\n- #2153\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2154.org.readthedocs.build/en/2154/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2154/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1865232341, "node_id": "I_kwDOBm6k_c5vLS_V", "number": 2153, "title": "Datasette --get --actor option", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 5, "created_at": "2023-08-24T14:00:03Z", "updated_at": "2023-08-28T20:19:15Z", "closed_at": "2023-08-28T20:15:53Z", "author_association": "OWNER", "pull_request": null, "body": "I experimented with a prototype of this here:\r\n- https://github.com/simonw/datasette/issues/2102#issuecomment-1691037971_\r\n\r\nWhich lets me run requests as if they belonged to a specific actor like this:\r\n\r\n```bash\r\ndatasette fixtures.db --get '/fixtures/facetable.json' --actor '{\r\n    \"_r\": {\r\n        \"r\": {\r\n            \"fixtures\": {\r\n                \"facetable\": [\r\n                    \"vt\"\r\n                ]\r\n            }\r\n        }\r\n    },\r\n    \"a\": \"user\"\r\n}'\r\n```\r\n\r\nReally useful for testing actors an `_r` options. Is this worth adding as a feature?", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2153/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1865174661, "node_id": "PR_kwDOBm6k_c5YsfZ7", "number": 2152, "title": "Bump the python-packages group with 3 updates", "user": {"value": 49699333, "label": "dependabot[bot]"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 3, "created_at": "2023-08-24T13:34:44Z", "updated_at": "2023-08-28T13:49:39Z", "closed_at": "2023-08-28T13:49:37Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2152", "body": "Bumps the python-packages group with 3 updates: [sphinx](https://github.com/sphinx-doc/sphinx), [furo](https://github.com/pradyunsg/furo) and [blacken-docs](https://github.com/asottile/blacken-docs).\n\nUpdates `sphinx` from 7.1.2 to 7.2.3\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/releases\">sphinx's releases</a>.</em></p>\n<blockquote>\n<h2>Sphinx 7.2.3</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>Sphinx 7.2.2</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>Sphinx 7.2.1</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>Sphinx 7.2.0</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n</blockquote>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/blob/master/CHANGES\">sphinx's changelog</a>.</em></p>\n<blockquote>\n<h1>Release 7.2.3 (released Aug 23, 2023)</h1>\n<h2>Dependencies</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11576\">#11576</a>: Require sphinxcontrib-serializinghtml 1.1.9.</li>\n</ul>\n<h2>Bugs fixed</h2>\n<ul>\n<li>Fix regression in <code>autodoc.Documenter.parse_name()</code>.</li>\n<li>Fix regression in JSON serialisation.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11543\">#11543</a>: autodoc: Support positional-only parameters in <code>classmethod</code> methods\nwhen <code>autodoc_preserve_defaults</code> is <code>True</code>.</li>\n<li>Restore support string methods on path objects.\nThis is deprecated and will be removed in Sphinx 8.\nUse :py:func<code>os.fspath</code> to convert :py:class:<del><code>pathlib.Path</code> objects to strings,\nor :py:class:</del><code>pathlib.Path</code>'s methods to work with path objects.</li>\n</ul>\n<h1>Release 7.2.2 (released Aug 17, 2023)</h1>\n<h2>Bugs fixed</h2>\n<ul>\n<li>Fix the signature of the <code>StateMachine.insert_input()</code> patch,\nfor when calling with keyword arguments.</li>\n<li>Fixed membership testing (<code>in</code>) for the :py:class:<code>str</code> interface\nof the asset classes (<code>_CascadingStyleSheet</code> and <code>_JavaScript</code>),\nwhich several extensions relied upon.</li>\n<li>Fixed a type error in <code>SingleFileHTMLBuilder._get_local_toctree</code>,\n<code>includehidden</code> may be passed as a string or a boolean.</li>\n<li>Fix <code>:noindex:</code> for <code>PyModule</code> and JSModule``.</li>\n</ul>\n<h1>Release 7.2.1 (released Aug 17, 2023)</h1>\n<h2>Bugs fixed</h2>\n<ul>\n<li>Restored the the :py:class:<code>str</code> interface of the asset classes\n(<code>_CascadingStyleSheet</code> and <code>_JavaScript</code>), which several extensions relied upon.\nThis will be removed in Sphinx 9.</li>\n<li>Restored calls to <code>Builder.add_{css,js}_file()</code>,\nwhich several extensions relied upon.</li>\n<li>Restored the private API <code>TocTree.get_toctree_ancestors()</code>,\nwhich several extensions relied upon.</li>\n</ul>\n<p>Release 7.2.0 (released Aug 17, 2023)</p>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/2f6ea1422b08f9494f34b80c2ff6c96b5f396fdc\"><code>2f6ea14</code></a> Bump to 7.2.3 final</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/511e4070aa429a41eac04e88d96806c8fd0a5cc7\"><code>511e407</code></a> Implement <code>bool()</code> for string paths</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/494de7327f23e1b8a09f4e327f6d4cdf4e351013\"><code>494de73</code></a> Implement <code>hash()</code> for string paths</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/2986aa113c61c23346e4097f1055172a363e66cc\"><code>2986aa1</code></a> Override special methods for string paths</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/07b87e9512e88597894db31178c434cf3e3b0c28\"><code>07b87e9</code></a> Update CHANGES for 7.2.3</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/6b17dd1b282def42aa868a4d04d56bea00f473ee\"><code>6b17dd1</code></a> Support string methods on path objects (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11619\">#11619</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/a73fb59a71f205b9bae90ac28f65dd5c1e48ed9b\"><code>a73fb59</code></a> Support positional-only parameters in classmethods (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11635\">#11635</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/02cb02ccfb3736e9bc95df9e7a774f4799cf5f9f\"><code>02cb02c</code></a> Fix invocation of <code>python -m sphinx build</code></li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/6183b6abee561fc71c88fc66416d31a8f8ca009f\"><code>6183b6a</code></a> Require sphinxcontrib-serializinghtml 1.1.9 or later</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/1e16f21019833d672e9af8ce8b65fe21a40246b2\"><code>1e16f21</code></a> Fix regression in <code>autodoc.Documenter.parse_name</code> (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11613\">#11613</a>)</li>\n<li>Additional commits viewable in <a href=\"https://github.com/sphinx-doc/sphinx/compare/v7.1.2...v7.2.3\">compare view</a></li>\n</ul>\n</details>\n<br />\n\nUpdates `furo` from 2023.7.26 to 2023.8.19\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/pradyunsg/furo/blob/main/docs/changelog.md\">furo's changelog</a>.</em></p>\n<blockquote>\n<h1>Changelog</h1>\n<!-- raw HTML omitted -->\n<h2>2023.08.19 -- Xenolithic Xanadu</h2>\n<ul>\n<li>Fix missing search context with Sphinx 7.2, for dirhtml builds.</li>\n<li>Drop support for Python 3.7.</li>\n<li>Present configuration errors in a better format -- thanks <a href=\"https://github.com/AA-Turner\"><code>@\u200bAA-Turner</code></a>!</li>\n<li>Bump <code>require_sphinx()</code> to Sphinx 6.0, in line with dependency changes in Unassuming Ultramarine.</li>\n</ul>\n<h2>2023.08.17 -- Wonderous White</h2>\n<ul>\n<li>Fix compatiblity with Sphinx 7.2.0 and 7.2.1.</li>\n</ul>\n<h2>2023.07.26 -- Vigilant Volt</h2>\n<ul>\n<li>Fix compatiblity with Sphinx 7.1.</li>\n<li>Improve how content overflow is handled.</li>\n<li>Improve how literal blocks containing inline code are handled.</li>\n</ul>\n<h2>2023.05.20 -- Unassuming Ultramarine</h2>\n<ul>\n<li>\u2728 Add support for Sphinx 7.</li>\n<li>Drop support for Sphinx 5.</li>\n<li>Improve the screen-reader label for sidebar collapse.</li>\n<li>Make it easier to create derived themes from Furo.</li>\n<li>Bump all JS dependencies (NodeJS and npm packages).</li>\n</ul>\n<h2>2023.03.27 -- Tasty Tangerine</h2>\n<ul>\n<li>Regenerate with newer version of sphinx-theme-builder, to fix RECORD hashes.</li>\n<li>Add missing class to Font Awesome examples</li>\n</ul>\n<h2>2023.03.23 -- Sassy Saffron</h2>\n<ul>\n<li>Update Python version classifiers.</li>\n<li>Increase the icon size in mobile header.</li>\n<li>Increase admonition title bg opacity.</li>\n<li>Change the default API background to transparent.</li>\n<li>Transition the API background change.</li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/0766bb2d6d0392bf90d4e4ac447ae721fa673ee9\"><code>0766bb2</code></a> Prepare release: 2023.08.19</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/807d73cb1080a1c9b8321a1dcffd84aee73e859a\"><code>807d73c</code></a> Update changelog</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/364b2611f27e463cd1f879bf348975c01294ffc0\"><code>364b261</code></a> Accomodate for the required <code>data-content_root</code> for search</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/0d38bc6cffc528ce3cf742fe2bd20e83c46d7891\"><code>0d38bc6</code></a> Simplify retrieval of <code>pygments_dark_style</code> value (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/699\">#699</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/3631ffc4ea2f241b89bbd9b6c9d76e52a4226c56\"><code>3631ffc</code></a> Use <code>sphinx.errors.ConfigError</code> (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/697\">#697</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/d2e2448852752ec570313bc1daea3bda56069816\"><code>d2e2448</code></a> Remove duplicate HTML builder check (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/698\">#698</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/7b4f1308832e99d8e49c80f24665e938673c1644\"><code>7b4f130</code></a> Drop Python 3.7 (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/701\">#701</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/e322b71b10c959cce0af80d3ac6934725ce728bb\"><code>e322b71</code></a> Remove pointless assert (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/702\">#702</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/ee2097a797e92f1155a17287d063b3181f137115\"><code>ee2097a</code></a> Bump <code>require_sphinx()</code> to Sphinx 6.0 (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/700\">#700</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/c1ff10b768aaa2a2e479bbf8d58187e12a2731ac\"><code>c1ff10b</code></a> Back to development</li>\n<li>Additional commits viewable in <a href=\"https://github.com/pradyunsg/furo/compare/2023.07.26...2023.08.19\">compare view</a></li>\n</ul>\n</details>\n<br />\n\nUpdates `blacken-docs` from 1.15.0 to 1.16.0\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/adamchainz/blacken-docs/blob/main/CHANGELOG.rst\">blacken-docs's changelog</a>.</em></p>\n<blockquote>\n<h2>1.16.0 (2023-08-16)</h2>\n<ul>\n<li>\n<p>Allow Markdown fence options.</p>\n<p>Thanks to initial work from Matthew Anderson in <code>PR [#246](https://github.com/asottile/blacken-docs/issues/246) &lt;https://github.com/adamchainz/blacken-docs/pull/246&gt;</code>__.</p>\n</li>\n<li>\n<p>Expand Markdown detection to all Python language names from Pygments: <code>py</code>, <code>sage</code>, <code>python3</code>, <code>py3</code>, and <code>numpy</code>.</p>\n</li>\n<li>\n<p>Preserve leading whitespace lines in reStructuredText code blocks.</p>\n<p>Thanks to Julianus Pfeuffer for the report in <code>Issue [#217](https://github.com/asottile/blacken-docs/issues/217) &lt;https://github.com/adamchainz/blacken-docs/issues/217&gt;</code>__.</p>\n</li>\n<li>\n<p>Use exit code 2 to indicate errors from Black, whilst exit code 1 remains for \u201cfiles have been formatted\u201d.</p>\n<p>Thanks to Julianus Pfeuffer for the report in <code>Issue [#218](https://github.com/asottile/blacken-docs/issues/218) &lt;https://github.com/adamchainz/blacken-docs/issues/218&gt;</code>__.</p>\n</li>\n<li>\n<p>Support passing the <code>--preview</code> option through to Black, to select the future style.</p>\n</li>\n<li>\n<p>Remove <code>language_version</code> from <code>.pre-commit-hooks.yaml</code>.\nThis change allows <code>default_language_version</code> in ``.pre-commit-config.yaml` to take precedence.</p>\n<p>Thanks to Aneesh Agrawal in <code>PR [#258](https://github.com/asottile/blacken-docs/issues/258) &lt;https://github.com/adamchainz/blacken-docs/pull/258&gt;</code>__.</p>\n</li>\n</ul>\n</blockquote>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/960ead214cd1184149d366c6d27ca6c369ce46b6\"><code>960ead2</code></a> Version 1.16.0</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/8f0ed18ce69d35e7e631d2b01983ecf8248667a0\"><code>8f0ed18</code></a> Support passing --preview through to Black (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/273\">#273</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/4eb4e4cdbff31cde3d9ffdd7693d5b7dce4dc506\"><code>4eb4e4c</code></a> Tweak changelog note</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/6c7450cfa90581b482d71b451b2d007361aa47c1\"><code>6c7450c</code></a> Use exit code 2 to indicate errors (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/272\">#272</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/99dfc8d0b402b9b7b0f0e723fc1d030063249eac\"><code>99dfc8d</code></a> Preserve leading whitespace lines in rST (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/271\">#271</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/94465e83e7253b4caef1e00fcb30b74ced33f08e\"><code>94465e8</code></a> Reformat markdown tests with dedent() (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/270\">#270</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/7cd5f30f0f9e014bda566a1893df3b9c7f9a2c48\"><code>7cd5f30</code></a> Use .md in glob example</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/f97e56994178e079ab807cebe54c2044f7b2ae55\"><code>f97e569</code></a> Document applying to many files (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/269\">#269</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/ae612b095b5005eee8c3ab9fe65a248d7654582d\"><code>ae612b0</code></a> Expand Markdown detection to all Python language names (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/268\">#268</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/da9b4557afc9b820c40b8d6bdb8f515c6cdec0f5\"><code>da9b455</code></a> Replace NamedTuple with plain class (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/267\">#267</a>)</li>\n<li>Additional commits viewable in <a href=\"https://github.com/asottile/blacken-docs/compare/1.15.0...1.16.0\">compare view</a></li>\n</ul>\n</details>\n<br />\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<details>\n<summary>Dependabot commands and options</summary>\n<br />\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 show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n</details>\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2152.org.readthedocs.build/en/2152/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2152/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1864112887, "node_id": "PR_kwDOBm6k_c5Yo7bk", "number": 2151, "title": "Test Datasette on multiple SQLite versions", "user": {"value": 15178711, "label": "asg017"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2023-08-23T22:42:51Z", "updated_at": "2023-08-23T22:58:13Z", "closed_at": null, "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2151", "body": "still testing, hope it works!\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2151.org.readthedocs.build/en/2151/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2151/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 1, "state_reason": null}
{"id": 1863810783, "node_id": "I_kwDOBm6k_c5vF37f", "number": 2150, "title": "form label { width: 15% } is a bad default", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 4, "created_at": "2023-08-23T18:22:27Z", "updated_at": "2023-08-23T18:37:18Z", "closed_at": "2023-08-23T18:35:48Z", "author_association": "OWNER", "pull_request": null, "body": "See:\r\n- https://github.com/simonw/datasette-configure-fts/issues/14\r\n- https://github.com/simonw/datasette-auth-tokens/issues/12", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2150/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1861812208, "node_id": "PR_kwDOBm6k_c5YhH-W", "number": 2149, "title": "Start a new `datasette.yaml` configuration file, with settings support", "user": {"value": 15178711, "label": "asg017"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 2, "created_at": "2023-08-22T16:24:16Z", "updated_at": "2023-08-23T01:26:11Z", "closed_at": "2023-08-23T01:26:11Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2149", "body": "refs #2093 #2143 \r\n\r\nThis is the first step to implementing the new `datasette.yaml`/`datasette.json` configuration file. \r\n\r\n- The old `--config` argument is now back, and is the path to a `datasette.yaml` file. Acts like the `--metadata` flag.\r\n- The old `settings.json` behavior has been removed.\r\n- The `\"settings\"` key inside `datasette.yaml` defines the same `--settings` flags\r\n- Values passed in `--settings` will over-write values in `datasette.yaml`\r\n\r\nDocs for the Config file is pretty light, not much to add until we add more config to the file.\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2149.org.readthedocs.build/en/2149/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2149/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1859415334, "node_id": "PR_kwDOBm6k_c5YY5Ea", "number": 2148, "title": "Bump sphinx, furo, blacken-docs dependencies", "user": {"value": 49699333, "label": "dependabot[bot]"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 9, "created_at": "2023-08-21T13:48:11Z", "updated_at": "2023-08-29T00:15:31Z", "closed_at": "2023-08-29T00:15:27Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2148", "body": "Bumps the python-packages group with 3 updates: [sphinx](https://github.com/sphinx-doc/sphinx), [furo](https://github.com/pradyunsg/furo) and [blacken-docs](https://github.com/asottile/blacken-docs).\n\nUpdates `sphinx` from 7.1.2 to 7.2.2\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/releases\">sphinx's releases</a>.</em></p>\n<blockquote>\n<h2>Sphinx 7.2.2</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>Sphinx 7.2.1</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>Sphinx 7.2.0</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n</blockquote>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/blob/master/CHANGES\">sphinx's changelog</a>.</em></p>\n<blockquote>\n<h1>Release 7.2.2 (released Aug 17, 2023)</h1>\n<h2>Bugs fixed</h2>\n<ul>\n<li>Fix the signature of the <code>StateMachine.insert_input()</code> patch,\nfor when calling with keyword arguments.</li>\n<li>Fixed membership testing (<code>in</code>) for the :py:class:<code>str</code> interface\nof the asset classes (<code>_CascadingStyleSheet</code> and <code>_JavaScript</code>),\nwhich several extensions relied upon.</li>\n<li>Fixed a type error in <code>SingleFileHTMLBuilder._get_local_toctree</code>,\n<code>includehidden</code> may be passed as a string or a boolean.</li>\n<li>Fix <code>:noindex:</code> for <code>PyModule</code> and JSModule``.</li>\n</ul>\n<h1>Release 7.2.1 (released Aug 17, 2023)</h1>\n<h2>Bugs fixed</h2>\n<ul>\n<li>Restored the the :py:class:<code>str</code> interface of the asset classes\n(<code>_CascadingStyleSheet</code> and <code>_JavaScript</code>), which several extensions relied upon.\nThis will be removed in Sphinx 9.</li>\n<li>Restored calls to <code>Builder.add_{css,js}_file()</code>,\nwhich several extensions relied upon.</li>\n<li>Restored the private API <code>TocTree.get_toctree_ancestors()</code>,\nwhich several extensions relied upon.</li>\n</ul>\n<h1>Release 7.2.0 (released Aug 17, 2023)</h1>\n<h2>Dependencies</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11511\">#11511</a>: Drop Python 3.8 support.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11576\">#11576</a>: Require Pygments 2.14 or later.</li>\n</ul>\n<h2>Deprecated</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11512\">#11512</a>: Deprecate <code>sphinx.util.md5</code> and <code>sphinx.util.sha1</code>.\nUse <code>hashlib</code> instead.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11526\">#11526</a>: Deprecate <code>sphinx.testing.path</code>.\nUse <code>os.path</code> or <code>pathlib</code> instead.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11528\">#11528</a>: Deprecate <code>sphinx.util.split_index_msg</code> and <code>sphinx.util.split_into</code>.\nUse <code>sphinx.util.index_entries.split_index_msg</code> instead.</li>\n<li>Deprecate <code>sphinx.builders.html.Stylesheet</code>\nand <code>sphinx.builders.html.Javascript</code>.\nUse <code>sphinx.application.Sphinx.add_css_file()</code></li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/ed84d63e6f2c4fd43b97fc43ee8be4156a13af9e\"><code>ed84d63</code></a> Bump to 7.2.2 final</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/ea4a73e148022244bba027b86a8c2bf7067e97be\"><code>ea4a73e</code></a> [bot]: Update message catalogues (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11612\">#11612</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/e47846a812f09ae2ca9e0444ed227934c2eb9c6e\"><code>e47846a</code></a> Fix <code>:noindex:</code> for <code>PyModule</code> and JSModule``</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/b2fc47fe3dd0adba46edbb21ef03102ecb997f89\"><code>b2fc47f</code></a> Add CHANGES entry for renaming the <code>StateMachine.insert_input()</code> parameter</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/0835c3e8ea6b23fb12b29d9c5104e06595f400b6\"><code>0835c3e</code></a> Fix regression in <code>SingleFileHTMLBuilder._get_local_toctree</code></li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/49dc0dd3999f66f27728b974394585422f10d947\"><code>49dc0dd</code></a> Fix asset class string interface membership testing</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/8512855776ddd4790547d7e46ad98fd3ee48c2fb\"><code>8512855</code></a> Fix signature of docutils include_source monkeypatch (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11610\">#11610</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/e1d9068c60b43cf8dcb8dbd62ba26900eb63ff3b\"><code>e1d9068</code></a> Bump version</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/441a9e4d622e5f00f9fed8f59b9cac251cff9f80\"><code>441a9e4</code></a> Bump to 7.2.1 final</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/ec3185373044c120298501dbe91444bdb6ccb04c\"><code>ec31853</code></a> Restore <code>TocTree.get_toctree_ancestors()</code></li>\n<li>Additional commits viewable in <a href=\"https://github.com/sphinx-doc/sphinx/compare/v7.1.2...v7.2.2\">compare view</a></li>\n</ul>\n</details>\n<br />\n\nUpdates `furo` from 2023.7.26 to 2023.8.19\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/pradyunsg/furo/blob/main/docs/changelog.md\">furo's changelog</a>.</em></p>\n<blockquote>\n<h1>Changelog</h1>\n<!-- raw HTML omitted -->\n<h2>2023.08.19 -- Xenolithic Xanadu</h2>\n<ul>\n<li>Fix missing search context with Sphinx 7.2, for dirhtml builds.</li>\n<li>Drop support for Python 3.7.</li>\n<li>Present configuration errors in a better format -- thanks <a href=\"https://github.com/AA-Turner\"><code>@\u200bAA-Turner</code></a>!</li>\n<li>Bump <code>require_sphinx()</code> to Sphinx 6.0, in line with dependency changes in Unassuming Ultramarine.</li>\n</ul>\n<h2>2023.08.17 -- Wonderous White</h2>\n<ul>\n<li>Fix compatiblity with Sphinx 7.2.0 and 7.2.1.</li>\n</ul>\n<h2>2023.07.26 -- Vigilant Volt</h2>\n<ul>\n<li>Fix compatiblity with Sphinx 7.1.</li>\n<li>Improve how content overflow is handled.</li>\n<li>Improve how literal blocks containing inline code are handled.</li>\n</ul>\n<h2>2023.05.20 -- Unassuming Ultramarine</h2>\n<ul>\n<li>\u2728 Add support for Sphinx 7.</li>\n<li>Drop support for Sphinx 5.</li>\n<li>Improve the screen-reader label for sidebar collapse.</li>\n<li>Make it easier to create derived themes from Furo.</li>\n<li>Bump all JS dependencies (NodeJS and npm packages).</li>\n</ul>\n<h2>2023.03.27 -- Tasty Tangerine</h2>\n<ul>\n<li>Regenerate with newer version of sphinx-theme-builder, to fix RECORD hashes.</li>\n<li>Add missing class to Font Awesome examples</li>\n</ul>\n<h2>2023.03.23 -- Sassy Saffron</h2>\n<ul>\n<li>Update Python version classifiers.</li>\n<li>Increase the icon size in mobile header.</li>\n<li>Increase admonition title bg opacity.</li>\n<li>Change the default API background to transparent.</li>\n<li>Transition the API background change.</li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/0766bb2d6d0392bf90d4e4ac447ae721fa673ee9\"><code>0766bb2</code></a> Prepare release: 2023.08.19</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/807d73cb1080a1c9b8321a1dcffd84aee73e859a\"><code>807d73c</code></a> Update changelog</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/364b2611f27e463cd1f879bf348975c01294ffc0\"><code>364b261</code></a> Accomodate for the required <code>data-content_root</code> for search</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/0d38bc6cffc528ce3cf742fe2bd20e83c46d7891\"><code>0d38bc6</code></a> Simplify retrieval of <code>pygments_dark_style</code> value (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/699\">#699</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/3631ffc4ea2f241b89bbd9b6c9d76e52a4226c56\"><code>3631ffc</code></a> Use <code>sphinx.errors.ConfigError</code> (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/697\">#697</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/d2e2448852752ec570313bc1daea3bda56069816\"><code>d2e2448</code></a> Remove duplicate HTML builder check (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/698\">#698</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/7b4f1308832e99d8e49c80f24665e938673c1644\"><code>7b4f130</code></a> Drop Python 3.7 (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/701\">#701</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/e322b71b10c959cce0af80d3ac6934725ce728bb\"><code>e322b71</code></a> Remove pointless assert (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/702\">#702</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/ee2097a797e92f1155a17287d063b3181f137115\"><code>ee2097a</code></a> Bump <code>require_sphinx()</code> to Sphinx 6.0 (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/700\">#700</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/c1ff10b768aaa2a2e479bbf8d58187e12a2731ac\"><code>c1ff10b</code></a> Back to development</li>\n<li>Additional commits viewable in <a href=\"https://github.com/pradyunsg/furo/compare/2023.07.26...2023.08.19\">compare view</a></li>\n</ul>\n</details>\n<br />\n\nUpdates `blacken-docs` from 1.15.0 to 1.16.0\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/adamchainz/blacken-docs/blob/main/CHANGELOG.rst\">blacken-docs's changelog</a>.</em></p>\n<blockquote>\n<h2>1.16.0 (2023-08-16)</h2>\n<ul>\n<li>\n<p>Allow Markdown fence options.</p>\n<p>Thanks to initial work from Matthew Anderson in <code>PR [#246](https://github.com/asottile/blacken-docs/issues/246) &lt;https://github.com/adamchainz/blacken-docs/pull/246&gt;</code>__.</p>\n</li>\n<li>\n<p>Expand Markdown detection to all Python language names from Pygments: <code>py</code>, <code>sage</code>, <code>python3</code>, <code>py3</code>, and <code>numpy</code>.</p>\n</li>\n<li>\n<p>Preserve leading whitespace lines in reStructuredText code blocks.</p>\n<p>Thanks to Julianus Pfeuffer for the report in <code>Issue [#217](https://github.com/asottile/blacken-docs/issues/217) &lt;https://github.com/adamchainz/blacken-docs/issues/217&gt;</code>__.</p>\n</li>\n<li>\n<p>Use exit code 2 to indicate errors from Black, whilst exit code 1 remains for \u201cfiles have been formatted\u201d.</p>\n<p>Thanks to Julianus Pfeuffer for the report in <code>Issue [#218](https://github.com/asottile/blacken-docs/issues/218) &lt;https://github.com/adamchainz/blacken-docs/issues/218&gt;</code>__.</p>\n</li>\n<li>\n<p>Support passing the <code>--preview</code> option through to Black, to select the future style.</p>\n</li>\n<li>\n<p>Remove <code>language_version</code> from <code>.pre-commit-hooks.yaml</code>.\nThis change allows <code>default_language_version</code> in ``.pre-commit-config.yaml` to take precedence.</p>\n<p>Thanks to Aneesh Agrawal in <code>PR [#258](https://github.com/asottile/blacken-docs/issues/258) &lt;https://github.com/adamchainz/blacken-docs/pull/258&gt;</code>__.</p>\n</li>\n</ul>\n</blockquote>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/960ead214cd1184149d366c6d27ca6c369ce46b6\"><code>960ead2</code></a> Version 1.16.0</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/8f0ed18ce69d35e7e631d2b01983ecf8248667a0\"><code>8f0ed18</code></a> Support passing --preview through to Black (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/273\">#273</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/4eb4e4cdbff31cde3d9ffdd7693d5b7dce4dc506\"><code>4eb4e4c</code></a> Tweak changelog note</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/6c7450cfa90581b482d71b451b2d007361aa47c1\"><code>6c7450c</code></a> Use exit code 2 to indicate errors (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/272\">#272</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/99dfc8d0b402b9b7b0f0e723fc1d030063249eac\"><code>99dfc8d</code></a> Preserve leading whitespace lines in rST (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/271\">#271</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/94465e83e7253b4caef1e00fcb30b74ced33f08e\"><code>94465e8</code></a> Reformat markdown tests with dedent() (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/270\">#270</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/7cd5f30f0f9e014bda566a1893df3b9c7f9a2c48\"><code>7cd5f30</code></a> Use .md in glob example</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/f97e56994178e079ab807cebe54c2044f7b2ae55\"><code>f97e569</code></a> Document applying to many files (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/269\">#269</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/ae612b095b5005eee8c3ab9fe65a248d7654582d\"><code>ae612b0</code></a> Expand Markdown detection to all Python language names (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/268\">#268</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/da9b4557afc9b820c40b8d6bdb8f515c6cdec0f5\"><code>da9b455</code></a> Replace NamedTuple with plain class (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/267\">#267</a>)</li>\n<li>Additional commits viewable in <a href=\"https://github.com/asottile/blacken-docs/compare/1.15.0...1.16.0\">compare view</a></li>\n</ul>\n</details>\n<br />\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<details>\n<summary>Dependabot commands and options</summary>\n<br />\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 show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> dependency` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore <dependency name> dependency` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n</details>\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2148.org.readthedocs.build/en/2148/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2148/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1858228057, "node_id": "I_kwDOBm6k_c5uwk9Z", "number": 2147, "title": "Plugin hook for database queries that are run", "user": {"value": 18899, "label": "jackowayed"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 6, "created_at": "2023-08-20T18:43:50Z", "updated_at": "2023-08-24T03:54:35Z", "closed_at": null, "author_association": "NONE", "pull_request": null, "body": "I'm interested in making a plugin that saves every query that gets run to a table in the database. (I know about datasette-query-history but thought it would be good to have a server-side option.)\r\n\r\nAs far as I can tell reading the docs, there isn't really a hook setup to allow this.\r\n\r\nMaybe I could hack it with some of the hooks that are passed requests, but that doesn't seem good.\r\n\r\nI'm a little surprised this isn't possible, so I thought I would open an issue and see if that's a deeply considered decision or just \"haven't needed it yet.\" I'm potentially interested in implementing the hook if the latter.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2147/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1857234285, "node_id": "I_kwDOBm6k_c5usyVt", "number": 2145, "title": "If a row has a primary key of `null` various things break", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 23, "created_at": "2023-08-18T20:06:28Z", "updated_at": "2023-08-21T17:30:01Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "Stumbled across this while experimenting with `datasette-write-ui`. The error I got was a 500 on the `/db` page:\r\n\r\n> `'NoneType' object has no attribute 'encode'`\r\n\r\nTracked it down to this code, which assembles the URL for a row page:\r\n\r\nhttps://github.com/simonw/datasette/blob/943df09dcca93c3b9861b8c96277a01320db8662/datasette/utils/__init__.py#L120-L134\r\n\r\nThat's because `tilde_encode` can't handle `None`: https://github.com/simonw/datasette/blob/943df09dcca93c3b9861b8c96277a01320db8662/datasette/utils/__init__.py#L1175-L1178\r\n\r\n", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2145/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1856760386, "node_id": "PR_kwDOBm6k_c5YQGcc", "number": 2144, "title": "Bump the python-packages group with 3 updates", "user": {"value": 49699333, "label": "dependabot[bot]"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 2, "created_at": "2023-08-18T13:49:37Z", "updated_at": "2023-08-21T13:48:18Z", "closed_at": "2023-08-21T13:48:16Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2144", "body": "Bumps the python-packages group with 3 updates: [sphinx](https://github.com/sphinx-doc/sphinx), [furo](https://github.com/pradyunsg/furo) and [blacken-docs](https://github.com/asottile/blacken-docs).\n\nUpdates `sphinx` from 7.1.2 to 7.2.2\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/releases\">sphinx's releases</a>.</em></p>\n<blockquote>\n<h2>Sphinx 7.2.2</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>Sphinx 7.2.1</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>Sphinx 7.2.0</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n</blockquote>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/blob/master/CHANGES\">sphinx's changelog</a>.</em></p>\n<blockquote>\n<h1>Release 7.2.2 (released Aug 17, 2023)</h1>\n<h2>Bugs fixed</h2>\n<ul>\n<li>Fix the signature of the <code>StateMachine.insert_input()</code> patch,\nfor when calling with keyword arguments.</li>\n<li>Fixed membership testing (<code>in</code>) for the :py:class:<code>str</code> interface\nof the asset classes (<code>_CascadingStyleSheet</code> and <code>_JavaScript</code>),\nwhich several extensions relied upon.</li>\n<li>Fixed a type error in <code>SingleFileHTMLBuilder._get_local_toctree</code>,\n<code>includehidden</code> may be passed as a string or a boolean.</li>\n<li>Fix <code>:noindex:</code> for <code>PyModule</code> and JSModule``.</li>\n</ul>\n<h1>Release 7.2.1 (released Aug 17, 2023)</h1>\n<h2>Bugs fixed</h2>\n<ul>\n<li>Restored the the :py:class:<code>str</code> interface of the asset classes\n(<code>_CascadingStyleSheet</code> and <code>_JavaScript</code>), which several extensions relied upon.\nThis will be removed in Sphinx 9.</li>\n<li>Restored calls to <code>Builder.add_{css,js}_file()</code>,\nwhich several extensions relied upon.</li>\n<li>Restored the private API <code>TocTree.get_toctree_ancestors()</code>,\nwhich several extensions relied upon.</li>\n</ul>\n<h1>Release 7.2.0 (released Aug 17, 2023)</h1>\n<h2>Dependencies</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11511\">#11511</a>: Drop Python 3.8 support.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11576\">#11576</a>: Require Pygments 2.14 or later.</li>\n</ul>\n<h2>Deprecated</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11512\">#11512</a>: Deprecate <code>sphinx.util.md5</code> and <code>sphinx.util.sha1</code>.\nUse <code>hashlib</code> instead.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11526\">#11526</a>: Deprecate <code>sphinx.testing.path</code>.\nUse <code>os.path</code> or <code>pathlib</code> instead.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11528\">#11528</a>: Deprecate <code>sphinx.util.split_index_msg</code> and <code>sphinx.util.split_into</code>.\nUse <code>sphinx.util.index_entries.split_index_msg</code> instead.</li>\n<li>Deprecate <code>sphinx.builders.html.Stylesheet</code>\nand <code>sphinx.builders.html.Javascript</code>.\nUse <code>sphinx.application.Sphinx.add_css_file()</code></li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/ed84d63e6f2c4fd43b97fc43ee8be4156a13af9e\"><code>ed84d63</code></a> Bump to 7.2.2 final</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/ea4a73e148022244bba027b86a8c2bf7067e97be\"><code>ea4a73e</code></a> [bot]: Update message catalogues (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11612\">#11612</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/e47846a812f09ae2ca9e0444ed227934c2eb9c6e\"><code>e47846a</code></a> Fix <code>:noindex:</code> for <code>PyModule</code> and JSModule``</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/b2fc47fe3dd0adba46edbb21ef03102ecb997f89\"><code>b2fc47f</code></a> Add CHANGES entry for renaming the <code>StateMachine.insert_input()</code> parameter</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/0835c3e8ea6b23fb12b29d9c5104e06595f400b6\"><code>0835c3e</code></a> Fix regression in <code>SingleFileHTMLBuilder._get_local_toctree</code></li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/49dc0dd3999f66f27728b974394585422f10d947\"><code>49dc0dd</code></a> Fix asset class string interface membership testing</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/8512855776ddd4790547d7e46ad98fd3ee48c2fb\"><code>8512855</code></a> Fix signature of docutils include_source monkeypatch (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11610\">#11610</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/e1d9068c60b43cf8dcb8dbd62ba26900eb63ff3b\"><code>e1d9068</code></a> Bump version</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/441a9e4d622e5f00f9fed8f59b9cac251cff9f80\"><code>441a9e4</code></a> Bump to 7.2.1 final</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/ec3185373044c120298501dbe91444bdb6ccb04c\"><code>ec31853</code></a> Restore <code>TocTree.get_toctree_ancestors()</code></li>\n<li>Additional commits viewable in <a href=\"https://github.com/sphinx-doc/sphinx/compare/v7.1.2...v7.2.2\">compare view</a></li>\n</ul>\n</details>\n<br />\n\nUpdates `furo` from 2023.7.26 to 2023.8.17\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/pradyunsg/furo/blob/main/docs/changelog.md\">furo's changelog</a>.</em></p>\n<blockquote>\n<h1>Changelog</h1>\n<!-- raw HTML omitted -->\n<h2>2023.08.17 -- Wonderous White</h2>\n<ul>\n<li>Fix compatiblity with Sphinx 7.2.0 and 7.2.1.</li>\n</ul>\n<h2>2023.07.26 -- Vigilant Volt</h2>\n<ul>\n<li>Fix compatiblity with Sphinx 7.1.</li>\n<li>Improve how content overflow is handled.</li>\n<li>Improve how literal blocks containing inline code are handled.</li>\n</ul>\n<h2>2023.05.20 -- Unassuming Ultramarine</h2>\n<ul>\n<li>\u2728 Add support for Sphinx 7.</li>\n<li>Drop support for Sphinx 5.</li>\n<li>Improve the screen-reader label for sidebar collapse.</li>\n<li>Make it easier to create derived themes from Furo.</li>\n<li>Bump all JS dependencies (NodeJS and npm packages).</li>\n</ul>\n<h2>2023.03.27 -- Tasty Tangerine</h2>\n<ul>\n<li>Regenerate with newer version of sphinx-theme-builder, to fix RECORD hashes.</li>\n<li>Add missing class to Font Awesome examples</li>\n</ul>\n<h2>2023.03.23 -- Sassy Saffron</h2>\n<ul>\n<li>Update Python version classifiers.</li>\n<li>Increase the icon size in mobile header.</li>\n<li>Increase admonition title bg opacity.</li>\n<li>Change the default API background to transparent.</li>\n<li>Transition the API background change.</li>\n<li>Remove the &quot;indent&quot; of API entries which have a background.</li>\n<li>Break long inline code literals.</li>\n</ul>\n<h2>2022.12.07 -- Reverent Raspberry</h2>\n<ul>\n<li>\u2728 Add support for Sphinx 6.</li>\n<li>\u2728 Improve footnote presentation with docutils 0.18+.</li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/99f4e6df480ac3d043c09d472acd69390f47e402\"><code>99f4e6d</code></a> Prepare release: 2023.08.17</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/59ad807bc6f8c8b36bf5a0bad2609e7781d8aaf9\"><code>59ad807</code></a> Update changelog</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/9b94420776972613c3990a31467855ceceefcff7\"><code>9b94420</code></a> Accomodate for Sphinx 7.2 behavior change</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/7aeb6d204f808ae0b0da8a5dee6f6035d9cd04cf\"><code>7aeb6d2</code></a> [pre-commit.ci] pre-commit autoupdate (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/675\">#675</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/0c9be3f65d6ae84ff56d7679b7d650323b355be3\"><code>0c9be3f</code></a> Back to development</li>\n<li>See full diff in <a href=\"https://github.com/pradyunsg/furo/compare/2023.07.26...2023.08.17\">compare view</a></li>\n</ul>\n</details>\n<br />\n\nUpdates `blacken-docs` from 1.15.0 to 1.16.0\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/adamchainz/blacken-docs/blob/main/CHANGELOG.rst\">blacken-docs's changelog</a>.</em></p>\n<blockquote>\n<h2>1.16.0 (2023-08-16)</h2>\n<ul>\n<li>\n<p>Allow Markdown fence options.</p>\n<p>Thanks to initial work from Matthew Anderson in <code>PR [#246](https://github.com/asottile/blacken-docs/issues/246) &lt;https://github.com/adamchainz/blacken-docs/pull/246&gt;</code>__.</p>\n</li>\n<li>\n<p>Expand Markdown detection to all Python language names from Pygments: <code>py</code>, <code>sage</code>, <code>python3</code>, <code>py3</code>, and <code>numpy</code>.</p>\n</li>\n<li>\n<p>Preserve leading whitespace lines in reStructuredText code blocks.</p>\n<p>Thanks to Julianus Pfeuffer for the report in <code>Issue [#217](https://github.com/asottile/blacken-docs/issues/217) &lt;https://github.com/adamchainz/blacken-docs/issues/217&gt;</code>__.</p>\n</li>\n<li>\n<p>Use exit code 2 to indicate errors from Black, whilst exit code 1 remains for \u201cfiles have been formatted\u201d.</p>\n<p>Thanks to Julianus Pfeuffer for the report in <code>Issue [#218](https://github.com/asottile/blacken-docs/issues/218) &lt;https://github.com/adamchainz/blacken-docs/issues/218&gt;</code>__.</p>\n</li>\n<li>\n<p>Support passing the <code>--preview</code> option through to Black, to select the future style.</p>\n</li>\n<li>\n<p>Remove <code>language_version</code> from <code>.pre-commit-hooks.yaml</code>.\nThis change allows <code>default_language_version</code> in ``.pre-commit-config.yaml` to take precedence.</p>\n<p>Thanks to Aneesh Agrawal in <code>PR [#258](https://github.com/asottile/blacken-docs/issues/258) &lt;https://github.com/adamchainz/blacken-docs/pull/258&gt;</code>__.</p>\n</li>\n</ul>\n</blockquote>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/960ead214cd1184149d366c6d27ca6c369ce46b6\"><code>960ead2</code></a> Version 1.16.0</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/8f0ed18ce69d35e7e631d2b01983ecf8248667a0\"><code>8f0ed18</code></a> Support passing --preview through to Black (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/273\">#273</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/4eb4e4cdbff31cde3d9ffdd7693d5b7dce4dc506\"><code>4eb4e4c</code></a> Tweak changelog note</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/6c7450cfa90581b482d71b451b2d007361aa47c1\"><code>6c7450c</code></a> Use exit code 2 to indicate errors (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/272\">#272</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/99dfc8d0b402b9b7b0f0e723fc1d030063249eac\"><code>99dfc8d</code></a> Preserve leading whitespace lines in rST (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/271\">#271</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/94465e83e7253b4caef1e00fcb30b74ced33f08e\"><code>94465e8</code></a> Reformat markdown tests with dedent() (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/270\">#270</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/7cd5f30f0f9e014bda566a1893df3b9c7f9a2c48\"><code>7cd5f30</code></a> Use .md in glob example</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/f97e56994178e079ab807cebe54c2044f7b2ae55\"><code>f97e569</code></a> Document applying to many files (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/269\">#269</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/ae612b095b5005eee8c3ab9fe65a248d7654582d\"><code>ae612b0</code></a> Expand Markdown detection to all Python language names (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/268\">#268</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/da9b4557afc9b820c40b8d6bdb8f515c6cdec0f5\"><code>da9b455</code></a> Replace NamedTuple with plain class (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/267\">#267</a>)</li>\n<li>Additional commits viewable in <a href=\"https://github.com/asottile/blacken-docs/compare/1.15.0...1.16.0\">compare view</a></li>\n</ul>\n</details>\n<br />\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<details>\n<summary>Dependabot commands and options</summary>\n<br />\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 show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> dependency` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore <dependency name> dependency` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n</details>\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2144.org.readthedocs.build/en/2144/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2144/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1855885427, "node_id": "I_kwDOBm6k_c5unpBz", "number": 2143, "title": "De-tangling Metadata before Datasette 1.0", "user": {"value": 15178711, "label": "asg017"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 24, "created_at": "2023-08-18T00:51:50Z", "updated_at": "2023-08-24T18:28:27Z", "closed_at": null, "author_association": "CONTRIBUTOR", "pull_request": null, "body": "Metadata in Datasette is a really powerful feature, but is a bit difficult to work with. It was initially a way to add \"metadata\" about your \"data\" in Datasette instances, like descriptions for databases/tables/columns, titles, source URLs, licenses, etc. But it later became the go-to spot for other Datasette features that have nothing to do with metadata, like permissions/plugins/canned queries. \r\n\r\nSpecifically, I've found the following problems when working with Datasette metadata:\r\n\r\n1. Metadata cannot be updated without re-starting the entire Datasette instance.\r\n2. The `metadata.json`/`metadata.yaml` has become a kitchen sink of unrelated (imo) features like plugin config, authentication config, canned queries\r\n3. The Python APIs for defining extra metadata are a bit awkward (the `datasette.metadata()` class, `get_metadata()` hook, etc.)\r\n\r\n## Possible solutions\r\n\r\nHere's a few ideas of Datasette core changes we can make to address these problems. \r\n\r\n### Re-vamp the Datasette Python metadata APIs\r\n\r\nThe Datasette object has a single `datasette.metadata()` method that's a bit difficult to work with. There's also no Python API for inserted new metadata, so plugins have to rely on the `get_metadata()` hook.\r\n\r\nThe `get_metadata()` hook can also be improved - it doesn't work with async functions yet, so you're quite limited to what you can do.\r\n\r\n(I'm a bit fuzzy on what to actually do here, but I imagine it'll be very small breaking changes to a few Python methods)\r\n\r\n### Add an optional `datasette_metadata` table\r\n\r\nDatasette should detect and use metadata stored in a new special table called `datasette_metadata`. This would be a regular table that a user can edit on their own, and would serve as a \"live updating\" source of metadata, than can be changed while the Datasette instance is running.\r\n\r\nNot too sure what the schema would look like, but I'd imagine:\r\n\r\n```sql\r\nCREATE TABLE datasette_metadata(\r\n  level text,\r\n  target any,\r\n  key text,\r\n  value any,\r\n  primary key (level, target)\r\n)\r\n```\r\n\r\nEvery row in this table would map to a single metadata \"entry\".\r\n\r\n- `level` would be one of \"datasette\", \"database\", \"table\", \"column\", which is the \"level\" the entry describes. For example, `level=\"table\"` means it is metadata about a specific table, `level=\"database\"` for a specific database, or `level=\"datasette\"` for the entire Datasette instance.\r\n- `target` would \"point\" to the specific object the entry metadata is about, and would depend on what `level` is specific. \r\n  - `level=\"database\"`: `target` would be the string name of the database that the metadata entry is about. ex `\"fixtures\"`\r\n  - `level=\"table\"`: `target` would be a JSON array of two strings. The first element would be the database name, and the second would be the table name. ex `[\"fixtures\", \"students\"]`\r\n  - `level=\"column\"`: `target` would be a JSON array of 3 strings: The database name, table name, and column name. Ex `[\"fixtures\", \"students\", \"student_id\"`]\r\n- `key` would be the type of metadata entry the row has, similar to the current \"keys\" that exist in `metadata.json`. Ex `\"about_url\"`, `\"source\"`, `\"description\"`, etc\r\n- `value` would be the text value of be metadata entry. The literal text value of a description, about_url, column_label, etc\r\n\r\nA quick sample:\r\n\r\nlevel | target | key | value\r\n-- | -- | -- | --\r\ndatasette | NULL | title | my datasette title...\r\ndb | fixtures | source | <description of my database source>\r\ntable | [\"fixtures\", \"students\"] | label_column | student_name\r\ncolumn | [\"fixtures\", \"students\", \"birthdate\"] | description | <description of the fixtures.students.birthdate column>\r\n\r\nThis `datasette_metadata` would be configured with other tools, and hopefully not manually by end users. Datasette Core could also offer a UI for editing entries in `datasette_metadata`, to update descriptions/columns on the fly.\r\n\r\n### Re-vamp `metadata.json` and move non-metadata config to another place\r\n\r\nThe motivation behind this is that it's awkward that `metadata.json` contains config about things that are not strictly metadata, including:\r\n\r\n- Plugin configuration\r\n- [Authentication/permissions](https://docs.datasette.io/en/latest/authentication.html#access-permissions-in-metadata) (ex the `allow` key on datasettes/databases/tables\r\n- Canned queries. might be controversial, but in my mind, canned queries are application-specific code and configuration, and don't describe the data that exists in SQLite databases. \r\n\r\nI think we should move these outside of `metadata.json` and into a different file. The `datasette.json` idea in  #2093 may be a good solution here: plugin/permissions/canned queries can be defined in `datasette.json`, while `metadata.json`/`datasette_metadata` will strictly be about documenting databases/tables/columns. \r\n", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2143/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1854970601, "node_id": "PR_kwDOBm6k_c5YKAZ4", "number": 2142, "title": "Bump the python-packages group with 2 updates", "user": {"value": 49699333, "label": "dependabot[bot]"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 2, "created_at": "2023-08-17T13:07:53Z", "updated_at": "2023-08-18T13:49:29Z", "closed_at": "2023-08-18T13:49:26Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2142", "body": "Bumps the python-packages group with 2 updates: [sphinx](https://github.com/sphinx-doc/sphinx) and [blacken-docs](https://github.com/asottile/blacken-docs).\n\nUpdates `sphinx` from 7.1.2 to 7.2.0\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/releases\">sphinx's releases</a>.</em></p>\n<blockquote>\n<h2>Sphinx 7.2.0</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n</blockquote>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/blob/master/CHANGES\">sphinx's changelog</a>.</em></p>\n<blockquote>\n<h1>Release 7.2.0 (released Aug 17, 2023)</h1>\n<h2>Dependencies</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11511\">#11511</a>: Drop Python 3.8 support.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11576\">#11576</a>: Require Pygments 2.14 or later.</li>\n</ul>\n<h2>Deprecated</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11512\">#11512</a>: Deprecate <code>sphinx.util.md5</code> and <code>sphinx.util.sha1</code>.\nUse <code>hashlib</code> instead.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11526\">#11526</a>: Deprecate <code>sphinx.testing.path</code>.\nUse <code>os.path</code> or <code>pathlib</code> instead.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11528\">#11528</a>: Deprecate <code>sphinx.util.split_index_msg</code> and <code>sphinx.util.split_into</code>.\nUse <code>sphinx.util.index_entries.split_index_msg</code> instead.</li>\n<li>Deprecate <code>sphinx.builders.html.Stylesheet</code>\nand <code>sphinx.builders.html.Javascript</code>.\nUse <code>sphinx.application.Sphinx.add_css_file()</code>\nand <code>sphinx.application.Sphinx.add_js_file()</code> instead.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11582\">#11582</a>: Deprecate <code>sphinx.builders.html.StandaloneHTMLBuilder.css_files</code> and\n<code>sphinx.builders.html.StandaloneHTMLBuilder.script_files</code>.\nUse <code>sphinx.application.Sphinx.add_css_file()</code>\nand <code>sphinx.application.Sphinx.add_js_file()</code> instead.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11459\">#11459</a>: Deprecate <code>sphinx.ext.autodoc.preserve_defaults.get_function_def()</code>.\nPatch by B\u00e9n\u00e9dikt Tran.</li>\n</ul>\n<h2>Features added</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11526\">#11526</a>: Support <code>os.PathLike</code> types and <code>pathlib.Path</code> objects\nin many more places.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/5474\">#5474</a>: coverage: Print summary statistics tables.\nPatch by Jorge Leitao.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/6319\">#6319</a>: viewcode: Add :confval:<code>viewcode_line_numbers</code> to control\nwhether line numbers are added to rendered source code.\nPatch by Ben Krikler.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/9662\">#9662</a>: Add the <code>:no-typesetting:</code> option to suppress textual output\nand only create a linkable anchor.\nPatch by Latosha Maltba.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11221\">#11221</a>: C++: Support domain objects in the table of contents.\nPatch by Rouslan Korneychuk.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/10938\">#10938</a>: doctest: Add :confval:<code>doctest_show_successes</code> option.\nPatch by Trey Hunner.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11533\">#11533</a>: Add <code>:no-index:</code>, <code>:no-index-entry:</code>, and <code>:no-contents-entry:</code>.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11572\">#11572</a>: Improve <code>debug</code> logging of reasons why files are detected as out of\ndate.\nPatch by Eric Larson.</li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/da9f8a5c33ad5eeef05dd780f2988f3ff7351ef3\"><code>da9f8a5</code></a> Bump to 7.2.0 final</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/794324ac000095aa6409a4958b44a17dc25d3b49\"><code>794324a</code></a> Declare support for Python 3.13</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/03bceac43ff1e69a33fe973612504738182cf217\"><code>03bceac</code></a> [bot]: Update message catalogues (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11538\">#11538</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/aecebcea9a3f6cbd3f379bc34f99d2ffb0f87220\"><code>aecebce</code></a> Make <code>_resolve_toctree()</code> keyword-only</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/76658c49a931745da45fa4d5c8d482b7c6facd4f\"><code>76658c4</code></a> Fix <code>sphinx.ext.autodoc.preserve_defaults</code> (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11550\">#11550</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/4dee1629901f5e5c2aefc274da42483e16770e50\"><code>4dee162</code></a> Fix layout issues in the agogo theme for smaller viewports (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11594\">#11594</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/4ddbee4a7cdf14a7d064ffaea6cbb0c4fdb63f23\"><code>4ddbee4</code></a> Fix <code>console_scripts</code> entry points</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/4add50a5f0c3ff7954edcec3d33dd1c0fa40a1a6\"><code>4add50a</code></a> Remove unneeded type annotation</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/9d8ef833dbf9d7bb04771e622d6ceea738ac9d18\"><code>9d8ef83</code></a> Fix <code>test_inspect_main_noargs</code></li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/ddf8a8e7d4756170d5ee6dff7fc88ecd12912e59\"><code>ddf8a8e</code></a> Add CHANGES entry for <a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11533\">GH-11533</a></li>\n<li>Additional commits viewable in <a href=\"https://github.com/sphinx-doc/sphinx/compare/v7.1.2...v7.2.0\">compare view</a></li>\n</ul>\n</details>\n<br />\n\nUpdates `blacken-docs` from 1.15.0 to 1.16.0\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/adamchainz/blacken-docs/blob/main/CHANGELOG.rst\">blacken-docs's changelog</a>.</em></p>\n<blockquote>\n<h2>1.16.0 (2023-08-16)</h2>\n<ul>\n<li>\n<p>Allow Markdown fence options.</p>\n<p>Thanks to initial work from Matthew Anderson in <code>PR [#246](https://github.com/asottile/blacken-docs/issues/246) &lt;https://github.com/adamchainz/blacken-docs/pull/246&gt;</code>__.</p>\n</li>\n<li>\n<p>Expand Markdown detection to all Python language names from Pygments: <code>py</code>, <code>sage</code>, <code>python3</code>, <code>py3</code>, and <code>numpy</code>.</p>\n</li>\n<li>\n<p>Preserve leading whitespace lines in reStructuredText code blocks.</p>\n<p>Thanks to Julianus Pfeuffer for the report in <code>Issue [#217](https://github.com/asottile/blacken-docs/issues/217) &lt;https://github.com/adamchainz/blacken-docs/issues/217&gt;</code>__.</p>\n</li>\n<li>\n<p>Use exit code 2 to indicate errors from Black, whilst exit code 1 remains for \u201cfiles have been formatted\u201d.</p>\n<p>Thanks to Julianus Pfeuffer for the report in <code>Issue [#218](https://github.com/asottile/blacken-docs/issues/218) &lt;https://github.com/adamchainz/blacken-docs/issues/218&gt;</code>__.</p>\n</li>\n<li>\n<p>Support passing the <code>--preview</code> option through to Black, to select the future style.</p>\n</li>\n<li>\n<p>Remove <code>language_version</code> from <code>.pre-commit-hooks.yaml</code>.\nThis change allows <code>default_language_version</code> in ``.pre-commit-config.yaml` to take precedence.</p>\n<p>Thanks to Aneesh Agrawal in <code>PR [#258](https://github.com/asottile/blacken-docs/issues/258) &lt;https://github.com/adamchainz/blacken-docs/pull/258&gt;</code>__.</p>\n</li>\n</ul>\n</blockquote>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/960ead214cd1184149d366c6d27ca6c369ce46b6\"><code>960ead2</code></a> Version 1.16.0</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/8f0ed18ce69d35e7e631d2b01983ecf8248667a0\"><code>8f0ed18</code></a> Support passing --preview through to Black (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/273\">#273</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/4eb4e4cdbff31cde3d9ffdd7693d5b7dce4dc506\"><code>4eb4e4c</code></a> Tweak changelog note</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/6c7450cfa90581b482d71b451b2d007361aa47c1\"><code>6c7450c</code></a> Use exit code 2 to indicate errors (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/272\">#272</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/99dfc8d0b402b9b7b0f0e723fc1d030063249eac\"><code>99dfc8d</code></a> Preserve leading whitespace lines in rST (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/271\">#271</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/94465e83e7253b4caef1e00fcb30b74ced33f08e\"><code>94465e8</code></a> Reformat markdown tests with dedent() (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/270\">#270</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/7cd5f30f0f9e014bda566a1893df3b9c7f9a2c48\"><code>7cd5f30</code></a> Use .md in glob example</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/f97e56994178e079ab807cebe54c2044f7b2ae55\"><code>f97e569</code></a> Document applying to many files (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/269\">#269</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/ae612b095b5005eee8c3ab9fe65a248d7654582d\"><code>ae612b0</code></a> Expand Markdown detection to all Python language names (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/268\">#268</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/da9b4557afc9b820c40b8d6bdb8f515c6cdec0f5\"><code>da9b455</code></a> Replace NamedTuple with plain class (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/267\">#267</a>)</li>\n<li>Additional commits viewable in <a href=\"https://github.com/asottile/blacken-docs/compare/1.15.0...1.16.0\">compare view</a></li>\n</ul>\n</details>\n<br />\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<details>\n<summary>Dependabot commands and options</summary>\n<br />\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 show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> dependency` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore <dependency name> dependency` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n</details>\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2142.org.readthedocs.build/en/2142/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2142/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1853289039, "node_id": "PR_kwDOBm6k_c5YEUBK", "number": 2141, "title": "Bump the python-packages group with 1 update", "user": {"value": 49699333, "label": "dependabot[bot]"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 2, "created_at": "2023-08-16T13:47:35Z", "updated_at": "2023-08-17T13:07:48Z", "closed_at": "2023-08-17T13:07:45Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2141", "body": "Bumps the python-packages group with 1 update: [blacken-docs](https://github.com/asottile/blacken-docs).\n\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/adamchainz/blacken-docs/blob/main/CHANGELOG.rst\">blacken-docs's changelog</a>.</em></p>\n<blockquote>\n<h2>1.16.0 (2023-08-16)</h2>\n<ul>\n<li>\n<p>Allow Markdown fence options.</p>\n<p>Thanks to initial work from Matthew Anderson in <code>PR [#246](https://github.com/asottile/blacken-docs/issues/246) &lt;https://github.com/adamchainz/blacken-docs/pull/246&gt;</code>__.</p>\n</li>\n<li>\n<p>Expand Markdown detection to all Python language names from Pygments: <code>py</code>, <code>sage</code>, <code>python3</code>, <code>py3</code>, and <code>numpy</code>.</p>\n</li>\n<li>\n<p>Preserve leading whitespace lines in reStructuredText code blocks.</p>\n<p>Thanks to Julianus Pfeuffer for the report in <code>Issue [#217](https://github.com/asottile/blacken-docs/issues/217) &lt;https://github.com/adamchainz/blacken-docs/issues/217&gt;</code>__.</p>\n</li>\n<li>\n<p>Use exit code 2 to indicate errors from Black, whilst exit code 1 remains for \u201cfiles have been formatted\u201d.</p>\n<p>Thanks to Julianus Pfeuffer for the report in <code>Issue [#218](https://github.com/asottile/blacken-docs/issues/218) &lt;https://github.com/adamchainz/blacken-docs/issues/218&gt;</code>__.</p>\n</li>\n<li>\n<p>Support passing the <code>--preview</code> option through to Black, to select the future style.</p>\n</li>\n<li>\n<p>Remove <code>language_version</code> from <code>.pre-commit-hooks.yaml</code>.\nThis change allows <code>default_language_version</code> in ``.pre-commit-config.yaml` to take precedence.</p>\n<p>Thanks to Aneesh Agrawal in <code>PR [#258](https://github.com/asottile/blacken-docs/issues/258) &lt;https://github.com/adamchainz/blacken-docs/pull/258&gt;</code>__.</p>\n</li>\n</ul>\n</blockquote>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/960ead214cd1184149d366c6d27ca6c369ce46b6\"><code>960ead2</code></a> Version 1.16.0</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/8f0ed18ce69d35e7e631d2b01983ecf8248667a0\"><code>8f0ed18</code></a> Support passing --preview through to Black (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/273\">#273</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/4eb4e4cdbff31cde3d9ffdd7693d5b7dce4dc506\"><code>4eb4e4c</code></a> Tweak changelog note</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/6c7450cfa90581b482d71b451b2d007361aa47c1\"><code>6c7450c</code></a> Use exit code 2 to indicate errors (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/272\">#272</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/99dfc8d0b402b9b7b0f0e723fc1d030063249eac\"><code>99dfc8d</code></a> Preserve leading whitespace lines in rST (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/271\">#271</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/94465e83e7253b4caef1e00fcb30b74ced33f08e\"><code>94465e8</code></a> Reformat markdown tests with dedent() (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/270\">#270</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/7cd5f30f0f9e014bda566a1893df3b9c7f9a2c48\"><code>7cd5f30</code></a> Use .md in glob example</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/f97e56994178e079ab807cebe54c2044f7b2ae55\"><code>f97e569</code></a> Document applying to many files (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/269\">#269</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/ae612b095b5005eee8c3ab9fe65a248d7654582d\"><code>ae612b0</code></a> Expand Markdown detection to all Python language names (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/268\">#268</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/da9b4557afc9b820c40b8d6bdb8f515c6cdec0f5\"><code>da9b455</code></a> Replace NamedTuple with plain class (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/267\">#267</a>)</li>\n<li>Additional commits viewable in <a href=\"https://github.com/asottile/blacken-docs/compare/1.15.0...1.16.0\">compare view</a></li>\n</ul>\n</details>\n<br />\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=blacken-docs&package-manager=pip&previous-version=1.15.0&new-version=1.16.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<details>\n<summary>Dependabot commands and options</summary>\n<br />\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 show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself)\n- `@dependabot ignore <dependency name> dependency` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself)\n- `@dependabot unignore <dependency name> dependency` will remove all of the ignore conditions of the specified dependency\n- `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions\n\n\n</details>\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2141.org.readthedocs.build/en/2141/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2141/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1847201263, "node_id": "I_kwDOBm6k_c5uGg3v", "number": 2140, "title": "Remove all remaining documentation instances of '$ '", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2023-08-11T17:42:13Z", "updated_at": "2023-08-11T17:52:25Z", "closed_at": "2023-08-11T17:45:00Z", "author_association": "OWNER", "pull_request": null, "body": "For example this: https://github.com/simonw/datasette/blob/4535568f2ce907af646304d0ebce2500ebd55677/docs/authentication.rst?plain=1#L33-L35\r\n\r\nThe problem with that `$ ` prefix is that it prevents users from copying and pasting the raw command.\r\n\r\n<img width=\"773\" alt=\"image\" src=\"https://github.com/simonw/datasette/assets/9599/9414437d-1eb9-416b-ae51-0f4f5d665b80\">\r\n\r\nhttps://docs.datasette.io/en/stable/authentication.html#using-the-root-actor", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2140/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1846076261, "node_id": "I_kwDOBm6k_c5uCONl", "number": 2139, "title": "border-color: ##ff0000 bug - two hashes", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 8755003, "label": "Datasette 1.0a-next"}, "comments": 2, "created_at": "2023-08-11T01:22:58Z", "updated_at": "2023-08-11T05:16:24Z", "closed_at": "2023-08-11T05:16:24Z", "author_association": "OWNER", "pull_request": null, "body": "Spotted this on https://latest.datasette.io/extra_database\r\n\r\n```html\r\n<div class=\"page-header\" style=\"border-color: ##ff0000\">\r\n```", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2139/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1844213115, "node_id": "I_kwDOBm6k_c5t7HV7", "number": 2138, "title": "on_success_message_sql option for writable canned queries", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 8755003, "label": "Datasette 1.0a-next"}, "comments": 2, "created_at": "2023-08-10T00:20:14Z", "updated_at": "2023-08-10T00:39:40Z", "closed_at": "2023-08-10T00:34:26Z", "author_association": "OWNER", "pull_request": null, "body": "> Or... how about if the `on_success_message` option could define a SQL query to be executed to generate that message? Maybe `on_success_message_sql`.\r\n\r\n- https://github.com/simonw/datasette/issues/2134", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2138/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1843821954, "node_id": "I_kwDOBm6k_c5t5n2C", "number": 2137, "title": "Redesign row default JSON", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": {"value": 8755003, "label": "Datasette 1.0a-next"}, "comments": 1, "created_at": "2023-08-09T18:49:11Z", "updated_at": "2023-08-09T19:02:47Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "This URL here:\r\n\r\nhttps://latest.datasette.io/fixtures/simple_primary_key/1.json?_extras=foreign_key_tables\r\n\r\n```json\r\n{\r\n  \"database\": \"fixtures\",\r\n  \"table\": \"simple_primary_key\",\r\n  \"rows\": [\r\n    {\r\n      \"id\": \"1\",\r\n      \"content\": \"hello\"\r\n    }\r\n  ],\r\n  \"columns\": [\r\n    \"id\",\r\n    \"content\"\r\n  ],\r\n  \"primary_keys\": [\r\n    \"id\"\r\n  ],\r\n  \"primary_key_values\": [\r\n    \"1\"\r\n  ],\r\n  \"units\": {},\r\n  \"foreign_key_tables\": [\r\n    {\r\n      \"other_table\": \"foreign_key_references\",\r\n      \"column\": \"id\",\r\n      \"other_column\": \"foreign_key_with_blank_label\",\r\n      \"count\": 0,\r\n      \"link\": \"/fixtures/foreign_key_references?foreign_key_with_blank_label=1\"\r\n    },\r\n    {\r\n      \"other_table\": \"foreign_key_references\",\r\n      \"column\": \"id\",\r\n      \"other_column\": \"foreign_key_with_label\",\r\n      \"count\": 1,\r\n      \"link\": \"/fixtures/foreign_key_references?foreign_key_with_label=1\"\r\n    },\r\n    {\r\n      \"other_table\": \"complex_foreign_keys\",\r\n      \"column\": \"id\",\r\n      \"other_column\": \"f3\",\r\n      \"count\": 1,\r\n      \"link\": \"/fixtures/complex_foreign_keys?f3=1\"\r\n    },\r\n    {\r\n      \"other_table\": \"complex_foreign_keys\",\r\n      \"column\": \"id\",\r\n      \"other_column\": \"f2\",\r\n      \"count\": 0,\r\n      \"link\": \"/fixtures/complex_foreign_keys?f2=1\"\r\n    },\r\n    {\r\n      \"other_table\": \"complex_foreign_keys\",\r\n      \"column\": \"id\",\r\n      \"other_column\": \"f1\",\r\n      \"count\": 1,\r\n      \"link\": \"/fixtures/complex_foreign_keys?f1=1\"\r\n    }\r\n  ],\r\n  \"query_ms\": 4.226590999678592,\r\n  \"source\": \"tests/fixtures.py\",\r\n  \"source_url\": \"https://github.com/simonw/datasette/blob/main/tests/fixtures.py\",\r\n  \"license\": \"Apache License 2.0\",\r\n  \"license_url\": \"https://github.com/simonw/datasette/blob/main/LICENSE\",\r\n  \"ok\": true,\r\n  \"truncated\": false\r\n}\r\n```\r\n\r\nThat `?_extras=` should be `?_extra=` - plus the row JSON should be redesigned to fit the new default JSON representation.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2137/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1843710170, "node_id": "I_kwDOBm6k_c5t5Mja", "number": 2136, "title": "Query view shouldn't return `columns`", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 9700784, "label": "Datasette 1.0a3"}, "comments": 4, "created_at": "2023-08-09T17:23:57Z", "updated_at": "2023-08-09T19:03:04Z", "closed_at": "2023-08-09T19:03:04Z", "author_association": "OWNER", "pull_request": null, "body": "I just noticed that https://latest.datasette.io/fixtures/roadside_attraction_characteristics.json?_labels=on&_size=1 returns:\r\n```json\r\n{\r\n  \"ok\": true,\r\n  \"next\": \"1\",\r\n  \"rows\": [\r\n    {\r\n      \"rowid\": 1,\r\n      \"attraction_id\": {\r\n        \"value\": 1,\r\n        \"label\": \"The Mystery Spot\"\r\n      },\r\n      \"characteristic_id\": {\r\n        \"value\": 2,\r\n        \"label\": \"Paranormal\"\r\n      }\r\n    }\r\n  ],\r\n  \"truncated\": false\r\n}\r\n```\r\nBut https://latest.datasette.io/fixtures.json?sql=select+rowid%2C+attraction_id%2C+characteristic_id+from+roadside_attraction_characteristics+order+by+rowid+limit+1 returns:\r\n```json\r\n{\r\n  \"rows\": [\r\n    {\r\n      \"rowid\": 1,\r\n      \"attraction_id\": 1,\r\n      \"characteristic_id\": 2\r\n    }\r\n  ],\r\n  \"columns\": [\r\n    \"rowid\",\r\n    \"attraction_id\",\r\n    \"characteristic_id\"\r\n  ],\r\n  \"ok\": true,\r\n  \"truncated\": false\r\n}\r\n```\r\nThe `columns` key in the query response is inconsistent with the table response.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2136/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1843600087, "node_id": "I_kwDOBm6k_c5t4xrX", "number": 2135, "title": "Release notes for 1.0a3", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 9700784, "label": "Datasette 1.0a3"}, "comments": 3, "created_at": "2023-08-09T16:09:26Z", "updated_at": "2023-08-09T19:17:07Z", "closed_at": "2023-08-09T19:17:06Z", "author_association": "OWNER", "pull_request": null, "body": "118 commits! https://github.com/simonw/datasette/compare/1.0a2...26be9f0445b753fb84c802c356b0791a72269f25", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2135/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1843391585, "node_id": "I_kwDOBm6k_c5t3-xh", "number": 2134, "title": "Add writable canned query demo to latest.datasette.io", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 5, "created_at": "2023-08-09T14:31:30Z", "updated_at": "2023-08-10T01:22:46Z", "closed_at": "2023-08-10T01:05:56Z", "author_association": "OWNER", "pull_request": null, "body": "This would be useful while working on:\r\n- #2114", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2134/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1841501975, "node_id": "I_kwDOBm6k_c5twxcX", "number": 2133, "title": "[feature request]`datasette install plugins.json` options", "user": {"value": 54462, "label": "HaveF"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 9, "created_at": "2023-08-08T15:06:50Z", "updated_at": "2023-08-10T00:31:24Z", "closed_at": "2023-08-09T22:04:46Z", "author_association": "NONE", "pull_request": null, "body": "Hi, simon \u2764\ufe0f \r\n\r\n`datasette plugins  --all > plugins.json` could generate all plugins info. On another machine, it would be great to install all plugins just by `datasette install plugins.json`", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2133/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1841343173, "node_id": "I_kwDOBm6k_c5twKrF", "number": 2132, "title": "Get form fields on query page working again ", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 9700784, "label": "Datasette 1.0a3"}, "comments": 1, "created_at": "2023-08-08T13:39:05Z", "updated_at": "2023-08-08T13:45:10Z", "closed_at": "2023-08-08T13:45:09Z", "author_association": "OWNER", "pull_request": null, "body": "Caused by:\r\n- #2112\r\n\r\nhttps://latest.datasette.io/fixtures?sql=select+pk1%2C+pk2%2C+pk3%2C+content+from+compound_three_primary_keys+where+%22pk1%22+%3D+%3Ap0+order+by+pk1%2C+pk2%2C+pk3+limit+101&p0=b\r\n\r\n<img width=\"1100\" alt=\"image\" src=\"https://github.com/simonw/datasette/assets/9599/7ca20120-923b-4b7d-988d-cdb0e7c30afb\">\r\n\r\nThe `:p0` form field is missing. Submitting the form results in this error:\r\n\r\n<img width=\"687\" alt=\"image\" src=\"https://github.com/simonw/datasette/assets/9599/f900ee16-71fd-42aa-86d7-0058af8457aa\">\r\n", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2132/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1840417903, "node_id": "I_kwDOBm6k_c5tsoxv", "number": 2131, "title": "Refactor code that supports templates_considered comment", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": {"value": 3268330, "label": "Datasette 1.0"}, "comments": 1, "created_at": "2023-08-08T01:28:36Z", "updated_at": "2023-08-09T15:27:41Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "I ended up duplicating it here: https://github.com/simonw/datasette/blob/7532feb424b1dce614351e21b2265c04f9669fe2/datasette/views/database.py#L164-L167\r\n\r\nI think it should move to `datasette.render_template()` - and maybe have a renamed template variable too.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2131/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1840329615, "node_id": "I_kwDOBm6k_c5tsTOP", "number": 2130, "title": "Render plugin mechanism needs `error` and `truncated` fields", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 9700784, "label": "Datasette 1.0a3"}, "comments": 2, "created_at": "2023-08-07T23:19:19Z", "updated_at": "2023-08-08T01:51:54Z", "closed_at": "2023-08-08T01:47:42Z", "author_association": "OWNER", "pull_request": null, "body": "While working on:\r\n- https://github.com/simonw/datasette/pull/2118\r\n\r\nIt became clear that the `render` callback function documented here: https://docs.datasette.io/en/0.64.3/plugin_hooks.html#register-output-renderer-datasette\r\n\r\nNeeds to grow the ability to be told if an error occurred (an `error` string) and if the results were truncated (a `truncated` boolean).", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2130/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1840324765, "node_id": "I_kwDOBm6k_c5tsSCd", "number": 2129, "title": "CSV ?sql= should indicate errors", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": {"value": 3268330, "label": "Datasette 1.0"}, "comments": 1, "created_at": "2023-08-07T23:13:04Z", "updated_at": "2023-08-08T02:02:21Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "> https://latest.datasette.io/_memory.csv?sql=select+blah is a blank page right now:\r\n\r\n```bash\r\ncurl -I 'https://latest.datasette.io/_memory.csv?sql=select+blah'\r\n```\r\n```\r\nHTTP/2 200 \r\naccess-control-allow-origin: *\r\naccess-control-allow-headers: Authorization, Content-Type\r\naccess-control-expose-headers: Link\r\naccess-control-allow-methods: GET, POST, HEAD, OPTIONS\r\naccess-control-max-age: 3600\r\ncontent-type: text/plain; charset=utf-8\r\nx-databases: _memory, _internal, fixtures, fixtures2, extra_database, ephemeral\r\ndate: Mon, 07 Aug 2023 23:12:15 GMT\r\nserver: Google Frontend\r\n```\r\n\r\n_Originally posted by @simonw in https://github.com/simonw/datasette/issues/2118#issuecomment-1668688947_", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2129/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1839766197, "node_id": "PR_kwDOBm6k_c5XWhWF", "number": 2128, "title": "Bump blacken-docs, furo, blacken-docs", "user": {"value": 49699333, "label": "dependabot[bot]"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2023-08-07T15:50:40Z", "updated_at": "2023-08-07T16:19:25Z", "closed_at": "2023-08-07T16:19:24Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2128", "body": "Bumps the python-packages group with 3 updates: [sphinx](https://github.com/sphinx-doc/sphinx), [furo](https://github.com/pradyunsg/furo) and [blacken-docs](https://github.com/asottile/blacken-docs).\n\nUpdates `sphinx` from 6.1.3 to 7.1.2\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/releases\">sphinx's releases</a>.</em></p>\n<blockquote>\n<h2>Sphinx 7.1.2</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>Sphinx 7.1.1</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>Sphinx 7.1.0</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>v7.0.1</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>v7.0.0</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>v7.0.0rc1</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>v6.2.1</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>v6.2.0</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n</blockquote>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/blob/master/CHANGES\">sphinx's changelog</a>.</em></p>\n<blockquote>\n<h1>Release 7.1.2 (released Aug 02, 2023)</h1>\n<h2>Bugs fixed</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11542\">#11542</a>: linkcheck: Properly respect :confval:<code>linkcheck_anchors</code>\nand do not spuriously report failures to validate anchors.\nPatch by James Addison.</li>\n</ul>\n<h1>Release 7.1.1 (released Jul 27, 2023)</h1>\n<h2>Bugs fixed</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11514\">#11514</a>: Fix <code>SOURCE_DATE_EPOCH</code> in multi-line copyright footer.\nPatch by B\u00e9n\u00e9dikt Tran.</li>\n</ul>\n<h1>Release 7.1.0 (released Jul 24, 2023)</h1>\n<h2>Incompatible changes</h2>\n<ul>\n<li>\n<p>Releases are no longer signed, given the <code>change in PyPI policy</code>_.</p>\n<p>.. _change in PyPI policy: <a href=\"https://blog.pypi.org/posts/2023-05-23-removing-pgp/\">https://blog.pypi.org/posts/2023-05-23-removing-pgp/</a></p>\n</li>\n</ul>\n<h2>Deprecated</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11412\">#11412</a>: Emit warnings on using a deprecated Python-specific index entry type\n(namely, <code>module</code>, <code>keyword</code>, <code>operator</code>, <code>object</code>, <code>exception</code>,\n<code>statement</code>, and <code>builtin</code>) in the :rst:dir:<code>index</code> directive, and\nset the removal version to Sphinx 9. Patch by Adam Turner.</li>\n</ul>\n<h2>Features added</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11415\">#11415</a>: Add a checksum to JavaScript and CSS asset URIs included within\ngenerated HTML, using the CRC32 algorithm.</li>\n<li>:meth:<code>~sphinx.application.Sphinx.require_sphinx</code> now allows the version\nrequirement to be specified as <code>(major, minor)</code>.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11011\">#11011</a>: Allow configuring a line-length limit for object signatures, via\n:confval:<code>maximum_signature_line_length</code> and the domain-specific variants.\nIf the length of the signature (in characters) is greater than the configured\nlimit, each parameter in the signature will be split to its own logical line.\nThis behaviour may also be controlled by options on object description\ndirectives, for example :rst:dir:<code>py:function:single-line-parameter-list</code>.</li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/320d0b631cc7d9617f5167cc61c9284674f5b2df\"><code>320d0b6</code></a> Bump to 7.1.2 final</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/06c1339bb36378512d2e27bcff86b6bd5db0dc0a\"><code>06c1339</code></a> Ensure that <code>linkcheck_anchors</code> is properly respected (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11544\">#11544</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/89808c6f49e1738765d18309244dca0156ee28f6\"><code>89808c6</code></a> Emend attribution for <a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11431\">GH-11431</a> in CHANGES (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11547\">#11547</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/4958d2abf1abb1c3a10e77d8297a746cc90d5234\"><code>4958d2a</code></a> Fix flake8 E231 reported linting failure</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/4862da883f8c984e8f15a8643c61702f90947d6c\"><code>4862da8</code></a> Bump version</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/d8d73c16b8b86df8f1a32698229a2b818fea2e98\"><code>d8d73c1</code></a> Bump to 7.1.1 final</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/a54e630a21a6d9b7e80a22e969e3a86e35678d2d\"><code>a54e630</code></a> [internationalisation] Update message catalogues</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/8452300d54dce2da751941d9547dd54dc03e69bf\"><code>8452300</code></a> Fix multi-line copyright when <code>SOURCE_DATE_EPOCH</code> is set (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11524\">#11524</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/fe08cec019c52c15b7f7365013134e3f3d1b3739\"><code>fe08cec</code></a> bump version</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/e560f6334aa87af07304415e6aeaf42d03d1c525\"><code>e560f63</code></a> Bump to 7.1.0 final</li>\n<li>Additional commits viewable in <a href=\"https://github.com/sphinx-doc/sphinx/compare/v6.1.3...v7.1.2\">compare view</a></li>\n</ul>\n</details>\n<br />\n\nUpdates `furo` from 2023.3.27 to 2023.7.26\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/pradyunsg/furo/blob/main/docs/changelog.md\">furo's changelog</a>.</em></p>\n<blockquote>\n<h1>Changelog</h1>\n<!-- raw HTML omitted -->\n<h2>2023.07.26 -- Vigilant Volt</h2>\n<ul>\n<li>Fix compatiblity with Sphinx 7.1.</li>\n<li>Improve how content overflow is handled.</li>\n<li>Improve how literal blocks containing inline code are handled.</li>\n</ul>\n<h2>2023.05.20 -- Unassuming Ultramarine</h2>\n<ul>\n<li>\u2728 Add support for Sphinx 7.</li>\n<li>Drop support for Sphinx 5.</li>\n<li>Improve the screen-reader label for sidebar collapse.</li>\n<li>Make it easier to create derived themes from Furo.</li>\n<li>Bump all JS dependencies (NodeJS and npm packages).</li>\n</ul>\n<h2>2023.03.27 -- Tasty Tangerine</h2>\n<ul>\n<li>Regenerate with newer version of sphinx-theme-builder, to fix RECORD hashes.</li>\n<li>Add missing class to Font Awesome examples</li>\n</ul>\n<h2>2023.03.23 -- Sassy Saffron</h2>\n<ul>\n<li>Update Python version classifiers.</li>\n<li>Increase the icon size in mobile header.</li>\n<li>Increase admonition title bg opacity.</li>\n<li>Change the default API background to transparent.</li>\n<li>Transition the API background change.</li>\n<li>Remove the &quot;indent&quot; of API entries which have a background.</li>\n<li>Break long inline code literals.</li>\n</ul>\n<h2>2022.12.07 -- Reverent Raspberry</h2>\n<ul>\n<li>\u2728 Add support for Sphinx 6.</li>\n<li>\u2728 Improve footnote presentation with docutils 0.18+.</li>\n<li>Drop support for Sphinx 4.</li>\n<li>Improve documentation about what the edit button does.</li>\n<li>Improve handling of empty-flexboxes for better print experience on Chrome.</li>\n<li>Improve styling for inline signatures.</li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/35f5307acc66d63ddb2e50eebc79a389518e881a\"><code>35f5307</code></a> Prepare release: 2023.07.26</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/0a8bedc51399777be2d01f2401fd52a32d9f6673\"><code>0a8bedc</code></a> Update changelog</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/a92dd0c2bfa398825e239171925a81bdc428e90a\"><code>a92dd0c</code></a> Make <code>_add_asset_hashes</code> a no-op with Sphinx 7.1</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/f8db95bed5d1c57b4ea6bf536c65560fa9ae33a9\"><code>f8db95b</code></a> Improve literals with inline code are handled</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/1680dbefd61766a28e43880ae05a9f5cc0e7f19b\"><code>1680dbe</code></a> Document the use of <code>figclass</code> with <code>figure</code> directive</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/beebd7e676d1538891fef4ead30f79d866fe78c2\"><code>beebd7e</code></a> Increase the specificity of the admonition title selector</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/834e951f5567fc4b0aa3564d33c0f0011d459263\"><code>834e951</code></a> Setup uploads to Percy</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/27bf2c0e6f1b2c3ae9b0a7beed689c4df9bed1b2\"><code>27bf2c0</code></a> [pre-commit.ci] pre-commit autoupdate (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/672\">#672</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/c8b51d09af3dcaac3046f7e761119e9d1b7c9e37\"><code>c8b51d0</code></a> Fix how content overflow is handled</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/80afa27a9a7bd0ac9259636239e349656c4726ab\"><code>80afa27</code></a> [pre-commit.ci] pre-commit autoupdate (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/652\">#652</a>)</li>\n<li>Additional commits viewable in <a href=\"https://github.com/pradyunsg/furo/compare/2023.03.27...2023.07.26\">compare view</a></li>\n</ul>\n</details>\n<br />\n\nUpdates `blacken-docs` from 1.14.0 to 1.15.0\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/adamchainz/blacken-docs/blob/main/CHANGELOG.rst\">blacken-docs's changelog</a>.</em></p>\n<blockquote>\n<h2>1.15.0 (2023-07-09)</h2>\n<ul>\n<li>Drop Python 3.7 support.</li>\n</ul>\n</blockquote>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/2e74dc4c30c336176e76e0426c66f09a4e79df9c\"><code>2e74dc4</code></a> Version 1.15.0</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/8ddb2f1269b7652a9b668faa92c9d63d764696c0\"><code>8ddb2f1</code></a> [pre-commit.ci] pre-commit autoupdate (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/257\">#257</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/64fbca6cad36db1822528ece7f97a8152d29e05f\"><code>64fbca6</code></a> Drop Python 3.7 support (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/256\">#256</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/f6a0817dbb7957f96ea6cc251edf3a50bf1c3c08\"><code>f6a0817</code></a> [pre-commit.ci] pre-commit autoupdate (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/255\">#255</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/cbdcb50b125b4f2fdb470122b2ba5e3c15de241a\"><code>cbdcb50</code></a> [pre-commit.ci] pre-commit autoupdate (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/254\">#254</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/37fc70ee00c7063777ed7343c1bd26fceb5422a6\"><code>37fc70e</code></a> Upgrade requirements (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/253\">#253</a>)</li>\n<li><a href=\"https://github.com/adamchainz/blacken-docs/commit/7bbe434415ce9f590cb057010590a648e7bea072\"><code>7bbe434</code></a> [pre-commit.ci] pre-commit autoupdate (<a href=\"https://redirect.github.com/asottile/blacken-docs/issues/250\">#250</a>)</li>\n<li>See full diff in <a href=\"https://github.com/asottile/blacken-docs/compare/1.14.0...1.15.0\">compare view</a></li>\n</ul>\n</details>\n<br />\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<details>\n<summary>Dependabot commands and options</summary>\n<br />\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</details>\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2128.org.readthedocs.build/en/2128/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2128/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1838469176, "node_id": "I_kwDOBm6k_c5tlNA4", "number": 2127, "title": "Context base class to support documenting the context", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": {"value": 3268330, "label": "Datasette 1.0"}, "comments": 3, "created_at": "2023-08-07T00:01:02Z", "updated_at": "2023-08-10T01:30:25Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "This idea first came up here:\r\n- https://github.com/simonw/datasette/issues/2112#issuecomment-1652751140\r\n\r\nIf `datasette.render_template(...)` takes an optional `Context` subclass as an alternative to a context dictionary, I could then use dataclasses to define the context made available to specific templates - which then gives me something I can use to help document what they are.\r\n\r\nAlso refs:\r\n- https://github.com/simonw/datasette/issues/1510", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2127/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1838266862, "node_id": "I_kwDOBm6k_c5tkbnu", "number": 2126, "title": "Permissions in metadata.yml / metadata.json", "user": {"value": 36199671, "label": "ctsrc"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 3, "created_at": "2023-08-06T16:24:10Z", "updated_at": "2023-08-11T05:52:30Z", "closed_at": "2023-08-11T05:52:29Z", "author_association": "NONE", "pull_request": null, "body": "https://docs.datasette.io/en/latest/authentication.html#other-permissions-in-metadata says the following:\r\n\r\n> For all other permissions, you can use one or more \"permissions\" blocks in your metadata.\r\n\r\n> To grant access to the permissions debug tool to all signed in users you can grant permissions-debug to any actor with an id matching the wildcard * by adding this a the root of your metadata:\r\n\r\n```yaml\r\npermissions:\r\n  debug-menu:\r\n    id: '*'\r\n```\r\n\r\nI tried this.\r\n\r\nMy `metadata.yml` file looks like:\r\n\r\n```yaml\r\npermissions:\r\n  debug-menu:\r\n    id: '*'\r\n  permissions-debug:\r\n    id: '*'\r\nplugins:\r\n  datasette-auth-passwords:\r\n    myuser_password_hash:\r\n      $env: \"PASSWORD_HASH_MYUSER\"\r\n```\r\n\r\nAnd then I run\r\n\r\n```zsh\r\ndatasette -m metadata.yml tiddlywiki.db --root\r\n```\r\n\r\nAnd I open a session for the \"root\" user of datasette with the link given.\r\n\r\nI open a private browser session and log in as \"myuser\" from http://127.0.0.1:8001/-/login\r\n\r\nThen I check http://127.0.0.1:8001/-/actor which confirms that I am logged in as the \"myuser\" actor\r\n\r\n```json\r\n{\r\n    \"actor\": {\r\n        \"id\": \"myuser\"\r\n    }\r\n}\r\n```\r\n\r\nIn the session where I am logged in as \"myuser\" I then try to go to http://127.0.0.1:8001/-/permissions\r\n\r\nBut all I get there as the logged in user \"myuser\" is\r\n\r\n> Forbidden\r\n>\r\n> Permission denied\r\n\r\nAnd then if I check the http://127.0.0.1:8001/-/permissions as the datasette \"root\" user from another browser session, I see:\r\n\r\n> permissions-debug checked at 2023-08-06T16:22:58.997841 \u2717 (used default)\r\n>\r\n> Actor: {\"id\": \"myuser\"}\r\n\r\nIt seems that in spite of having tried to give the `permissions-debug` permission to the \"myuser\" user in my `metadata.yml` file, datasette does not agree that \"myuser\" has permission `permissions-debug`..\r\n\r\nWhat do I need to do differently so that my \"myuser\" user is able to access http://127.0.0.1:8001/-/permissions ?", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2126/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1833193570, "node_id": "PR_kwDOBm6k_c5XArm3", "number": 2125, "title": "Bump sphinx from 6.1.3 to 7.1.2", "user": {"value": 49699333, "label": "dependabot[bot]"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 2, "created_at": "2023-08-02T13:28:39Z", "updated_at": "2023-08-07T16:20:30Z", "closed_at": "2023-08-07T16:20:27Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2125", "body": "Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 6.1.3 to 7.1.2.\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/releases\">sphinx's releases</a>.</em></p>\n<blockquote>\n<h2>Sphinx 7.1.2</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>Sphinx 7.1.1</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>Sphinx 7.1.0</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>v7.0.1</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>v7.0.0</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>v7.0.0rc1</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>v6.2.1</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>v6.2.0</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n</blockquote>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/blob/master/CHANGES\">sphinx's changelog</a>.</em></p>\n<blockquote>\n<h1>Release 7.1.2 (released Aug 02, 2023)</h1>\n<h2>Bugs fixed</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11542\">#11542</a>: linkcheck: Properly respect :confval:<code>linkcheck_anchors</code>\nand do not spuriously report failures to validate anchors.\nPatch by James Addison.</li>\n</ul>\n<h1>Release 7.1.1 (released Jul 27, 2023)</h1>\n<h2>Bugs fixed</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11514\">#11514</a>: Fix <code>SOURCE_DATE_EPOCH</code> in multi-line copyright footer.\nPatch by B\u00e9n\u00e9dikt Tran.</li>\n</ul>\n<h1>Release 7.1.0 (released Jul 24, 2023)</h1>\n<h2>Incompatible changes</h2>\n<ul>\n<li>\n<p>Releases are no longer signed, given the <code>change in PyPI policy</code>_.</p>\n<p>.. _change in PyPI policy: <a href=\"https://blog.pypi.org/posts/2023-05-23-removing-pgp/\">https://blog.pypi.org/posts/2023-05-23-removing-pgp/</a></p>\n</li>\n</ul>\n<h2>Deprecated</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11412\">#11412</a>: Emit warnings on using a deprecated Python-specific index entry type\n(namely, <code>module</code>, <code>keyword</code>, <code>operator</code>, <code>object</code>, <code>exception</code>,\n<code>statement</code>, and <code>builtin</code>) in the :rst:dir:<code>index</code> directive, and\nset the removal version to Sphinx 9. Patch by Adam Turner.</li>\n</ul>\n<h2>Features added</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11415\">#11415</a>: Add a checksum to JavaScript and CSS asset URIs included within\ngenerated HTML, using the CRC32 algorithm.</li>\n<li>:meth:<code>~sphinx.application.Sphinx.require_sphinx</code> now allows the version\nrequirement to be specified as <code>(major, minor)</code>.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11011\">#11011</a>: Allow configuring a line-length limit for object signatures, via\n:confval:<code>maximum_signature_line_length</code> and the domain-specific variants.\nIf the length of the signature (in characters) is greater than the configured\nlimit, each parameter in the signature will be split to its own logical line.\nThis behaviour may also be controlled by options on object description\ndirectives, for example :rst:dir:<code>py:function:single-line-parameter-list</code>.</li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/320d0b631cc7d9617f5167cc61c9284674f5b2df\"><code>320d0b6</code></a> Bump to 7.1.2 final</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/06c1339bb36378512d2e27bcff86b6bd5db0dc0a\"><code>06c1339</code></a> Ensure that <code>linkcheck_anchors</code> is properly respected (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11544\">#11544</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/89808c6f49e1738765d18309244dca0156ee28f6\"><code>89808c6</code></a> Emend attribution for <a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11431\">GH-11431</a> in CHANGES (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11547\">#11547</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/4958d2abf1abb1c3a10e77d8297a746cc90d5234\"><code>4958d2a</code></a> Fix flake8 E231 reported linting failure</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/4862da883f8c984e8f15a8643c61702f90947d6c\"><code>4862da8</code></a> Bump version</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/d8d73c16b8b86df8f1a32698229a2b818fea2e98\"><code>d8d73c1</code></a> Bump to 7.1.1 final</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/a54e630a21a6d9b7e80a22e969e3a86e35678d2d\"><code>a54e630</code></a> [internationalisation] Update message catalogues</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/8452300d54dce2da751941d9547dd54dc03e69bf\"><code>8452300</code></a> Fix multi-line copyright when <code>SOURCE_DATE_EPOCH</code> is set (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11524\">#11524</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/fe08cec019c52c15b7f7365013134e3f3d1b3739\"><code>fe08cec</code></a> bump version</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/e560f6334aa87af07304415e6aeaf42d03d1c525\"><code>e560f63</code></a> Bump to 7.1.0 final</li>\n<li>Additional commits viewable in <a href=\"https://github.com/sphinx-doc/sphinx/compare/v6.1.3...v7.1.2\">compare view</a></li>\n</ul>\n</details>\n<br />\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sphinx&package-manager=pip&previous-version=6.1.3&new-version=7.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<details>\n<summary>Dependabot commands and options</summary>\n<br />\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</details>\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2125.org.readthedocs.build/en/2125/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2125/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1826424151, "node_id": "PR_kwDOBm6k_c5Wp6Hs", "number": 2124, "title": "Bump sphinx from 6.1.3 to 7.1.1", "user": {"value": 49699333, "label": "dependabot[bot]"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 2, "created_at": "2023-07-28T13:23:11Z", "updated_at": "2023-08-02T13:28:47Z", "closed_at": "2023-08-02T13:28:44Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2124", "body": "Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 6.1.3 to 7.1.1.\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/releases\">sphinx's releases</a>.</em></p>\n<blockquote>\n<h2>Sphinx 7.1.1</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>Sphinx 7.1.0</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>v7.0.1</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>v7.0.0</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>v7.0.0rc1</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>v6.2.1</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n<h2>v6.2.0</h2>\n<p>Changelog: <a href=\"https://www.sphinx-doc.org/en/master/changes.html\">https://www.sphinx-doc.org/en/master/changes.html</a></p>\n</blockquote>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/sphinx-doc/sphinx/blob/master/CHANGES\">sphinx's changelog</a>.</em></p>\n<blockquote>\n<h1>Release 7.1.1 (released Jul 27, 2023)</h1>\n<h2>Bugs fixed</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11514\">#11514</a>: Fix <code>SOURCE_DATE_EPOCH</code> in multi-line copyright footer.\nPatch by B\u00e9n\u00e9dikt Tran.</li>\n</ul>\n<h1>Release 7.1.0 (released Jul 24, 2023)</h1>\n<h2>Incompatible changes</h2>\n<ul>\n<li>\n<p>Releases are no longer signed, given the <code>change in PyPI policy</code>_.</p>\n<p>.. _change in PyPI policy: <a href=\"https://blog.pypi.org/posts/2023-05-23-removing-pgp/\">https://blog.pypi.org/posts/2023-05-23-removing-pgp/</a></p>\n</li>\n</ul>\n<h2>Deprecated</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11412\">#11412</a>: Emit warnings on using a deprecated Python-specific index entry type\n(namely, <code>module</code>, <code>keyword</code>, <code>operator</code>, <code>object</code>, <code>exception</code>,\n<code>statement</code>, and <code>builtin</code>) in the :rst:dir:<code>index</code> directive, and\nset the removal version to Sphinx 9. Patch by Adam Turner.</li>\n</ul>\n<h2>Features added</h2>\n<ul>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11415\">#11415</a>: Add a checksum to JavaScript and CSS asset URIs included within\ngenerated HTML, using the CRC32 algorithm.</li>\n<li>:meth:<code>~sphinx.application.Sphinx.require_sphinx</code> now allows the version\nrequirement to be specified as <code>(major, minor)</code>.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11011\">#11011</a>: Allow configuring a line-length limit for object signatures, via\n:confval:<code>maximum_signature_line_length</code> and the domain-specific variants.\nIf the length of the signature (in characters) is greater than the configured\nlimit, each parameter in the signature will be split to its own logical line.\nThis behaviour may also be controlled by options on object description\ndirectives, for example :rst:dir:<code>py:function:single-line-parameter-list</code>.\nPatch by Thomas Louf, Adam Turner, and Jean-Fran\u00e7ois B.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/10983\">#10983</a>: Support for multiline copyright statements in the footer block.\nPatch by Stefanie Molin</li>\n<li><code>sphinx.util.display.status_iterator</code> now clears the current line\nwith ANSI control codes, rather than overprinting with space characters.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11431\">#11431</a>: linkcheck: Treat SSL failures as broken links.\nPatch by B\u00e9n\u00e9dikt Tran</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11157\">#11157</a>: Keep the <code>translated</code> attribute on translated nodes.</li>\n<li><a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11451\">#11451</a>: Improve the traceback displayed when using :option:<code>sphinx-build -T</code>\nin parallel builds. Patch by B\u00e9n\u00e9dikt Tran</li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/d8d73c16b8b86df8f1a32698229a2b818fea2e98\"><code>d8d73c1</code></a> Bump to 7.1.1 final</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/a54e630a21a6d9b7e80a22e969e3a86e35678d2d\"><code>a54e630</code></a> [internationalisation] Update message catalogues</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/8452300d54dce2da751941d9547dd54dc03e69bf\"><code>8452300</code></a> Fix multi-line copyright when <code>SOURCE_DATE_EPOCH</code> is set (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11524\">#11524</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/fe08cec019c52c15b7f7365013134e3f3d1b3739\"><code>fe08cec</code></a> bump version</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/e560f6334aa87af07304415e6aeaf42d03d1c525\"><code>e560f63</code></a> Bump to 7.1.0 final</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/066e0fabc60c55072b3f75876637a44fdcb51332\"><code>066e0fa</code></a> Add translation progress information (<a href=\"https://redirect.github.com/sphinx-doc/sphinx/issues/11509\">#11509</a>)</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/0882914d5c5057ad3cec280c0142cfe5f6965844\"><code>0882914</code></a> Target PyPI in create-release.yml</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/21fbee5e83a3e9d34e589d06c66d928f3a67923c\"><code>21fbee5</code></a> Fix OIDC token payload</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/1a403e4f9ad4d8d7a3e4c7c34f55d9a45ed600bd\"><code>1a403e4</code></a> Add informational log messaging</li>\n<li><a href=\"https://github.com/sphinx-doc/sphinx/commit/258b0ea9fcdd05221ebead5e5c162a7ad37c4412\"><code>258b0ea</code></a> Revert &quot;Switch to using <code>github.request</code>&quot;</li>\n<li>Additional commits viewable in <a href=\"https://github.com/sphinx-doc/sphinx/compare/v6.1.3...v7.1.1\">compare view</a></li>\n</ul>\n</details>\n<br />\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sphinx&package-manager=pip&previous-version=6.1.3&new-version=7.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<details>\n<summary>Dependabot commands and options</summary>\n<br />\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</details>\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2124.org.readthedocs.build/en/2124/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2124/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1825007061, "node_id": "I_kwDOBm6k_c5sx2XV", "number": 2123, "title": "datasette serve when invoked with --reload interprets the serve command as a file", "user": {"value": 79087, "label": "cadeef"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 2, "created_at": "2023-07-27T19:07:22Z", "updated_at": "2023-09-18T13:02:46Z", "closed_at": null, "author_association": "NONE", "pull_request": null, "body": "When running `datasette serve` with the `--reload` flag, the serve command is picked up as a file argument:\r\n\r\n```\r\n$ datasette serve --reload test_db\r\nStarting monitor for PID 13574.\r\nError: Invalid value for '[FILES]...': Path 'serve' does not exist.\r\nPress ENTER or change a file to reload.\r\n```\r\n\r\nIf a 'serve' file is created it launches properly (albeit with an empty database called serve):\r\n\r\n```\r\n$ touch serve; datasette serve --reload test_db\r\nStarting monitor for PID 13628.\r\nINFO:     Started server process [13628]\r\nINFO:     Waiting for application startup.\r\nINFO:     Application startup complete.\r\nINFO:     Uvicorn running on http://127.0.0.1:8001 (Press CTRL+C to quit)\r\n```\r\n\r\nVersion (running from HEAD on main):\r\n\r\n```\r\n$ datasette --version\r\ndatasette, version 1.0a2\r\n```\r\n\r\nThis issue appears to have existed for awhile as https://github.com/simonw/datasette/issues/1380#issuecomment-953366110 mentions the error in a different context.\r\n\r\nI'm happy to debug and land a patch if it's welcome.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2123/reactions\", \"total_count\": 2, \"+1\": 2, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1824457306, "node_id": "I_kwDOBm6k_c5svwJa", "number": 2122, "title": "Parameters on canned queries: fixed or query-generated list?", "user": {"value": 1563881, "label": "meowcat"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2023-07-27T14:07:07Z", "updated_at": "2023-07-27T14:07:07Z", "closed_at": null, "author_association": "NONE", "pull_request": null, "body": "Hi,\r\n\r\ncurrently parameters in canned queries are just text fields. It would be cool to have one of the options below. Would you accept a PR doing something in this direction? (Possibly this could even work as a plugin.)\r\n\r\n* adding facets, which would work like facets on tables or views, giving a list of selectable options (and leaving parameters as is)\r\n* making it possible to provide a query which returns selectable values for a parameter, e.g.\r\n```     \r\ncalendar_entries_current_instrument:\r\n        sql: |      \r\n          select * from calendar_entries \r\n              where \r\n                    DTEND_UNIX > UNIXEPOCH() and\r\n                    DTSTART_UNIX < UNIXEPOCH() + :days *24*60*60 and\r\n                    current = 1 and\r\n                    MACHINE = :instrument\r\n              order by\r\n                    DTSTART_UNIX\r\n        params:\r\n            days: \r\n              sql: \"SELECT VALUE FROM generate_series(1, 30, 1)\"\r\n              # this obviously requires the corresponding sqlite extension\r\n            instrument:\r\n              sql: \"SELECT DISTINCT MACHINE FROM calendar_entries\"\r\n```\r\n* making it possible to provide a fixed list of parameters\r\n```     \r\ncalendar_entries_current_instrument:\r\n        sql: |      \r\n          select * from calendar_entries \r\n              where \r\n                    DTEND_UNIX > UNIXEPOCH() and\r\n                    DTSTART_UNIX < UNIXEPOCH() + :days *24*60*60 and\r\n                    current = 1 and\r\n                    MACHINE = :instrument\r\n              order by\r\n                    DTSTART_UNIX\r\n        params:\r\n            days: \r\n              values: [1, 2, 3, 5, 10, 20, 30]\r\n            instrument:\r\n              values: [supermachine, crappymachine, boringmachine]\r\n```", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2122/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1824399610, "node_id": "PR_kwDOBm6k_c5WjCS8", "number": 2121, "title": "Bump furo from 2023.3.27 to 2023.7.26", "user": {"value": 49699333, "label": "dependabot[bot]"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 2, "created_at": "2023-07-27T13:40:48Z", "updated_at": "2023-08-07T16:20:23Z", "closed_at": "2023-08-07T16:20:20Z", "author_association": "CONTRIBUTOR", "pull_request": "simonw/datasette/pulls/2121", "body": "Bumps [furo](https://github.com/pradyunsg/furo) from 2023.3.27 to 2023.7.26.\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/pradyunsg/furo/blob/main/docs/changelog.md\">furo's changelog</a>.</em></p>\n<blockquote>\n<h1>Changelog</h1>\n<!-- raw HTML omitted -->\n<h2>2023.07.26 -- Vigilant Volt</h2>\n<ul>\n<li>Fix compatiblity with Sphinx 7.1.</li>\n<li>Improve how content overflow is handled.</li>\n<li>Improve how literal blocks containing inline code are handled.</li>\n</ul>\n<h2>2023.05.20 -- Unassuming Ultramarine</h2>\n<ul>\n<li>\u2728 Add support for Sphinx 7.</li>\n<li>Drop support for Sphinx 5.</li>\n<li>Improve the screen-reader label for sidebar collapse.</li>\n<li>Make it easier to create derived themes from Furo.</li>\n<li>Bump all JS dependencies (NodeJS and npm packages).</li>\n</ul>\n<h2>2023.03.27 -- Tasty Tangerine</h2>\n<ul>\n<li>Regenerate with newer version of sphinx-theme-builder, to fix RECORD hashes.</li>\n<li>Add missing class to Font Awesome examples</li>\n</ul>\n<h2>2023.03.23 -- Sassy Saffron</h2>\n<ul>\n<li>Update Python version classifiers.</li>\n<li>Increase the icon size in mobile header.</li>\n<li>Increase admonition title bg opacity.</li>\n<li>Change the default API background to transparent.</li>\n<li>Transition the API background change.</li>\n<li>Remove the &quot;indent&quot; of API entries which have a background.</li>\n<li>Break long inline code literals.</li>\n</ul>\n<h2>2022.12.07 -- Reverent Raspberry</h2>\n<ul>\n<li>\u2728 Add support for Sphinx 6.</li>\n<li>\u2728 Improve footnote presentation with docutils 0.18+.</li>\n<li>Drop support for Sphinx 4.</li>\n<li>Improve documentation about what the edit button does.</li>\n<li>Improve handling of empty-flexboxes for better print experience on Chrome.</li>\n<li>Improve styling for inline signatures.</li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/35f5307acc66d63ddb2e50eebc79a389518e881a\"><code>35f5307</code></a> Prepare release: 2023.07.26</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/0a8bedc51399777be2d01f2401fd52a32d9f6673\"><code>0a8bedc</code></a> Update changelog</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/a92dd0c2bfa398825e239171925a81bdc428e90a\"><code>a92dd0c</code></a> Make <code>_add_asset_hashes</code> a no-op with Sphinx 7.1</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/f8db95bed5d1c57b4ea6bf536c65560fa9ae33a9\"><code>f8db95b</code></a> Improve literals with inline code are handled</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/1680dbefd61766a28e43880ae05a9f5cc0e7f19b\"><code>1680dbe</code></a> Document the use of <code>figclass</code> with <code>figure</code> directive</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/beebd7e676d1538891fef4ead30f79d866fe78c2\"><code>beebd7e</code></a> Increase the specificity of the admonition title selector</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/834e951f5567fc4b0aa3564d33c0f0011d459263\"><code>834e951</code></a> Setup uploads to Percy</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/27bf2c0e6f1b2c3ae9b0a7beed689c4df9bed1b2\"><code>27bf2c0</code></a> [pre-commit.ci] pre-commit autoupdate (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/672\">#672</a>)</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/c8b51d09af3dcaac3046f7e761119e9d1b7c9e37\"><code>c8b51d0</code></a> Fix how content overflow is handled</li>\n<li><a href=\"https://github.com/pradyunsg/furo/commit/80afa27a9a7bd0ac9259636239e349656c4726ab\"><code>80afa27</code></a> [pre-commit.ci] pre-commit autoupdate (<a href=\"https://redirect.github.com/pradyunsg/furo/issues/652\">#652</a>)</li>\n<li>Additional commits viewable in <a href=\"https://github.com/pradyunsg/furo/compare/2023.03.27...2023.07.26\">compare view</a></li>\n</ul>\n</details>\n<br />\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=furo&package-manager=pip&previous-version=2023.3.27&new-version=2023.7.26)](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<details>\n<summary>Dependabot commands and options</summary>\n<br />\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</details>\r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2121.org.readthedocs.build/en/2121/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2121/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1823428714, "node_id": "I_kwDOBm6k_c5sr1Bq", "number": 2120, "title": "Add __all__ to datasette/__init__.py", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2023-07-27T01:07:10Z", "updated_at": "2023-07-27T01:07:10Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "Currently looks like this: https://github.com/simonw/datasette/blob/08181823990a71ffa5a1b57b37259198eaa43e06/datasette/__init__.py#L1-L6\r\n\r\nAdding `__all__ = [\"Permission\", \"Forbidden\"...]` would let me get rid of those `# noqa` comments.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2120/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1823393475, "node_id": "I_kwDOBm6k_c5srsbD", "number": 2119, "title": "database color shows only on index page, not other pages", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 3268330, "label": "Datasette 1.0"}, "comments": 3, "created_at": "2023-07-27T00:19:39Z", "updated_at": "2023-08-11T05:25:45Z", "closed_at": "2023-08-11T05:16:24Z", "author_association": "OWNER", "pull_request": null, "body": "I think this has been a bug for a long time.\r\n\r\nhttps://latest.datasette.io/ currently shows:\r\n\r\n<img width=\"827\" alt=\"image\" src=\"https://github.com/simonw/datasette/assets/9599/fcd08d0c-5b07-40be-bc9f-3ba9199ad858\">\r\n\r\nThose colors are based on a hash of the database name. But when you click through to https://latest.datasette.io/fixtures\r\n\r\n<img width=\"692\" alt=\"image\" src=\"https://github.com/simonw/datasette/assets/9599/7c9dfd66-06e8-47fc-9ed7-ce425da22cb4\">\r\n\r\nIt's red on all sub-pages too.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2119/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1823352380, "node_id": "PR_kwDOBm6k_c5Wfgd9", "number": 2118, "title": "New JSON design for query views", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 9700784, "label": "Datasette 1.0a3"}, "comments": 11, "created_at": "2023-07-26T23:29:21Z", "updated_at": "2023-08-08T01:47:40Z", "closed_at": "2023-08-08T01:47:39Z", "author_association": "OWNER", "pull_request": "simonw/datasette/pulls/2118", "body": "WIP. Refs:\r\n- #2109 \r\n\r\n<!-- readthedocs-preview datasette start -->\r\n----\n:books: Documentation preview :books:: https://datasette--2118.org.readthedocs.build/en/2118/\n\r\n<!-- readthedocs-preview datasette end -->", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2118/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null}
{"id": 1822982933, "node_id": "I_kwDOBm6k_c5sqIMV", "number": 2117, "title": "Figure out what to do about `DatabaseView.name`", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 9700784, "label": "Datasette 1.0a3"}, "comments": 1, "created_at": "2023-07-26T18:58:06Z", "updated_at": "2023-08-08T02:02:07Z", "closed_at": "2023-08-08T02:02:07Z", "author_association": "OWNER", "pull_request": null, "body": "In the old code:\r\n\r\nhttps://github.com/simonw/datasette/blob/08181823990a71ffa5a1b57b37259198eaa43e06/datasette/views/database.py#L34-L35\r\n\r\nThis `name` class attribute was later used by some of the plugin hooks, passed as `view_name`: https://github.com/simonw/datasette/blob/18dd88ee4d78fe9d760e9da96028ae06d938a85c/datasette/hookspecs.py#L50-L54\r\n\r\nFigure out how that should work once I've refactored those classes to view functions instead.\r\n\r\nRefs:\r\n- #2109 ", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2117/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1822949756, "node_id": "I_kwDOBm6k_c5sqAF8", "number": 2116, "title": "Turn DatabaseDownload into an async view function", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 9700784, "label": "Datasette 1.0a3"}, "comments": 3, "created_at": "2023-07-26T18:31:59Z", "updated_at": "2023-07-26T18:44:00Z", "closed_at": "2023-07-26T18:44:00Z", "author_association": "OWNER", "pull_request": null, "body": "A minor refactor, but it is a good starting point for this new branch. Refs:\r\n- #2109", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2116/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1822940964, "node_id": "I_kwDOBm6k_c5sp98k", "number": 2115, "title": "Ensure all tests pass against new query view JSON", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 9700784, "label": "Datasette 1.0a3"}, "comments": 0, "created_at": "2023-07-26T18:25:20Z", "updated_at": "2023-08-08T02:01:39Z", "closed_at": "2023-08-08T02:01:38Z", "author_association": "OWNER", "pull_request": null, "body": "- #2109 ", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2115/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1822940263, "node_id": "I_kwDOBm6k_c5sp9xn", "number": 2114, "title": "Implement canned queries against new query JSON work", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 9700784, "label": "Datasette 1.0a3"}, "comments": 3, "created_at": "2023-07-26T18:24:50Z", "updated_at": "2023-08-09T15:26:58Z", "closed_at": "2023-08-09T15:26:57Z", "author_association": "OWNER", "pull_request": null, "body": "- #2109 ", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2114/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1822939274, "node_id": "I_kwDOBm6k_c5sp9iK", "number": 2113, "title": "Implement and document extras for the new query view page", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": {"value": 8755003, "label": "Datasette 1.0a-next"}, "comments": 3, "created_at": "2023-07-26T18:24:01Z", "updated_at": "2023-08-09T17:35:22Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "- #2109 ", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2113/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null}
{"id": 1822938661, "node_id": "I_kwDOBm6k_c5sp9Yl", "number": 2112, "title": "Build HTML version of /content?sql=...", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 9700784, "label": "Datasette 1.0a3"}, "comments": 5, "created_at": "2023-07-26T18:23:34Z", "updated_at": "2023-08-08T02:01:09Z", "closed_at": "2023-08-08T02:01:01Z", "author_association": "OWNER", "pull_request": null, "body": "This will help make the hook as robust as possible.\r\n- #2109 ", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2112/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1822937426, "node_id": "I_kwDOBm6k_c5sp9FS", "number": 2111, "title": "Implement new /content.json?sql=...", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 9700784, "label": "Datasette 1.0a3"}, "comments": 4, "created_at": "2023-07-26T18:22:39Z", "updated_at": "2023-08-08T02:00:37Z", "closed_at": "2023-08-08T02:00:22Z", "author_association": "OWNER", "pull_request": null, "body": "This will be the base that the remaining work builds on top of. Refs:\r\n- #2109 ", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2111/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1822936521, "node_id": "I_kwDOBm6k_c5sp83J", "number": 2110, "title": "Merge database index page and query view", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 9700784, "label": "Datasette 1.0a3"}, "comments": 1, "created_at": "2023-07-26T18:21:57Z", "updated_at": "2023-07-26T19:53:25Z", "closed_at": "2023-07-26T19:53:25Z", "author_association": "OWNER", "pull_request": null, "body": "Refs:\r\n- #2109\r\n\r\nThe idea here is that hitting `/content` without a `?sql=` will show an empty result set AND default to including a bunch of extras about the list of tables in the database.\r\n\r\nThen I won't have to think about `/content` and `/content?sql=` as separate pages any more.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2110/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}
{"id": 1822934563, "node_id": "I_kwDOBm6k_c5sp8Yj", "number": 2109, "title": "Plan for getting the new JSON format query views working", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 9700784, "label": "Datasette 1.0a3"}, "comments": 5, "created_at": "2023-07-26T18:20:18Z", "updated_at": "2023-07-27T00:24:47Z", "closed_at": "2023-07-26T18:25:34Z", "author_association": "OWNER", "pull_request": null, "body": "I've been stuck on this for too long. I'm breaking it down into a full milestone:\r\n\r\nhttps://github.com/simonw/datasette/milestone/29", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/2109/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"}