{"id": 1081550456, "node_id": "PR_kwDOBm6k_c5AdyZ4", "number": 1840, "state": "closed", "locked": 0, "title": "test commit", "user": {"value": 102635518, "label": "7lingyuan"}, "body": "lalalalalalala\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1840.org.readthedocs.build/en/1840/\n\r\n", "created_at": "2022-10-10T05:15:26Z", "updated_at": "2022-10-10T09:11:50Z", "closed_at": "2022-10-10T09:11:50Z", "merged_at": null, "merge_commit_sha": null, "assignee": null, "milestone": null, "draft": 0, "head": "304ce7a516a0b361ae9f5f0059ce02eb675f69aa", "base": "b7fec7f9020b79c1fe60cc5a2def86b50eeb5af9", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1840", "merged_by": null, "auto_merge": null} {"id": 971057476, "node_id": "PR_kwDOBm6k_c454SlE", "number": 1759, "state": "closed", "locked": 0, "title": "Extract facet portions of table.html out into included templates", "user": {"value": 19872, "label": "nsmgr8"}, "body": "To allow users customise the facet content as they would prefer such as sorting of facet results. ordering of suggested facets etc.", "created_at": "2022-06-17T22:04:04Z", "updated_at": "2022-06-20T18:05:45Z", "closed_at": "2022-06-20T18:05:45Z", "merged_at": "2022-06-20T18:05:45Z", "merge_commit_sha": "00e59ec461dc0150772b999c7cc15fcb9b507d58", "assignee": null, "milestone": null, "draft": 0, "head": "b901bb0a8eb50bc966c3e1712d73c0822edf3861", "base": "2e9751672d4fe329b3c359d5b7b1992283185820", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1759", "merged_by": null, "auto_merge": null} {"id": 1167644140, "node_id": "PR_kwDOBm6k_c5FmNXs", "number": 1961, "state": "closed", "locked": 0, "title": "Use click.echo() instead of print() for --root option", "user": {"value": 9599, "label": "simonw"}, "body": "This ensures the URL is output correctly when running under Docker.\r\n\r\nCloses #1958\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1961.org.readthedocs.build/en/1961/\n\r\n", "created_at": "2022-12-16T00:54:56Z", "updated_at": "2022-12-16T00:55:19Z", "closed_at": "2022-12-16T00:55:18Z", "merged_at": "2022-12-16T00:55:18Z", "merge_commit_sha": "013496862f4d4b441ab61255242b838b24287607", "assignee": null, "milestone": null, "draft": 0, "head": "06d20c792f8c872118edd84973308fb3e5137b5e", "base": "0b68996cc511b3a801f0cd0157bd66332d75f46f", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1961", "merged_by": null, "auto_merge": null} {"id": 985781142, "node_id": "PR_kwDOBm6k_c46wdOW", "number": 1766, "state": "closed", "locked": 0, "title": "Keep track of config_dir", "user": {"value": 25778, "label": "eyeseast"}, "body": "Closes #1764 \r\n\r\nSmall change that adds `self.config_dir = config_dir` to `Datasette.__init__`. This will let plugins also use `config_dir`, if available.", "created_at": "2022-07-03T17:37:02Z", "updated_at": "2022-07-18T01:12:45Z", "closed_at": "2022-07-18T01:12:45Z", "merged_at": "2022-07-18T01:12:45Z", "merge_commit_sha": "01369176b0a8943ab45292ffc6f9c929b80a00e8", "assignee": null, "milestone": null, "draft": 0, "head": "257fd240975abf9647217f5d22ccadbecd6ec9f2", "base": "9f1eb0d4eac483b953392157bd9fd6cc4df37de7", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1766", "merged_by": null, "auto_merge": null} {"id": 492257405, "node_id": "MDExOlB1bGxSZXF1ZXN0NDkyMjU3NDA1", "number": 174, "state": "closed", "locked": 0, "title": "Much, much faster extract() implementation", "user": {"value": 9599, "label": "simonw"}, "body": "Takes my test down from ten minutes to four seconds. Refs #172.", "created_at": "2020-09-24T07:52:31Z", "updated_at": "2020-09-24T15:44:00Z", "closed_at": "2020-09-24T15:43:56Z", "merged_at": "2020-09-24T15:43:56Z", "merge_commit_sha": "022cdd97a9ddab1a152e23e1e1c42e78c1ed0fa9", "assignee": null, "milestone": null, "draft": 0, "head": "227095ee90e2a92effec6478d3e629a24d3ccfba", "base": "0ca5585fcb834122193e8e7186f926217b23cb8a", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/174", "merged_by": null, "auto_merge": null} {"id": 323983732, "node_id": "MDExOlB1bGxSZXF1ZXN0MzIzOTgzNzMy", "number": 579, "state": "open", "locked": 0, "title": "New connection pooling", "user": {"value": 9599, "label": "simonw"}, "body": "See #569", "created_at": "2019-10-02T23:22:19Z", "updated_at": "2019-11-15T22:57:21Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "025b4024b1b43ea034b7fd331c30740165ff75f2", "assignee": null, "milestone": null, "draft": 0, "head": "32cbfd2acd28bcefb97c442ac8e3ee2c07401e19", "base": "a9909c29ccac771c23c2ef22b89d10697b5256b9", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/579", "merged_by": null, "auto_merge": null} {"id": 1234321667, "node_id": "PR_kwDOCGYnMM5JkkED", "number": 526, "state": "closed", "locked": 0, "title": "Fix repeated calls to `Table.convert()`", "user": {"value": 167893, "label": "mcarpenter"}, "body": "Fixes #525. All tests pass.\r\n\r\nThere's perhaps a better way to name lambdas? There could be a collision if a caller passes a function with name like `lambda_123456`.\r\n\r\nSQLite [documentation](https://www.sqlite.org/appfunc.html) is a little, ah, lite on function name specs. If there is a character that can be used in place of underscore in a SQLite function name that is not permitted in a Python function identifier then that could be a good way to prevent accidental collisions. (I tried dash, colon, dot, no joy).\r\n\r\nOtherwise, there is little chance of this happening and if it should happen the risk is mitigated by now throwing an exception in the case of a (name, arity) collision without `replace=True`.\r\n\r\n\r\n----\r\n:books: Documentation preview :books:: https://sqlite-utils--526.org.readthedocs.build/en/526/\r\n\r\n", "created_at": "2023-02-09T00:14:49Z", "updated_at": "2023-05-08T21:56:05Z", "closed_at": "2023-05-08T21:53:58Z", "merged_at": "2023-05-08T21:53:58Z", "merge_commit_sha": "02f5c4d69d7b4baebde015c56e5bc62923f33314", "assignee": null, "milestone": null, "draft": 0, "head": "486e0cc1cd67e98c22d1f125403144cdedfa3d58", "base": "fc221f9b62ed8624b1d2098e564f525c84497969", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/526", "merged_by": null, "auto_merge": null} {"id": 658991404, "node_id": "MDExOlB1bGxSZXF1ZXN0NjU4OTkxNDA0", "number": 1352, "state": "closed", "locked": 0, "title": "Bump black from 21.5b1 to 21.5b2", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [black](https://github.com/psf/black) from 21.5b1 to 21.5b2.\n
\nRelease notes\n

Sourced from black's releases.

\n
\n

21.5b2

\n

Black

\n\n

Blackd

\n\n

Packaging

\n\n

Documentation

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

Sourced from black's changelog.

\n
\n

21.5b2

\n

Black

\n\n

Blackd

\n\n

Integrations

\n\n

Packaging

\n\n

Documentation

\n\n
\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=black&package-manager=pip&previous-version=21.5b1&new-version=21.5b2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", "created_at": "2021-06-01T13:08:52Z", "updated_at": "2021-06-02T02:56:45Z", "closed_at": "2021-06-02T02:56:44Z", "merged_at": "2021-06-02T02:56:44Z", "merge_commit_sha": "03b35d70e281ea48bd9b8058738ed87b13cea2de", "assignee": null, "milestone": null, "draft": 0, "head": "6921552c80854d6ea73203fe2f9ab46bac6d5644", "base": "a18e8641bc33e51b265855bc6e8a1939597b3a76", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1352", "merged_by": null, "auto_merge": null} {"id": 760452915, "node_id": "PR_kwDOBm6k_c4tU5cz", "number": 1494, "state": "closed", "locked": 0, "title": "Update pytest-asyncio requirement from <0.16,>=0.10 to >=0.10,<0.17", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Updates the requirements on [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) to permit the latest version.\n
\nCommits\n\n
\n
\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", "created_at": "2021-10-18T13:14:17Z", "updated_at": "2021-10-24T22:22:40Z", "closed_at": "2021-10-24T22:22:39Z", "merged_at": "2021-10-24T22:22:39Z", "merge_commit_sha": "03cc697b6b3d0983618c29ee75b45b5e0ac91139", "assignee": null, "milestone": null, "draft": 0, "head": "7a3e3c355695d95b002a2ec6a68b0c27c7089ed6", "base": "ff9ccfb0310501a3b4b4ca24d73246a8eb3e7914", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1494", "merged_by": null, "auto_merge": null} {"id": 817942693, "node_id": "PR_kwDOBm6k_c4wwNCl", "number": 1589, "state": "closed", "locked": 0, "title": "Typo in docs about default redirect status code", "user": {"value": 3556, "label": "davidbgk"}, "body": null, "created_at": "2022-01-10T19:14:36Z", "updated_at": "2022-03-06T02:27:49Z", "closed_at": "2022-03-06T01:58:32Z", "merged_at": "2022-03-06T01:58:32Z", "merge_commit_sha": "0499f174c063283aa9b589d475a32077aaf7adc5", "assignee": null, "milestone": null, "draft": 0, "head": "d95bd658748172d88b04330950ef8f8d18b726c7", "base": "8c401ee0f054de2f568c3a8302c9223555146407", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1589", "merged_by": null, "auto_merge": null} {"id": 521287994, "node_id": "MDExOlB1bGxSZXF1ZXN0NTIxMjg3OTk0", "number": 203, "state": "open", "locked": 0, "title": "changes to allow for compound foreign keys", "user": {"value": 1049910, "label": "drkane"}, "body": "Add support for compound foreign keys, as per issue #117 \r\n\r\nNot sure if this is the right approach. In particular I'm unsure about:\r\n\r\n - the new `ForeignKey` class, which replaces the namedtuple in order to ensure that `column` and `other_column` are forced into tuples. The class does the job, but doesn't feel very elegant.\r\n - I haven't rewritten `guess_foreign_table` to take account of multiple columns, so it just checks for the first column in the foreign key definition. This isn't ideal.\r\n - I haven't added any ability to the CLI to add compound foreign keys, it's only in the python API at the moment.\r\n\r\nThe PR also contains a minor related change that columns and tables are always quoted in foreign key definitions.", "created_at": "2020-11-16T00:30:10Z", "updated_at": "2023-01-25T18:47:18Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "0507a9464314f84e9e58b1931c583df51d757d7c", "assignee": null, "milestone": null, "draft": 0, "head": "5e43e31c2b9bcf6b5d1460b0f848fed019ed42a6", "base": "f1277f638f3a54a821db6e03cb980adad2f2fa35", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/203", "merged_by": null, "auto_merge": null} {"id": 729704537, "node_id": "MDExOlB1bGxSZXF1ZXN0NzI5NzA0NTM3", "number": 1465, "state": "open", "locked": 0, "title": "add support for -o --get /path", "user": {"value": 51016, "label": "ctb"}, "body": "Fixes https://github.com/simonw/datasette/issues/1459\r\n\r\nAdds support for `--open --get /path` to be used in combination.\r\n\r\nIf `--open` is provided alone, datasette will open a web page to a default URL.\r\nIf `--get ` is provided alone, datasette will output the result of doing a GET to that URL and then exit.\r\nIf `--open --get ` are provided together, datasette will open a web page to that URL.\r\n\r\nTODO items:\r\n- [ ] update documentation\r\n- [ ] print out error message when `--root --open --get ` is used\r\n- [ ] adjust code to require that `` start with a `/` when `-o --get ` is used\r\n- [ ] add test(s)\r\n\r\nnote, '@CTB' is used in this PR to flag code that needs revisiting.", "created_at": "2021-09-08T14:30:42Z", "updated_at": "2021-09-08T14:31:45Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "064e9511923fc4e50566bf9430b4a5b26f169357", "assignee": null, "milestone": null, "draft": 1, "head": "9b66a7d9ba55bad8a3b409ede8855f4b4fff1f88", "base": "d57ab156b35ec642549fb69d08279850065027d2", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1465", "merged_by": null, "auto_merge": null} {"id": 152360740, "node_id": "MDExOlB1bGxSZXF1ZXN0MTUyMzYwNzQw", "number": 81, "state": "closed", "locked": 0, "title": ":fire: Removes DS_Store", "user": {"value": 50527, "label": "jefftriplett"}, "body": "", "created_at": "2017-11-13T22:07:52Z", "updated_at": "2017-11-14T02:24:54Z", "closed_at": "2017-11-13T22:16:55Z", "merged_at": "2017-11-13T22:16:55Z", "merge_commit_sha": "06a826c3188af82f27bb6b4e09cc89b782d30bd6", "assignee": null, "milestone": null, "draft": 0, "head": "c66d297eac556a7f4fd4dcdb15cfb9466fddac77", "base": "d75f423b6fcfc074b7c6f8f7679da8876f181edd", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/81", "merged_by": null, "auto_merge": null} {"id": 297412464, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjk3NDEyNDY0", "number": 38, "state": "closed", "locked": 0, "title": "table.update() method", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #35\r\n\r\nStill to do:\r\n\r\n- [x] Unit tests\r\n- [x] Switch to using `.get()`\r\n- [x] Better exceptions, plus unit tests for what happens if pk does not exist\r\n- [x] Documentation\r\n- [x] Ensure compound primary keys work properly\r\n- [x] `alter=True` support", "created_at": "2019-07-14T17:03:49Z", "updated_at": "2019-07-28T15:43:51Z", "closed_at": "2019-07-28T15:43:51Z", "merged_at": "2019-07-28T15:43:51Z", "merge_commit_sha": "0747dabb24b608e8524de4858ce50c60ba7e471b", "assignee": null, "milestone": null, "draft": 0, "head": "16d7008002b43cf47a973791da93e5cdd5913fc3", "base": "a6749cdf43229c4f7864c946496e9ac0141627d9", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/38", "merged_by": null, "auto_merge": null} {"id": 1139440836, "node_id": "PR_kwDOBm6k_c5D6nzE", "number": 1912, "state": "closed", "locked": 0, "title": "Merge 1.0-dev (with initial write API) back into main", "user": {"value": 9599, "label": "simonw"}, "body": "See:\r\n- #1892\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1912.org.readthedocs.build/en/1912/\n\r\n", "created_at": "2022-11-29T19:31:21Z", "updated_at": "2022-11-29T19:39:37Z", "closed_at": "2022-11-29T19:39:36Z", "merged_at": "2022-11-29T19:39:36Z", "merge_commit_sha": "07aad511769da9242260c850e8d975cbd8c29552", "assignee": null, "milestone": null, "draft": 0, "head": "b8fc8e2cd755b9cfc66838bdc1ca9ee87afdce8a", "base": "21f8aab53164a4f096737743d8cc624d2186327a", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1912", "merged_by": null, "auto_merge": null} {"id": 532348919, "node_id": "MDExOlB1bGxSZXF1ZXN0NTMyMzQ4OTE5", "number": 1130, "state": "open", "locked": 0, "title": "Fix footer not sticking to bottom in short pages", "user": {"value": 3243482, "label": "abdusco"}, "body": "Fixes https://github.com/simonw/datasette/issues/1129", "created_at": "2020-12-04T07:29:01Z", "updated_at": "2021-06-15T13:27:48Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "07bc05c58b6a295e6584f8c4015ec5fedb0050c4", "assignee": null, "milestone": null, "draft": 0, "head": "8d4c69c6fb0ef741a19070f5172017ea3522e83c", "base": "49d8fc056844d5a537d6cfd96dab0dd5686fe718", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1130", "merged_by": null, "auto_merge": null} {"id": 359822773, "node_id": "MDExOlB1bGxSZXF1ZXN0MzU5ODIyNzcz", "number": 75, "state": "closed", "locked": 0, "title": "Explicitly include tests and docs in sdist", "user": {"value": 15092, "label": "jayvdb"}, "body": "Also exclude 'tests' from runtime installation.", "created_at": "2020-01-07T04:53:20Z", "updated_at": "2020-01-31T00:21:27Z", "closed_at": "2020-01-31T00:21:27Z", "merged_at": "2020-01-31T00:21:27Z", "merge_commit_sha": "0988f2eccc2dfa26b1a55243582222f540a72838", "assignee": null, "milestone": null, "draft": 0, "head": "39a836450b23bf2fe1ba9a071a5a9a00a0949cd6", "base": "59a2e8ebdcbde7e6fb091b0556713ca5a20ea4e7", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/75", "merged_by": null, "auto_merge": null} {"id": 337853394, "node_id": "MDExOlB1bGxSZXF1ZXN0MzM3ODUzMzk0", "number": 65, "state": "closed", "locked": 0, "title": "Release 1.12.1", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2019-11-07T04:51:29Z", "updated_at": "2019-11-07T04:58:48Z", "closed_at": "2019-11-07T04:58:47Z", "merged_at": "2019-11-07T04:58:47Z", "merge_commit_sha": "0a0cec3cf27861455e8cd1c4d84937825a18bb30", "assignee": null, "milestone": null, "draft": 0, "head": "28f8a238ab8fc2a70ee81bd73de6c167d9db9cdf", "base": "8dab9fd1ccf571e188eec9ccf606a0c50fccf200", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/65", "merged_by": null, "auto_merge": null} {"id": 889476515, "node_id": "PR_kwDOBm6k_c41BFWj", "number": 1685, "state": "closed", "locked": 0, "title": "Update jinja2 requirement from <3.1.0,>=2.10.3 to >=2.10.3,<3.2.0", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Updates the requirements on [jinja2](https://github.com/pallets/jinja) to permit the latest version.\n
\nRelease notes\n

Sourced from jinja2's releases.

\n
\n

3.1.0

\n

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

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

Sourced from jinja2's changelog.

\n
\n

Version 3.1.0

\n

Released 2022-03-24

\n
    \n
  • \n

    Drop support for Python 3.6. :pr:1534

    \n
  • \n
  • \n

    Remove previously deprecated code. :pr:1544

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

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

    Add items filter. :issue:1561

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
\n

Version 3.0.3

\n

Released 2021-11-09

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

... (truncated)

\n
\n
\nCommits\n
    \n
  • 84c0e2c Merge pull request #1625 from pallets/release-3.1.0
  • \n
  • 7b0c47f release version 3.1.0
  • \n
  • ede0f98 Merge pull request #1621 from pallets/template-safe-path
  • \n
  • 040088a use posixpath.join when loading template names
  • \n
  • a292075 Merge pull request #1620 from janfilips/patch-1
  • \n
  • 6e4df02 Fix formatting in tricks.rst
  • \n
  • 3a050b1 Merge pull request #1617 from pallets/docs-prose
  • \n
  • 4b63cd8 rewrite include statement section
  • \n
  • a98d482 clean up faq, move technical discussions
  • \n
  • 9de99f8 clean up engine comparisons
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", "created_at": "2022-03-25T13:12:13Z", "updated_at": "2022-09-05T18:36:49Z", "closed_at": "2022-09-05T18:36:48Z", "merged_at": null, "merge_commit_sha": "0a1124217cbfa997ae6b8976b3fc76fc443225fb", "assignee": null, "milestone": null, "draft": 0, "head": "933ce474aef535de92d89968816cbdde77c48c64", "base": "c496f2b663ff0cef908ffaaa68b8cb63111fb5f2", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1685", "merged_by": null, "auto_merge": null} {"id": 672053811, "node_id": "MDExOlB1bGxSZXF1ZXN0NjcyMDUzODEx", "number": 65, "state": "open", "locked": 0, "title": "basic support for events", "user": {"value": 231498, "label": "khimaros"}, "body": "a quick first pass at implementing the feature requested in https://github.com/dogsheep/github-to-sqlite/issues/64\r\n\r\ntesting instructions:\r\n\r\n```\r\n$ github-to-sqlite events events.db user/khimaros\r\n```\r\n\r\nif the specified user is the authenticated user, it will also include private events.\r\n\r\ncaveat: pagination appears to be broken (i don't see `next` in the response JSON from GitHub)", "created_at": "2021-06-17T00:51:30Z", "updated_at": "2022-10-03T22:35:03Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "0a252a06a15e307c8a67b2e0aac0907e2566bf19", "assignee": null, "milestone": null, "draft": 0, "head": "82da9f91deda81d92ec64c9eda960aa64340c169", "base": "0e45b72312a0756e5a562effbba08cb8de1e480b", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 207052882, "label": "github-to-sqlite"}, "url": "https://github.com/dogsheep/github-to-sqlite/pull/65", "merged_by": null, "auto_merge": null} {"id": 608323028, "node_id": "MDExOlB1bGxSZXF1ZXN0NjA4MzIzMDI4", "number": 1290, "state": "closed", "locked": 0, "title": "Use pytest-xdist to speed up tests", "user": {"value": 9599, "label": "simonw"}, "body": "Closes #1289, refs #1212.", "created_at": "2021-04-03T03:34:36Z", "updated_at": "2021-04-03T03:42:29Z", "closed_at": "2021-04-03T03:42:28Z", "merged_at": "2021-04-03T03:42:28Z", "merge_commit_sha": "0a7621f96f8ad14da17e7172e8a7bce24ef78966", "assignee": null, "milestone": null, "draft": 0, "head": "2fb1e4284f1f0f6aaba7e889a6713c0f96e802e1", "base": "59ef4a20cba1533bc347378415f4ffcd025f32c8", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1290", "merged_by": null, "auto_merge": null} {"id": 179108961, "node_id": "MDExOlB1bGxSZXF1ZXN0MTc5MTA4OTYx", "number": 192, "state": "closed", "locked": 0, "title": "New ?_shape=objects/object/lists param for JSON API", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #122", "created_at": "2018-04-03T14:02:58Z", "updated_at": "2018-04-03T14:53:00Z", "closed_at": "2018-04-03T14:52:55Z", "merged_at": "2018-04-03T14:52:55Z", "merge_commit_sha": "0abd3abacb309a2bd5913a7a2df4e9256585b1bb", "assignee": null, "milestone": null, "draft": 0, "head": "a759e09e8599e2cf54f6c5ab4d1cf8adf8608793", "base": "dd0566ff8eda7fa2f0d92e51809581fae62cffed", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/192", "merged_by": null, "auto_merge": null} {"id": 1050417981, "node_id": "PR_kwDOCGYnMM4-nBs9", "number": 486, "state": "closed", "locked": 0, "title": "progressbar for inserts/upserts of all fileformats, closes #485", "user": {"value": 99098079, "label": "MischaU8"}, "body": "\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://sqlite-utils--486.org.readthedocs.build/en/486/\n\r\n", "created_at": "2022-09-08T14:58:02Z", "updated_at": "2022-09-15T20:40:03Z", "closed_at": "2022-09-15T20:37:51Z", "merged_at": "2022-09-15T20:37:51Z", "merge_commit_sha": "0b315d3fa83c1584eaeec32f24912898621e437a", "assignee": null, "milestone": null, "draft": 0, "head": "d5db749480aaf8518e611ff55da186cadf6c63bc", "base": "d9b9e075f07a20f1137cd2e34ed5d3f1a3db4ad8", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/486", "merged_by": null, "auto_merge": null} {"id": 560831638, "node_id": "MDExOlB1bGxSZXF1ZXN0NTYwODMxNjM4", "number": 1206, "state": "closed", "locked": 0, "title": "Release 0.54", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1201", "created_at": "2021-01-25T06:45:47Z", "updated_at": "2021-01-25T17:33:30Z", "closed_at": "2021-01-25T17:33:29Z", "merged_at": "2021-01-25T17:33:29Z", "merge_commit_sha": "0b9ac1b2e9c855f1b823a06a898891da87c720ef", "assignee": null, "milestone": null, "draft": 0, "head": "571476d2cf8f7d7eac6098de8557264e69cac43f", "base": "a5ede3cdd455e2bb1a1fb2f4e1b5a9855caf5179", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1206", "merged_by": null, "auto_merge": null} {"id": 580235427, "node_id": "MDExOlB1bGxSZXF1ZXN0NTgwMjM1NDI3", "number": 241, "state": "open", "locked": 0, "title": "Extract expand - work in progress", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #239. Still needs documentation and CLI implementation.", "created_at": "2021-02-25T16:36:38Z", "updated_at": "2021-02-25T16:36:38Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "0bb6c7a38994627a64e7b3375931528e96b8c222", "assignee": null, "milestone": null, "draft": 1, "head": "8d641ab08ac449081e96f3e25bd6c0226870948a", "base": "38e688fb8bcb58ae888b676fe3f7dd0529b4eecc", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/241", "merged_by": null, "auto_merge": null} {"id": 189860052, "node_id": "MDExOlB1bGxSZXF1ZXN0MTg5ODYwMDUy", "number": 281, "state": "closed", "locked": 0, "title": "Reduces image size using Alpine + Multistage (re: #278)", "user": {"value": 487897, "label": "iMerica"}, "body": "Hey Simon! \r\n\r\nI got the image size down from 256MB to 110MB. \r\n\r\nSeems to be working okay, but you might want to test it a bit more.\r\n\r\nExample output of `docker run --rm -it datasette`\r\n```\r\nServe! files=() on port 8001\r\n[2018-05-23 05:23:08 +0000] [1] [INFO] Goin' Fast @ http://127.0.0.1:8001\r\n[2018-05-23 05:23:08 +0000] [1] [INFO] Starting worker [1]\r\n```\r\n\r\nRelated: https://github.com/simonw/datasette/issues/278\r\n", "created_at": "2018-05-23T05:27:05Z", "updated_at": "2018-05-26T02:10:38Z", "closed_at": "2018-05-26T02:10:38Z", "merged_at": null, "merge_commit_sha": "0d6c8fa841ae5d28e151e4ba43370289d1e2e22c", "assignee": null, "milestone": null, "draft": 0, "head": "3af65075c430d94647f8a1b1f215e82f563bc46f", "base": "49f317752cfe89c5641165a490eef49e025752a7", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/281", "merged_by": null, "auto_merge": null} {"id": 1201985064, "node_id": "PR_kwDOBm6k_c5HpNYo", "number": 1996, "state": "open", "locked": 0, "title": "Document custom json encoder", "user": {"value": 25778, "label": "eyeseast"}, "body": "Closes #1983 \r\n\r\nAll documentation here. Edits welcome.\r\n\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1996.org.readthedocs.build/en/1996/\n\r\n", "created_at": "2023-01-18T16:54:14Z", "updated_at": "2023-01-19T12:55:57Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "0dba13b7c2d434710b794b86c6686cce1d3699d2", "assignee": null, "milestone": null, "draft": 0, "head": "96b8b7f1ecf3abaec5921aaedee251e36eed5339", "base": "6a352e99ab988dbf8fd22a100049caa6ad33f1ec", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1996", "merged_by": null, "auto_merge": null} {"id": 375180832, "node_id": "MDExOlB1bGxSZXF1ZXN0Mzc1MTgwODMy", "number": 672, "state": "open", "locked": 0, "title": "--dirs option for scanning directories for SQLite databases", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #417.", "created_at": "2020-02-14T02:25:52Z", "updated_at": "2020-03-27T01:03:53Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "0e0e544f1f23451f04d7ca576ace5b18ce168e6f", "assignee": null, "milestone": null, "draft": 0, "head": "ee718b98b793df2a15b125cbf20816c9864bf7e9", "base": "6aa516d82dea9885cb4db8d56ec2ccfd4cd9b840", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/672", "merged_by": null, "auto_merge": null} {"id": 543015825, "node_id": "MDExOlB1bGxSZXF1ZXN0NTQzMDE1ODI1", "number": 31, "state": "open", "locked": 0, "title": "Update for Big Sur", "user": {"value": 41546558, "label": "RhetTbull"}, "body": "Refactored out the SQL for extracting aesthetic scores to use osxphotos -- adds compatbility for Big Sur via osxphotos which has been updated for new table names in Big Sur. Have not yet refactored the SQL for extracting labels which is still compatible with Big Sur.", "created_at": "2020-12-20T04:36:45Z", "updated_at": "2023-04-14T22:41:31Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "0e571b07430024d4ce00d5e8ba28591cefd27d6f", "assignee": null, "milestone": null, "draft": 0, "head": "39c12f8cda206ad621ec9940cce538570513e764", "base": "edc80a0d361006f478f2904a90bfe6c730ed6194", "author_association": "CONTRIBUTOR", "repo": {"value": 256834907, "label": "dogsheep-photos"}, "url": "https://github.com/dogsheep/dogsheep-photos/pull/31", "merged_by": null, "auto_merge": null} {"id": 1220379312, "node_id": "PR_kwDOBm6k_c5IvYKw", "number": 2008, "state": "open", "locked": 0, "title": "array facet: don't materialize unnecessary columns", "user": {"value": 193185, "label": "cldellow"}, "body": "The presence of `inner.*` causes SQLite to materialize a row with all the columns. Those columns will be discarded later.\r\n\r\nInstead, we can select only the column we'll use. This lets SQLite's optimizer realize that the other columns in the CTE definition aren't needed.\r\n\r\nOn a test table with 278K rows, 98K of which had an array, this speeds up the facet calculation from 4 sec to 1 sec.\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--2008.org.readthedocs.build/en/2008/\n\r\n", "created_at": "2023-01-28T19:33:40Z", "updated_at": "2023-01-29T18:17:40Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "0eda5a57ead9bda8be4c9e5cd2fdb9f22e69222e", "assignee": null, "milestone": null, "draft": 0, "head": "f529a3001d35a114d2e622dcc7913c4c25a95ed8", "base": "0b4a28691468b5c758df74fa1d72a823813c96bf", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2008", "merged_by": null, "auto_merge": null} {"id": 621117978, "node_id": "MDExOlB1bGxSZXF1ZXN0NjIxMTE3OTc4", "number": 1306, "state": "closed", "locked": 0, "title": "Avoid error sorting by relationships if related tables are not allowed", "user": {"value": 416374, "label": "gfrmin"}, "body": "Refs #1305", "created_at": "2021-04-22T13:53:17Z", "updated_at": "2021-06-02T04:27:00Z", "closed_at": "2021-06-02T04:25:28Z", "merged_at": "2021-06-02T04:25:28Z", "merge_commit_sha": "0f41db1ba8a8a49a4adc1046a25ccf32790e863f", "assignee": null, "milestone": null, "draft": 0, "head": "115332ce76c0e867d9936406aaf4bcee6b1ef3cb", "base": "6ed9238178a56da5fb019f37fb1e1e15886be1d1", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1306", "merged_by": null, "auto_merge": null} {"id": 726990680, "node_id": "MDExOlB1bGxSZXF1ZXN0NzI2OTkwNjgw", "number": 35, "state": "open", "locked": 0, "title": "Support for Datasette's --base-url setting", "user": {"value": 2670795, "label": "brandonrobertz"}, "body": "This makes it so you can use Dogsheep if you're using Datasette with the `--base-url /some-path/` setting.", "created_at": "2021-09-03T17:47:45Z", "updated_at": "2021-09-03T17:47:45Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "0f5931da2099303111c49ec726b78bae814f755e", "assignee": null, "milestone": null, "draft": 0, "head": "e6679d287b2e97fc94f50da64e1a7b91c1fbbf67", "base": "a895bc360f2738c7af43deda35c847f1ee5bff51", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 197431109, "label": "dogsheep-beta"}, "url": "https://github.com/dogsheep/dogsheep-beta/pull/35", "merged_by": null, "auto_merge": null} {"id": 677554929, "node_id": "MDExOlB1bGxSZXF1ZXN0Njc3NTU0OTI5", "number": 293, "state": "closed", "locked": 0, "title": "Test against Python 3.10-dev", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2021-06-25T01:40:39Z", "updated_at": "2021-10-13T21:49:33Z", "closed_at": "2021-10-13T21:49:33Z", "merged_at": null, "merge_commit_sha": "0f64d20b044ecb86d9e4e5843f9590006d2f39c2", "assignee": null, "milestone": null, "draft": 0, "head": "ae0f46a78958c0118e98c2ab18bd1b57a0478326", "base": "747be6057d09a4e5d9d726e29d5cf99b10c59dea", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/293", "merged_by": null, "auto_merge": null} {"id": 727436404, "node_id": "MDExOlB1bGxSZXF1ZXN0NzI3NDM2NDA0", "number": 1458, "state": "closed", "locked": 0, "title": "Rework the `--static` documentation a bit", "user": {"value": 51016, "label": "ctb"}, "body": "Per https://github.com/simonw/datasette/issues/1457, I was confused by the current docs and took a few minutes to sort out what the right combination of locations was.\r\n\r\nThis is a PR that differentiates the docs to split out `/static/` in URL from `--static` option and `./static/` path.\r\n\r\nNot wedded to the details in any way, happy to change to suit.\r\n\r\nFixes #1457.", "created_at": "2021-09-05T17:08:48Z", "updated_at": "2021-10-15T13:24:29Z", "closed_at": "2021-10-14T18:39:55Z", "merged_at": "2021-10-14T18:39:55Z", "merge_commit_sha": "0fdbf004843850f200e077a3c87427fe16c18b85", "assignee": null, "milestone": null, "draft": 0, "head": "e00c3a274d073c09707f4b6edd2ed652efe03918", "base": "d57ab156b35ec642549fb69d08279850065027d2", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1458", "merged_by": null, "auto_merge": null} {"id": 1034485141, "node_id": "PR_kwDOCGYnMM49qP2V", "number": 468, "state": "closed", "locked": 0, "title": "db[table].create(..., transform=True) and create-table --transform", "user": {"value": 9599, "label": "simonw"}, "body": "Work in progress. Still needs documentation and tests (and to cover more cases of things that might have changed).\r\n\r\nRefs:\r\n- #467\r\n\r\n\r\n----\r\n:books: Documentation preview :books:: https://sqlite-utils--468.org.readthedocs.build/en/468/\r\n\r\n", "created_at": "2022-08-23T17:27:58Z", "updated_at": "2022-08-27T23:17:55Z", "closed_at": "2022-08-27T23:17:55Z", "merged_at": "2022-08-27T23:17:55Z", "merge_commit_sha": "104f37fa4d2e7e5999c1d829267b62c737f74d3e", "assignee": null, "milestone": {"value": 8355157, "label": "3.29"}, "draft": 0, "head": "2f6a64f61d561df821d737719941c678dcb1a03c", "base": "c5f8a2eb1a81a18b52825cc649112f71fe419b12", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/468", "merged_by": null, "auto_merge": null} {"id": 407929128, "node_id": "MDExOlB1bGxSZXF1ZXN0NDA3OTI5MTI4", "number": 734, "state": "closed", "locked": 0, "title": "Update janus requirement from ~=0.4.0 to >=0.4,<0.6", "user": {"value": 27856297, "label": "dependabot-preview[bot]"}, "body": "Updates the requirements on [janus](https://github.com/aio-libs/janus) to permit the latest version.\n
\nChangelog\n

Sourced from janus's changelog.

\n
\n

0.5.0 (2020-04-23)

\n
    \n
  • Remove explicit loop arguments and forbid creating queues outside event loops #246
  • \n
\n

0.4.0 (2018-07-28)

\n
    \n
  • Add py.typed macro #89
  • \n
  • Drop python 3.4 support and fix minimal version python3.5.3 #88
  • \n
  • Add property with that indicates if queue is closed #86
  • \n
\n

0.3.2 (2018-07-06)

\n
    \n
  • Fixed python 3.7 support #97
  • \n
\n

0.3.1 (2018-01-30)

\n
    \n
  • Fixed bug with join() in case tasks are added by sync_q.put() #75
  • \n
\n

0.3.0 (2017-02-21)

\n
    \n
  • Expose unfinished_tasks property #34
  • \n
\n

0.2.4 (2016-12-05)

\n
    \n
  • Restore tarball deploying
  • \n
\n

0.2.3 (2016-07-12)

\n
    \n
  • Fix exception type
  • \n
\n

0.2.2 (2016-07-11)

\n
    \n
  • Update asyncio.async() to use asyncio.ensure_future() #6
  • \n
\n

0.2.1 (2016-03-24)

\n
    \n
  • Fix python setup.py test command #4
  • \n
\n

0.2.0 (2015-09-20)

\n ... (truncated)\n
\n
\n
\nCommits\n
    \n
  • 8e89b45 Bump to 0.5.0
  • \n
  • ec8592b Fix up Python 3.8 loop argument warnings (#246)
  • \n
  • 2543af6 Bump coverage from 5.0.4 to 5.1
  • \n
  • 03d1b36 Bump tox from 3.14.5 to 3.14.6
  • \n
  • 8219c38 Bump coverage from 5.0.3 to 5.0.4
  • \n
  • 85ec71d Bump pytest from 5.4.0 to 5.4.1
  • \n
  • 3b974c9 Bump pytest from 5.3.5 to 5.4.0
  • \n
  • 282dc12 Bump mypy from 0.761 to 0.770
  • \n
  • 1364fb3 Bump tox from 3.14.4 to 3.14.5
  • \n
  • dc519bb Bump tox from 3.14.3 to 3.14.4
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language\n- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language\n- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language\n- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language\n- `@dependabot badge me` will comment on this PR with code to add a \"Dependabot enabled\" badge to your readme\n\nAdditionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com):\n- Update frequency (including time of day and day of week)\n- Pull request limits (per update run and/or open at any time)\n- Out-of-range updates (receive only lockfile updates, if desired)\n- Security updates (receive only security updates, if desired)\n\n\n\n
", "created_at": "2020-04-23T13:43:45Z", "updated_at": "2020-05-04T16:48:14Z", "closed_at": "2020-05-04T16:48:04Z", "merged_at": "2020-05-04T16:48:04Z", "merge_commit_sha": "109c5a430d53fe38b1300e0daa20f5cef047a08e", "assignee": null, "milestone": null, "draft": 0, "head": "281b2c1acf1a2ef39c784dc73f1eb184d898d369", "base": "e232f77055880b38cc0b738607cd50cde9188eaf", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/734", "merged_by": null, "auto_merge": null} {"id": 624635440, "node_id": "MDExOlB1bGxSZXF1ZXN0NjI0NjM1NDQw", "number": 1309, "state": "closed", "locked": 0, "title": "Bump black from 20.8b1 to 21.4b0", "user": {"value": 27856297, "label": "dependabot-preview[bot]"}, "body": "Bumps [black](https://github.com/psf/black) from 20.8b1 to 21.4b0.\n
\nRelease notes\n

Sourced from black's releases.

\n
\n

21.4b0

\n

Black

\n
    \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

    use lowercase hex strings (#1692)

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

    speed up caching by avoiding pathlib (#1950)

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
\n\n
\n

... (truncated)

\n
\n
\nChangelog\n

Sourced from black's changelog.

\n
\n

21.4b0

\n

Black

\n
    \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

    speed up caching by avoiding pathlib (#1950)

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
\n\n
\n

... (truncated)

\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://api.dependabot.com/badges/compatibility_score?dependency-name=black&package-manager=pip&previous-version=20.8b1&new-version=21.4b0)](https://dependabot.com/compatibility-score/?dependency-name=black&package-manager=pip&previous-version=20.8b1&new-version=21.4b0)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language\n- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language\n- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language\n- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language\n- `@dependabot badge me` will comment on this PR with code to add a \"Dependabot enabled\" badge to your readme\n\nAdditionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com):\n- Update frequency (including time of day and day of week)\n- Pull request limits (per update run and/or open at any time)\n- Out-of-range updates (receive only lockfile updates, if desired)\n- Security updates (receive only security updates, if desired)\n\n\n\n
", "created_at": "2021-04-27T20:28:11Z", "updated_at": "2021-04-28T18:26:06Z", "closed_at": "2021-04-28T18:26:04Z", "merged_at": null, "merge_commit_sha": "1220c60d8a6bb8e621543ef78d669a2bccc2a3c8", "assignee": null, "milestone": null, "draft": 0, "head": "20fc3fe2797b81a23cd464c1450d13086d53ea7f", "base": "a4bb2abce0764d49d255e5379f9e9c70981834ca", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1309", "merged_by": null, "auto_merge": null} {"id": 505453900, "node_id": "MDExOlB1bGxSZXF1ZXN0NTA1NDUzOTAw", "number": 1030, "state": "open", "locked": 0, "title": "Make `package` command deal with a configuration directory argument", "user": {"value": 299380, "label": "frankier"}, "body": "Currently if we run `datasette package` on a configuration directory we'll get an exception when we try to hard link to the directory. This PR copies the tree and makes the Dockerfile run inspect on all *.db files.", "created_at": "2020-10-18T11:07:02Z", "updated_at": "2020-10-19T08:01:51Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "124142e4d2710525b09ff2bd2a7a787cbed163a4", "assignee": null, "milestone": null, "draft": 0, "head": "e0825334692967fec195e104cb6aa11095807a8e", "base": "c37a0a93ecb847e66cfe7b6f9452ba210fcae91b", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1030", "merged_by": null, "auto_merge": null} {"id": 817257851, "node_id": "PR_kwDOCGYnMM4wtl17", "number": 377, "state": "closed", "locked": 0, "title": "`sqlite-utils bulk` command", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #375\r\n\r\nStill needs:\r\n\r\n- [x] Refactor `@insert_upsert_options` so that it doesn't duplicate `@import_options`\r\n- [x] Tests\r\n- [x] Documentation\r\n- [x] Try it against a really big file", "created_at": "2022-01-10T05:34:24Z", "updated_at": "2022-01-11T02:10:57Z", "closed_at": "2022-01-11T02:10:54Z", "merged_at": "2022-01-11T02:10:54Z", "merge_commit_sha": "129141572f249ea290e2a075437e2ebaad215859", "assignee": null, "milestone": {"value": 7558727, "label": "3.21"}, "draft": 0, "head": "f4ea0d32c0543373eefaa9b9f3911eb07549eecb", "base": "b6dad08a8389736b7e960cfe9bc719cfc21a98f5", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/377", "merged_by": null, "auto_merge": null} {"id": 327169748, "node_id": "MDExOlB1bGxSZXF1ZXN0MzI3MTY5NzQ4", "number": 589, "state": "closed", "locked": 0, "title": "Display metadata footer on custom SQL queries", "user": {"value": 2657547, "label": "rixx"}, "body": "Closes #408", "created_at": "2019-10-11T12:10:28Z", "updated_at": "2019-10-14T08:58:23Z", "closed_at": "2019-10-14T03:53:22Z", "merged_at": "2019-10-14T03:53:22Z", "merge_commit_sha": "12cec411cae73ba7211429da12cd32c551fe17b1", "assignee": null, "milestone": null, "draft": 0, "head": "5627fe8d58e791e004b89b5614007d5e64a5c8e2", "base": "fffd69ec031b83f46680f192ba57a27f0d1f0b8a", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/589", "merged_by": null, "auto_merge": null} {"id": 181247568, "node_id": "MDExOlB1bGxSZXF1ZXN0MTgxMjQ3NTY4", "number": 202, "state": "closed", "locked": 0, "title": "Raise 404 on nonexistent table URLs", "user": {"value": 45057, "label": "russss"}, "body": "Currently they just 500. Also cleaned the logic up a bit, I hope I didn't miss anything.\r\n\r\nThis is issue #184.", "created_at": "2018-04-12T15:47:06Z", "updated_at": "2018-04-13T19:22:56Z", "closed_at": "2018-04-13T18:19:15Z", "merged_at": null, "merge_commit_sha": "134150933ade84327cfd97a88d536f5bff37a136", "assignee": null, "milestone": null, "draft": 0, "head": "71bbf4e4be8a9ab7bcc4ddfb33760c7d902f4a34", "base": "bfb4e45a7bcb880758dbc18f66258de26c1d1904", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/202", "merged_by": null, "auto_merge": null} {"id": 181723303, "node_id": "MDExOlB1bGxSZXF1ZXN0MTgxNzIzMzAz", "number": 209, "state": "closed", "locked": 0, "title": " Don't duplicate simple primary keys in the link column", "user": {"value": 45057, "label": "russss"}, "body": "When there's a simple (single-column) primary key, it looks weird to duplicate it in the link column.\r\n\r\nThis change removes the second PK column and treats the link column as if it were the PK column from a header/sorting perspective. \r\n\r\nThis might make it a bit more difficult to tell what the link for the row is, I'm not sure yet. I feel like the alternative is to change the link column to just have the text \"view\" or something, instead of repeating the PK. (I doubt it makes much more sense with compound PKs.)\r\n\r\nBonus change in this PR: fix urlencoding of links in the displayed HTML.\r\n\r\nBefore:\r\n![image](https://user-images.githubusercontent.com/45057/38783830-e2ababb4-40ff-11e8-97fb-25e286a8c920.png)\r\n\r\nAfter:\r\n![image](https://user-images.githubusercontent.com/45057/38783835-ebf6b48e-40ff-11e8-8c47-6a864cf21ccc.png)", "created_at": "2018-04-15T21:56:15Z", "updated_at": "2018-04-18T08:40:37Z", "closed_at": "2018-04-18T01:13:04Z", "merged_at": "2018-04-18T01:13:04Z", "merge_commit_sha": "136a70d88741e2a5892c3de437064a9d14494d66", "assignee": null, "milestone": null, "draft": 0, "head": "4acde4e187795214af6fc86f46af48982ec5de46", "base": "bf5ec2d61148f9852441934dd206b3b1c07a512f", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/209", "merged_by": null, "auto_merge": null} {"id": 893040042, "node_id": "PR_kwDOBm6k_c41OrWq", "number": 1694, "state": "closed", "locked": 0, "title": "Update click requirement from <8.1.0,>=7.1.1 to >=7.1.1,<8.2.0", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Updates the requirements on [click](https://github.com/pallets/click) to permit the latest version.\n
\nRelease notes\n

Sourced from click's releases.

\n
\n

8.1.0

\n

This is a feature release, which includes new features and removes previously deprecated features. The 8.1.x branch is now the supported bugfix branch, the 8.0.x branch will become a tag marking the end of support for that branch. We encourage everyone to upgrade, and to use a tool such as pip-tools to pin all dependencies and control upgrades.

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

Sourced from click's changelog.

\n
\n

Version 8.1.0

\n

Released 2022-03-28

\n
    \n
  • \n

    Drop support for Python 3.6. :pr:2129

    \n
  • \n
  • \n

    Remove previously deprecated code. :pr:2130

    \n
      \n
    • Group.resultcallback is renamed to result_callback.
    • \n
    • autocompletion parameter to Command is renamed to\nshell_complete.
    • \n
    • get_terminal_size is removed, use\nshutil.get_terminal_size instead.
    • \n
    • get_os_args is removed, use sys.argv[1:] instead.
    • \n
    \n
  • \n
  • \n

    Rely on :pep:538 and :pep:540 to handle selecting UTF-8 encoding\ninstead of ASCII. Click's locale encoding detection is removed.\n:issue:2198

    \n
  • \n
  • \n

    Single options boolean flags with show_default=True only show\nthe default if it is True. :issue:1971

    \n
  • \n
  • \n

    The command and group decorators can be applied with or\nwithout parentheses. :issue:1359

    \n
  • \n
  • \n

    The Path type can check whether the target is executable.\n:issue:1961

    \n
  • \n
  • \n

    Command.show_default overrides Context.show_default, instead\nof the other way around. :issue:1963

    \n
  • \n
  • \n

    Parameter decorators and @group handles cls=None the same as\nnot passing cls. @option handles help=None the same as\nnot passing help. :issue:[#1959](https://github.com/pallets/click/issues/1959)

    \n
  • \n
  • \n

    A flag option with required=True requires that the flag is\npassed instead of choosing the implicit default value. :issue:1978

    \n
  • \n
  • \n

    Indentation in help text passed to Option and Command is\ncleaned the same as using the @option and @command\ndecorators does. A command's epilog and short_help are also\nprocessed. :issue:1985

    \n
  • \n
  • \n

    Store unprocessed Command.help, epilog and short_help\nstrings. Processing is only done when formatting help text for\noutput. :issue:2149

    \n
  • \n
  • \n

    Allow empty str input for prompt() when\nconfirmation_prompt=True and default="". :issue:2157

    \n
  • \n
  • \n

    Windows glob pattern expansion doesn't fail if a value is an invalid\npattern. :issue:2195

    \n
  • \n
  • \n

    It's possible to pass a list of params to @command. Any\nparams defined with decorators are appended to the passed params.\n:issue:2131.

    \n
  • \n
  • \n

    @command decorator is annotated as returning the correct type if\na cls argument is used. :issue:2211

    \n
  • \n
  • \n

    A Group with invoke_without_command=True and chain=False\nwill invoke its result callback with the group function's return\nvalue. :issue:2124

    \n
  • \n
\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • e4aceee Merge pull request #2224 from pallets/release-8.1.0
  • \n
  • f8d811e release version 8.1.0
  • \n
  • 20c88f0 Merge pull request #2223 from pallets/env-var
  • \n
  • 8d7f03d treat empty auto_envvar as None
  • \n
  • ef11be6 Merge pull request #2041 from spanglerco/shell-completion-option-values
  • \n
  • f2e579a shell completion prioritizes option values over new options
  • \n
  • d251cb0 Merge pull request #2219 from pallets/paramtype-name
  • \n
  • e003331 fix ParamType.to_info_dict() with no name
  • \n
  • 19be092 Merge pull request #2217 from pallets/group-return
  • \n
  • 7d3a871 group without command passes return value to result callback
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", "created_at": "2022-03-29T13:11:23Z", "updated_at": "2022-04-08T23:05:10Z", "closed_at": "2022-04-08T23:05:09Z", "merged_at": "2022-04-08T23:05:09Z", "merge_commit_sha": "138e4d9a53e3982137294ba383303c3a848cfca4", "assignee": null, "milestone": null, "draft": 0, "head": "83ff96792fd670ed32a1a61d38529959170c7309", "base": "e73fa72917ca28c152208d62d07a490c81cadf52", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1694", "merged_by": null, "auto_merge": null} {"id": 1047561919, "node_id": "PR_kwDODFdgUs4-cIa_", "number": 76, "state": "open", "locked": 0, "title": "Add organization support to repos command", "user": {"value": 2757699, "label": "OverkillGuy"}, "body": "New --organization flag to signify all given \"usernames\" are private\r\norgs. Adapts API URL to the organization path instead.\r\n\r\nNot the best implementation, but a first draft to talk around\r\n\r\nFixes #75 (badly, no tests, overly vague, untested)", "created_at": "2022-09-06T13:21:42Z", "updated_at": "2022-09-06T13:59:08Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "1514acfa87f57261547bc3d7fc4f161e34285d76", "assignee": null, "milestone": null, "draft": 0, "head": "bb959b46e8a7647755c14dee180fdd5209451954", "base": "ace13ec3d98090d99bd71871c286a4a612c96a50", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 207052882, "label": "github-to-sqlite"}, "url": "https://github.com/dogsheep/github-to-sqlite/pull/76", "merged_by": null, "auto_merge": null} {"id": 730020867, "node_id": "MDExOlB1bGxSZXF1ZXN0NzMwMDIwODY3", "number": 1467, "state": "closed", "locked": 0, "title": "Add Authorization header when CORS flag is set", "user": {"value": 3058200, "label": "jameslittle230"}, "body": "This PR adds the [`Access-Control-Allow-Headers`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers) flag when CORS mode is enabled.\r\n\r\nThis would fix https://github.com/simonw/datasette-auth-tokens/issues/4. When making cross-origin requests, the server must respond with all allowable HTTP headers. A Datasette instance using auth tokens must accept the `Authorization` HTTP header in order for cross-origin authenticated requests to take place.\r\n\r\nPlease let me know if there's a better way of doing this! I couldn't figure out a way to change the app's response from the plugin itself, so I'm starting here. If you'd rather this logic live in the plugin, I'd love any guidance you're able to give.", "created_at": "2021-09-08T22:14:41Z", "updated_at": "2021-10-17T02:29:07Z", "closed_at": "2021-10-14T18:54:18Z", "merged_at": null, "merge_commit_sha": "15f258735ddee555028a075c09e1e8f74069be70", "assignee": null, "milestone": null, "draft": 0, "head": "05109e8d61dedd477c4cedfb89b1da65610f70d1", "base": "d57ab156b35ec642549fb69d08279850065027d2", "author_association": "NONE", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1467", "merged_by": null, "auto_merge": null} {"id": 592364255, "node_id": "MDExOlB1bGxSZXF1ZXN0NTkyMzY0MjU1", "number": 16, "state": "open", "locked": 0, "title": "Add a fallback ID, print if no ID found", "user": {"value": 1234956, "label": "n8henrie"}, "body": "Fixes https://github.com/dogsheep/healthkit-to-sqlite/issues/14\n", "created_at": "2021-03-13T13:38:29Z", "updated_at": "2021-03-13T14:44:04Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "16ab307b2138891f226a66e4954c5470de753a0f", "assignee": null, "milestone": null, "draft": 0, "head": "27b3d54ccfe7d861770a9d0b173f6503580fea4a", "base": "71e36e1cf034b96de2a8e6652265d782d3fdf63b", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 197882382, "label": "healthkit-to-sqlite"}, "url": "https://github.com/dogsheep/healthkit-to-sqlite/pull/16", "merged_by": null, "auto_merge": null} {"id": 1289476973, "node_id": "PR_kwDOBm6k_c5M29tt", "number": 2044, "state": "open", "locked": 0, "title": "Expand labels in row view as well (patch for 0.64.x branch)", "user": {"value": 82332573, "label": "tmcl-it"}, "body": "This is a version of #2031 for the 0.64.x branch.\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--2044.org.readthedocs.build/en/2044/\n\r\n", "created_at": "2023-03-24T18:44:44Z", "updated_at": "2023-03-24T18:44:57Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "175202f5238c23fc6b76a0119d3ce9917d1570d1", "assignee": null, "milestone": null, "draft": 0, "head": "c039d23a730448a7d82f9239cfb445aa1f7a4f16", "base": "2a0a94fe972e4b1556e73026dc381d297bc906bc", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2044", "merged_by": null, "auto_merge": null} {"id": 529887861, "node_id": "MDExOlB1bGxSZXF1ZXN0NTI5ODg3ODYx", "number": 1120, "state": "closed", "locked": 0, "title": "generated_columns table in fixtures.py", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1119", "created_at": "2020-12-01T00:17:19Z", "updated_at": "2020-12-01T00:28:03Z", "closed_at": "2020-12-01T00:28:02Z", "merged_at": "2020-12-01T00:28:02Z", "merge_commit_sha": "17cbbb1f7f230b39650afac62dd16476626001b5", "assignee": null, "milestone": null, "draft": 0, "head": "ddad8db2cc952eaf4f66f42324ccece115627b02", "base": "461670a0b87efa953141b449a9a261919864ceb3", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1120", "merged_by": null, "auto_merge": null} {"id": 893039755, "node_id": "PR_kwDOBm6k_c41OrSL", "number": 1693, "state": "closed", "locked": 0, "title": "Bump black from 22.1.0 to 22.3.0", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [black](https://github.com/psf/black) from 22.1.0 to 22.3.0.\n
\nRelease notes\n

Sourced from black's releases.

\n
\n

22.3.0

\n

Preview style

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

Configuration

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

Documentation

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

Integrations

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

Output

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

Packaging

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

Parser

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

Sourced from black's changelog.

\n
\n

22.3.0

\n

Preview style

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

Configuration

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

Documentation

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

Integrations

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

Output

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

Packaging

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

Parser

\n
    \n
  • Black can now parse starred expressions in the target of for and async for\nstatements, e.g for item in *items_1, *items_2: pass (#2879).
  • \n
\n
\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=black&package-manager=pip&previous-version=22.1.0&new-version=22.3.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", "created_at": "2022-03-29T13:11:09Z", "updated_at": "2022-06-28T13:11:38Z", "closed_at": "2022-06-28T13:11:36Z", "merged_at": null, "merge_commit_sha": "17e058e286104e9b9180df72c61eb9218f376c4d", "assignee": null, "milestone": null, "draft": 0, "head": "ec2d1e47dc39dd1db2048cd0a001aa9e4be20812", "base": "1d33fd03b3c211e0f48a8f3bde83880af89e4e69", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1693", "merged_by": null, "auto_merge": null} {"id": 512736705, "node_id": "MDExOlB1bGxSZXF1ZXN0NTEyNzM2NzA1", "number": 1065, "state": "closed", "locked": 0, "title": "Nav menu plus menu_links() hook", "user": {"value": 9599, "label": "simonw"}, "body": "Closes #1064, refs #690.", "created_at": "2020-10-30T03:40:18Z", "updated_at": "2020-10-30T03:45:17Z", "closed_at": "2020-10-30T03:45:16Z", "merged_at": "2020-10-30T03:45:16Z", "merge_commit_sha": "18a64fbb29271ce607937110bbdb55488c43f4e0", "assignee": null, "milestone": {"value": 6026070, "label": "0.51"}, "draft": 0, "head": "5f118b56afbeff5348acd50a8b87537210e731ee", "base": "1a861be19e326e0c88230a711a1b6536366697d7", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1065", "merged_by": null, "auto_merge": null} {"id": 1266742462, "node_id": "PR_kwDOBm6k_c5LgPS-", "number": 2034, "state": "open", "locked": 0, "title": "remove an unused `app` var in cli.py", "user": {"value": 4370201, "label": "wenhoujx"}, "body": "this var `app` isn't actually used? unless init it does some side-effect outside of the event loop, idon't think it's necessary. \r\n\r\nFeel free to ignore this PR if the deleted line actually does something.\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--2034.org.readthedocs.build/en/2034/\n\r\n", "created_at": "2023-03-07T18:19:05Z", "updated_at": "2023-03-29T20:56:20Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "18da9ae95a86c4191b1e20d74c50c8ac89312447", "assignee": null, "milestone": null, "draft": 0, "head": "28239c5bed362f2b9ee9e780bf23e5f31b680b5d", "base": "1ad92a1d87d79084ebe524ed186c900ff042328c", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2034", "merged_by": null, "auto_merge": null} {"id": 250628275, "node_id": "MDExOlB1bGxSZXF1ZXN0MjUwNjI4Mjc1", "number": 407, "state": "closed", "locked": 0, "title": "Heroku --include-vcs-ignore", "user": {"value": 9599, "label": "simonw"}, "body": "Should mean `datasette publish heroku` can work under Travis, unlike this failure:\r\n\r\nhttps://travis-ci.org/simonw/fivethirtyeight-datasette/builds/488047550\r\n\r\n```\r\n2.25s$ datasette publish heroku fivethirtyeight.db -m metadata.json -n fivethirtyeight-datasette\r\ntar: unrecognized option '--exclude-vcs-ignores'\r\nTry 'tar --help' or 'tar --usage' for more information.\r\n \u25b8 Command failed: tar cz -C /tmp/tmpuaxm7i8f --exclude-vcs-ignores --exclude\r\n \u25b8 .git --exclude .gitmodules . >\r\n \u25b8 /tmp/f49440e0-1bf3-4d3f-9eb0-fbc2967d1fd4.tar.gz\r\n \u25b8 tar: unrecognized option '--exclude-vcs-ignores'\r\n \u25b8 Try 'tar --help' or 'tar --usage' for more information.\r\n \u25b8 \r\nThe command \"datasette publish heroku fivethirtyeight.db -m metadata.json -n fivethirtyeight-datasette\" exited with 0.\r\n```\r\n\r\nThe fix for that issue is to call the heroku command like this:\r\n\r\n heroku builds:create -a app_name --include-vcs-ignore\r\n\r\n", "created_at": "2019-02-06T04:06:20Z", "updated_at": "2019-02-06T04:31:30Z", "closed_at": "2019-02-06T04:15:47Z", "merged_at": "2019-02-06T04:15:46Z", "merge_commit_sha": "195a5b36349d0d24a6bbb758cebb719b6de303b6", "assignee": null, "milestone": null, "draft": 0, "head": "01978ddb9682c828cafddaf9ca625e08ba3ba3a4", "base": "436b8bc1d17c2ab415800ab209204f94e7f7929e", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/407", "merged_by": null, "auto_merge": null} {"id": 1038565427, "node_id": "PR_kwDOCGYnMM4950Az", "number": 473, "state": "closed", "locked": 0, "title": "Support entrypoints for `--load-extension`", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #470\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://sqlite-utils--473.org.readthedocs.build/en/473/\n\r\n", "created_at": "2022-08-27T05:53:59Z", "updated_at": "2022-08-27T05:55:52Z", "closed_at": "2022-08-27T05:55:47Z", "merged_at": "2022-08-27T05:55:47Z", "merge_commit_sha": "19dd077944429c1365b513d80cc71c605ae3bed3", "assignee": null, "milestone": null, "draft": 0, "head": "72db599ae03fabe2e9f999999e258edc1a99ed59", "base": "a46a5e3a9e03dcdd8c84a92e4a5dbfa02ba461fa", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/473", "merged_by": null, "auto_merge": null} {"id": 1179812620, "node_id": "PR_kwDODEm0Qs5GUoMM", "number": 69, "state": "open", "locked": 0, "title": "Archive: Import new tweets table name", "user": {"value": 26161409, "label": "sometimes-i-send-pull-requests"}, "body": "Given the code here, it seems like in the past this file was named \"tweet.js\". In recent exports, it's named \"tweets.js\". The archive importer needs to be modified to take this into account. Existing logic is reused for importing this table. (However, the resulting table name will be different, matching the different file name -- archive_tweets, rather than archive_tweet).", "created_at": "2022-12-28T23:32:44Z", "updated_at": "2022-12-28T23:32:44Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "1a8c02a8d349c8fd4074139a6a3eed552676bdf3", "assignee": null, "milestone": null, "draft": 0, "head": "11e8fa64ca30cebde047a4268e65f376c42e2b60", "base": "f09d611782a8372cfb002792dfa727325afb4db6", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 206156866, "label": "twitter-to-sqlite"}, "url": "https://github.com/dogsheep/twitter-to-sqlite/pull/69", "merged_by": null, "auto_merge": null} {"id": 285698310, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjg1Njk4MzEw", "number": 501, "state": "closed", "locked": 0, "title": "Test against Python 3.8-dev using Travis", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2019-06-06T08:37:53Z", "updated_at": "2019-11-11T03:23:29Z", "closed_at": "2019-11-11T03:23:29Z", "merged_at": null, "merge_commit_sha": "1aac0cf0ab962060dd5cff19b8b179bb7fa0f00b", "assignee": null, "milestone": null, "draft": 0, "head": "a5defb684fcc734f6325ca08beef9f49c3e7a298", "base": "5e8fbf7f6fbc0b63d0479da3806dd9ccd6aaa945", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/501", "merged_by": null, "auto_merge": null} {"id": 837498489, "node_id": "PR_kwDOBm6k_c4x6zZ5", "number": 1617, "state": "closed", "locked": 0, "title": "Ensure template_path always uses \"/\" to match jinja", "user": {"value": 3526913, "label": "cb160"}, "body": "This PR shoudl fix #1545 \r\n\r\nThe existing code substituted / for \\, assuming this was the right behaviour for windows. But on Windows, Jinja still uses / for the template list - See https://github.com/pallets/jinja/blob/896a62135bcc151f2997e028c5125bec2cb2431f/src/jinja2/loaders.py#L225", "created_at": "2022-02-01T17:20:30Z", "updated_at": "2022-02-03T01:58:35Z", "closed_at": "2022-02-03T01:58:35Z", "merged_at": "2022-02-03T01:58:35Z", "merge_commit_sha": "1af1041f91a9b91b321078d354132d1df5204660", "assignee": null, "milestone": null, "draft": 0, "head": "af293c960e67b14ebd8ec7517b698803606fae96", "base": "2aa686c6554bf6b8230eb5b3019574df6cc99225", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1617", "merged_by": null, "auto_merge": null} {"id": 153432045, "node_id": "MDExOlB1bGxSZXF1ZXN0MTUzNDMyMDQ1", "number": 118, "state": "closed", "locked": 0, "title": "Foreign key information on row and table pages", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2017-11-18T03:13:27Z", "updated_at": "2017-11-18T03:15:57Z", "closed_at": "2017-11-18T03:15:50Z", "merged_at": "2017-11-18T03:15:50Z", "merge_commit_sha": "1b04662585ea1539014bfbd616a8112b650d5699", "assignee": null, "milestone": null, "draft": 0, "head": "2fa60bc5e3c9d75c19e21a2384f52b58e1872fa8", "base": "6d39429daa4655e3cf7a6a7671493292a20a30a1", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/118", "merged_by": null, "auto_merge": null} {"id": 626130135, "node_id": "MDExOlB1bGxSZXF1ZXN0NjI2MTMwMTM1", "number": 1313, "state": "closed", "locked": 0, "title": "Bump black from 20.8b1 to 21.4b2", "user": {"value": 27856297, "label": "dependabot-preview[bot]"}, "body": "Bumps [black](https://github.com/psf/black) from 20.8b1 to 21.4b2.\n
\nRelease notes\n

Sourced from black's releases.

\n
\n

21.4b2

\n

Black

\n
    \n
  • \n

    Fix crash if the user configuration directory is inaccessible. (#2158)

    \n
  • \n
  • \n

    Clarify\ncircumstances\nin which Black may change the AST (#2159)

    \n
  • \n
\n

Packaging

\n
    \n
  • Install primer.json (used by black-primer by default) with black. (#2154)
  • \n
\n

21.4b1

\n

Black

\n
    \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
\n

Packaging

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

21.4b0

\n

Black

\n
    \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
\n\n
\n

... (truncated)

\n
\n
\nChangelog\n

Sourced from black's changelog.

\n
\n

21.4b2

\n

Black

\n
    \n
  • \n

    Fix crash if the user configuration directory is inaccessible. (#2158)

    \n
  • \n
  • \n

    Clarify\ncircumstances\nin which Black may change the AST (#2159)

    \n
  • \n
\n

Packaging

\n
    \n
  • Install primer.json (used by black-primer by default) with black. (#2154)
  • \n
\n

21.4b1

\n

Black

\n
    \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
\n

Packaging

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

21.4b0

\n

Black

\n
    \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
\n\n
\n

... (truncated)

\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://api.dependabot.com/badges/compatibility_score?dependency-name=black&package-manager=pip&previous-version=20.8b1&new-version=21.4b2)](https://dependabot.com/compatibility-score/?dependency-name=black&package-manager=pip&previous-version=20.8b1&new-version=21.4b2)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language\n- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language\n- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language\n- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language\n- `@dependabot badge me` will comment on this PR with code to add a \"Dependabot enabled\" badge to your readme\n\nAdditionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com):\n- Update frequency (including time of day and day of week)\n- Pull request limits (per update run and/or open at any time)\n- Out-of-range updates (receive only lockfile updates, if desired)\n- Security updates (receive only security updates, if desired)\n\n\n\n
", "created_at": "2021-04-29T13:58:06Z", "updated_at": "2021-04-29T15:47:50Z", "closed_at": "2021-04-29T15:47:49Z", "merged_at": "2021-04-29T15:47:49Z", "merge_commit_sha": "1b697539f5b53cec3fe13c0f4ada13ba655c88c7", "assignee": null, "milestone": null, "draft": 0, "head": "3cd7ad429944d47147c5d408f546c429e0a0019a", "base": "a4bb2abce0764d49d255e5379f9e9c70981834ca", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1313", "merged_by": null, "auto_merge": null} {"id": 872324754, "node_id": "PR_kwDOBm6k_c4z_p6S", "number": 1648, "state": "closed", "locked": 0, "title": "Use dash encoding for table names and row primary keys in URLs", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1439.\r\n\r\n- [x] Build `dash_encode` / `dash_decode` functions\r\n- [x] Use dash encoding for row primary keys\r\n- [x] Use dash encoding for `?_next=` pagination tokens\r\n- [x] Use dash encoding for table names in URLs\r\n- [x] Use dash encoding for database name\r\n- ~~Implement redirects from previous `%` URLs that replace those with `-`~~ - separate issue: #1650", "created_at": "2022-03-05T19:50:45Z", "updated_at": "2022-03-07T15:38:30Z", "closed_at": "2022-03-07T15:38:30Z", "merged_at": "2022-03-07T15:38:29Z", "merge_commit_sha": "1baa030eca375f839f3471237547ab403523e643", "assignee": null, "milestone": null, "draft": 0, "head": "32548b88fdb413429d960966decba8f6b3889190", "base": "5010d1359b9e9db90a5a69a3ca22d12862893e00", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1648", "merged_by": null, "auto_merge": null} {"id": 439203808, "node_id": "MDExOlB1bGxSZXF1ZXN0NDM5MjAzODA4", "number": 866, "state": "closed", "locked": 0, "title": "Update pytest-asyncio requirement from <0.13,>=0.10 to >=0.10,<0.15", "user": {"value": 27856297, "label": "dependabot-preview[bot]"}, "body": "Updates the requirements on [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) to permit the latest version.\n
\nCommits\n
    \n
  • 53f3da7 Prepare for release
  • \n
  • e99569d A line is added to the changelog.
  • \n
  • 4099b63 One import is not needed
  • \n
  • 68513b3 Clarify names and comments, according to yanlend comments 26 May
  • \n
  • 907e8f2 FIX new test_cases on python 3.5 & 3.6
  • \n
  • 51d986c To solve test cases that fail:
  • \n
  • f97e900 1) Test case (test_async_fixtures_with_finalizer) refactoring to pass on pyth...
  • \n
  • c1131f8 1) A new test case that fails with 0.12.0, and pass with this commit.
  • \n
  • 7a255bc 0.13.0 open for business
  • \n
  • b8e2a45 0.12.0
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language\n- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language\n- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language\n- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language\n- `@dependabot badge me` will comment on this PR with code to add a \"Dependabot enabled\" badge to your readme\n\nAdditionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com):\n- Update frequency (including time of day and day of week)\n- Pull request limits (per update run and/or open at any time)\n- Out-of-range updates (receive only lockfile updates, if desired)\n- Security updates (receive only security updates, if desired)\n\n\n\n
", "created_at": "2020-06-24T13:21:47Z", "updated_at": "2020-06-24T18:50:57Z", "closed_at": "2020-06-24T18:50:56Z", "merged_at": "2020-06-24T18:50:56Z", "merge_commit_sha": "1bb33dab49fd25f77b9f8e7ab7ee23b3d64c123c", "assignee": null, "milestone": null, "draft": 0, "head": "fb64dda76dda7354a77cb50c5864aff67a6fef8d", "base": "1a5b7d318fa923edfcefd3df8f64dae2e9c49d3f", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/866", "merged_by": null, "auto_merge": null} {"id": 216651317, "node_id": "MDExOlB1bGxSZXF1ZXN0MjE2NjUxMzE3", "number": 365, "state": "closed", "locked": 0, "title": "fix small doc typo", "user": {"value": 418191, "label": "jaywgraves"}, "body": "", "created_at": "2018-09-19T14:02:02Z", "updated_at": "2019-12-19T02:30:33Z", "closed_at": "2018-09-19T17:15:43Z", "merged_at": "2018-09-19T17:15:43Z", "merge_commit_sha": "1bcd54a834a2f9730d21095df855f6708c85c200", "assignee": null, "milestone": null, "draft": 0, "head": "d3fb6a80c5878c73befa2a35e11a9ce28a6e1ab6", "base": "b7257a21bf3dfa7353980f343c83a616da44daa7", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/365", "merged_by": null, "auto_merge": null} {"id": 790665890, "node_id": "PR_kwDOBm6k_c4vIJqi", "number": 1537, "state": "closed", "locked": 0, "title": "Update aiofiles requirement from <0.8,>=0.4 to >=0.4,<0.9", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Updates the requirements on [aiofiles](https://github.com/Tinche/aiofiles) to permit the latest version.\n
\nCommits\n\n
\n
\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", "created_at": "2021-11-29T13:13:52Z", "updated_at": "2021-11-30T02:29:55Z", "closed_at": "2021-11-30T02:29:54Z", "merged_at": "2021-11-30T02:29:54Z", "merge_commit_sha": "1beb7d939999da79bb77c4d3c777657c8a16bcd9", "assignee": null, "milestone": null, "draft": 0, "head": "fcfaec1793ed4b1f5d0f9a43f392f598a41f4ad2", "base": "48f11998b73350057b74fe6ab464d4ac3071637c", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1537", "merged_by": null, "auto_merge": null} {"id": 339236647, "node_id": "MDExOlB1bGxSZXF1ZXN0MzM5MjM2NjQ3", "number": 623, "state": "closed", "locked": 0, "title": "Test against Python 3.8 in Travis", "user": {"value": 9599, "label": "simonw"}, "body": "Needed for #622", "created_at": "2019-11-11T03:24:54Z", "updated_at": "2019-11-11T03:45:35Z", "closed_at": "2019-11-11T03:45:35Z", "merged_at": "2019-11-11T03:45:35Z", "merge_commit_sha": "1c063fae9dba70f70244db010d55a18846640f07", "assignee": null, "milestone": null, "draft": 0, "head": "877dda2d287ed3b1772f051dffd295a69c3ecd27", "base": "28c4a6db5b5e512db630d7ba6127196185de67c7", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/623", "merged_by": null, "auto_merge": null} {"id": 525371029, "node_id": "MDExOlB1bGxSZXF1ZXN0NTI1MzcxMDI5", "number": 8, "state": "closed", "locked": 0, "title": "fix import error if note has no \"updated\" element", "user": {"value": 4028322, "label": "mkorosec"}, "body": "I got the following error when executing evernote-to-sqlite enex evernote.db evernote.enex\r\n``` \r\n... \r\n File \"evernote_to_sqlite/cli.py\", line 31, in enex\r\n save_note(db, note)\r\n File \"evernote_to_sqlite/utils.py\", line 28, in save_note\r\n updated = note.find(\"updated\").text\r\nAttributeError: 'NoneType' object has no attribute 'text'\r\n``` \r\n\r\nSeems that in some cases the updated element is not added to the note, this is a part of the problematic note:\r\n\r\n``` \r\n20201019T074518Z\r\n\r\n web.clip7\r\n webclipper.evernote\r\n\r\n```", "created_at": "2020-11-22T22:51:05Z", "updated_at": "2021-02-11T22:34:06Z", "closed_at": "2021-02-11T22:34:06Z", "merged_at": "2021-02-11T22:34:06Z", "merge_commit_sha": "1c8457ddaa487aa2e677963d37217fcb6d544e59", "assignee": null, "milestone": null, "draft": 0, "head": "03b0c240d5f12c2d651c4cb25f92b0fecc7f7419", "base": "1c355e5678877e14eefa2a5fab5a267342a03335", "author_association": "CONTRIBUTOR", "repo": {"value": 303218369, "label": "evernote-to-sqlite"}, "url": "https://github.com/dogsheep/evernote-to-sqlite/pull/8", "merged_by": null, "auto_merge": null} {"id": 564215011, "node_id": "MDExOlB1bGxSZXF1ZXN0NTY0MjE1MDEx", "number": 225, "state": "closed", "locked": 0, "title": "fix for problem in Table.insert_all on search for columns per chunk of rows", "user": {"value": 261237, "label": "nieuwenhoven"}, "body": "Hi,\r\n\r\nI ran into a problem when trying to create a database from my Apple Healthkit data using [healthkit-to-sqlite](https://github.com/dogsheep/healthkit-to-sqlite). The program crashed because of an invalid insert statement that was generated for table `rDistanceCycling`. \r\n\r\nThe actual problem turned out to be in [sqlite-utils](https://github.com/simonw/sqlite-utils). `Table.insert_all` processes the data to be inserted in chunks of rows and checks for every chunk which columns are used, and it will collect all column names in the variable `all_columns`. The collection of columns is done using a nested list comprehension that is not completely correct. \r\n\r\nI'm using a Windows machine and had to make a few adjustments to the tests in order to be able to run them because they had a posix dependency.\r\n\r\nThanks, kind regards,\r\n\r\nFrans\r\n\r\n```\r\n# this is a (condensed) chunk of data from my Apple healthkit export that caused the problem.\r\n# the 3 last items in the chunk have additional keys: metadata_HKMetadataKeySyncVersion and metadata_HKMetadataKeySyncIdentifier\r\n\r\nchunk = [{'sourceName': 'Apple\u00c2\\xa0Watch van Frans', 'sourceVersion': '7.0.1',\r\n 'device': '<, name:Apple Watch, manufacturer:Apple Inc., model:Watch, hardware:Watch3,4, software:7.0.1>',\r\n 'unit': 'km', 'creationDate': '2020-10-10 12:29:09 +0100', 'startDate': '2020-10-10 12:29:06 +0100',\r\n 'endDate': '2020-10-10 12:29:07 +0100', 'value': '0.00518016'},\r\n {'sourceName': 'Apple\u00c2\\xa0Watch van Frans', 'sourceVersion': '7.0.1',\r\n 'device': '<, name:Apple Watch, manufacturer:Apple Inc., model:Watch, hardware:Watch3,4, software:7.0.1>',\r\n 'unit': 'km', 'creationDate': '2020-10-10 12:29:10 +0100', 'startDate': '2020-10-10 12:29:07 +0100',\r\n 'endDate': '2020-10-10 12:29:08 +0100', 'value': '0.00544049'},\r\n {'sourceName': 'Apple\u00c2\\xa0Watch van Frans', 'sourceVersion': '6.2.6',\r\n 'device': '<, name:Apple Watch, manufacturer:Apple Inc., model:Watch, hardware:Watch3,4, software:6.2.6>',\r\n 'unit': 'km', 'creationDate': '2020-10-14 05:54:12 +0100', 'startDate': '2020-07-15 16:40:50 +0100',\r\n 'endDate': '2020-07-15 16:42:49 +0100', 'value': '0.952092', 'metadata_HKMetadataKeySyncVersion': '1',\r\n 'metadata_HKMetadataKeySyncIdentifier': '3:674DBCDB-3FE8-40D1-9FC1-E54A2B413805:616520450.99823:616520569.99360:119'},\r\n {'sourceName': 'Apple\u00c2\\xa0Watch van Frans', 'sourceVersion': '6.2.6',\r\n 'device': '<, name:Apple Watch, manufacturer:Apple Inc., model:Watch, hardware:Watch3,4, software:6.2.6>',\r\n 'unit': 'km', 'creationDate': '2020-10-14 05:54:12 +0100', 'startDate': '2020-07-15 16:42:49 +0100',\r\n 'endDate': '2020-07-15 16:44:51 +0100', 'value': '0.848983', 'metadata_HKMetadataKeySyncVersion': '1',\r\n 'metadata_HKMetadataKeySyncIdentifier': '3:674DBCDB-3FE8-40D1-9FC1-E54A2B413805:616520569.99360:616520691.98826:119'},\r\n {'sourceName': 'Apple\u00c2\\xa0Watch van Frans', 'sourceVersion': '6.2.6',\r\n 'device': '<, name:Apple Watch, manufacturer:Apple Inc., model:Watch, hardware:Watch3,4, software:6.2.6>',\r\n 'unit': 'km', 'creationDate': '2020-10-14 05:54:12 +0100', 'startDate': '2020-07-15 16:44:51 +0100',\r\n 'endDate': '2020-07-15 16:46:50 +0100', 'value': '0.834403', 'metadata_HKMetadataKeySyncVersion': '1',\r\n 'metadata_HKMetadataKeySyncIdentifier': '3:674DBCDB-3FE8-40D1-9FC1-E54A2B413805:616520691.98826:616520810.98305:119'}]\r\n\r\n\r\n\r\ndef all_columns_old():\r\n all_columns = [col for col in chunk[0]]\r\n all_columns += [column for record in chunk\r\n for column in record if column not in all_columns]\r\n return all_columns\r\n\r\n\r\ndef all_columns_new():\r\n all_columns = [col for col in chunk[0]]\r\n for record in chunk:\r\n all_columns += [column for column in record if column not in all_columns]\r\n return all_columns\r\n\r\n\r\n\r\nif __name__ == '__main__':\r\n from pprint import pprint\r\n\r\n print('problem: ')\r\n pprint(all_columns_old())\r\n print('\\nfix: ')\r\n pprint(all_columns_new())\r\n\r\n```\r\n", "created_at": "2021-01-29T20:16:07Z", "updated_at": "2021-02-14T21:04:13Z", "closed_at": "2021-02-14T21:04:13Z", "merged_at": null, "merge_commit_sha": "1cba965a1ddc2bd77db3bc3912aa7e8467e2fa2f", "assignee": null, "milestone": null, "draft": 0, "head": "929ea7551135df0cc2ac9d67f4fbbecf701a11f6", "base": "36dc7e3909a44878681c266b90f9be76ac749f2d", "author_association": "NONE", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/225", "merged_by": null, "auto_merge": null} {"id": 181644805, "node_id": "MDExOlB1bGxSZXF1ZXN0MTgxNjQ0ODA1", "number": 206, "state": "closed", "locked": 0, "title": "Fix sqlite error when loading rows with no incoming FKs", "user": {"value": 45057, "label": "russss"}, "body": "This fixes `ERROR: conn=, sql\r\n= 'select ', params = {'id': '1'}` caused by an invalid query loading incoming FKs when none exist.\r\n\r\nThe error was ignored due to async but it still got printed to the console.", "created_at": "2018-04-14T12:08:17Z", "updated_at": "2018-04-14T14:32:42Z", "closed_at": "2018-04-14T14:24:25Z", "merged_at": "2018-04-14T14:24:25Z", "merge_commit_sha": "1cc5161089e559c8b16049b20f7a5b3a43290c21", "assignee": null, "milestone": null, "draft": 0, "head": "93b038e2469bee07d36ae8a943aab8b9d8610c1d", "base": "ec6abc81e433c9bac1b9f085111785fc227e9e34", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/206", "merged_by": null, "auto_merge": null} {"id": 1179812730, "node_id": "PR_kwDODEm0Qs5GUoN6", "number": 70, "state": "open", "locked": 0, "title": "Archive: Import Twitter Circle data", "user": {"value": 26161409, "label": "sometimes-i-send-pull-requests"}, "body": null, "created_at": "2022-12-28T23:33:09Z", "updated_at": "2022-12-28T23:33:09Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "1d2683101571550adf4a3b7bdf8e9ffbd8b77b61", "assignee": null, "milestone": null, "draft": 0, "head": "cc80cb31a9afb9a50295d6202f509e5b500607a0", "base": "f09d611782a8372cfb002792dfa727325afb4db6", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 206156866, "label": "twitter-to-sqlite"}, "url": "https://github.com/dogsheep/twitter-to-sqlite/pull/70", "merged_by": null, "auto_merge": null} {"id": 1031503844, "node_id": "PR_kwDOBm6k_c49e3_k", "number": 1789, "state": "closed", "locked": 0, "title": "Add new entrypoint option to `--load-extension`", "user": {"value": 15178711, "label": "asg017"}, "body": "Closes #1784 \r\n\r\nThe `--load-extension` flag can now accept an optional \"entrypoint\" value, to specify which entrypoint SQLite should load from the given extension. \r\n\r\n```bash\r\n# would load default entrypoint like before\r\ndatasette data.db --load-extension ext\r\n\r\n# loads the extensions with the \"sqlite3_foo_init\" entrpoint\r\ndatasette data.db --load-extension ext:sqlite3_foo_init\r\n\r\n# loads the extensions with the \"sqlite3_bar_init\" entrpoint\r\ndatasette data.db --load-extension ext:sqlite3_bar_init\r\n```\r\n\r\nFor testing, I added a small SQLite extension in C at `tests/ext.c`. If compiled, then pytest will run the unit tests in `test_load_extensions.py`to verify that Datasette loads in extensions correctly (and loads the correct entrypoints). Compiling the extension requires a C compiler, I compiled it on my Mac with:\r\n\r\n```\r\ngcc ext.c -I path/to/sqlite -fPIC -shared -o ext.dylib\r\n```\r\n\r\nWhere `path/to/sqlite` is a directory that contains the SQLite amalgamation header files.\r\n\r\nRe documentation: I added a bit to the help text for `--load-extension` (which I believe should auto-add to documentation?), and the existing extension documentation is spatialite specific. Let me know if a new extensions documentation page would be helpful!", "created_at": "2022-08-19T19:27:47Z", "updated_at": "2022-08-23T18:42:52Z", "closed_at": "2022-08-23T18:34:30Z", "merged_at": "2022-08-23T18:34:30Z", "merge_commit_sha": "1d64c9a8dac45b9a3452acf8e76dfadea2b0bc49", "assignee": null, "milestone": null, "draft": 0, "head": "5a2a05f2cea7b55b1c3bb1df043c0a454eca6563", "base": "663ac431fe7202c85967568d82b2034f92b9aa43", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1789", "merged_by": null, "auto_merge": null} {"id": 494146043, "node_id": "MDExOlB1bGxSZXF1ZXN0NDk0MTQ2MDQz", "number": 977, "state": "closed", "locked": 0, "title": "Update pytest requirement from <6.1.0,>=5.2.2 to >=5.2.2,<6.2.0", "user": {"value": 27856297, "label": "dependabot-preview[bot]"}, "body": "Updates the requirements on [pytest](https://github.com/pytest-dev/pytest) to permit the latest version.\n
\nRelease notes\n

Sourced from pytest's releases.

\n
\n

6.1.0

\n

pytest 6.1.0 (2020-09-26)

\n

Breaking Changes

\n
    \n
  • \n

    #5585: As per our policy, the following features which have been deprecated in the 5.X series are now\nremoved:

    \n
      \n
    • The funcargnames read-only property of FixtureRequest, Metafunc, and Function classes. Use fixturenames attribute.
    • \n
    • @pytest.fixture no longer supports positional arguments, pass all arguments by keyword instead.
    • \n
    • Direct construction of Node subclasses now raise an error, use from_parent instead.
    • \n
    • The default value for junit_family has changed to xunit2. If you require the old format, add junit_family=xunit1 to your configuration file.
    • \n
    • The TerminalReporter no longer has a writer attribute. Plugin authors may use the public functions of the TerminalReporter instead of accessing the TerminalWriter object directly.
    • \n
    • The --result-log option has been removed. Users are recommended to use the pytest-reportlog plugin instead.
    • \n
    \n

    For more information consult\nDeprecations and Removals in the docs.

    \n
  • \n
\n

Deprecations

\n
    \n
  • \n

    #6981: The pytest.collect module is deprecated: all its names can be imported from pytest directly.

    \n
  • \n
  • \n

    #7097: The pytest._fillfuncargs function is deprecated. This function was kept\nfor backward compatibility with an older plugin.

    \n

    It's functionality is not meant to be used directly, but if you must replace\nit, use function._request._fillfixtures() instead, though note this is not\na public API and may break in the future.

    \n
  • \n
  • \n

    #7210: The special -k '-expr' syntax to -k is deprecated. Use -k 'not expr'\ninstead.

    \n

    The special -k 'expr:' syntax to -k is deprecated. Please open an issue\nif you use this and want a replacement.

    \n
  • \n
  • \n

    #7255: The pytest_warning_captured <_pytest.hookspec.pytest_warning_captured> hook is deprecated in favor\nof pytest_warning_recorded <_pytest.hookspec.pytest_warning_recorded>, and will be removed in a future version.

    \n
  • \n
  • \n

    #7648: The gethookproxy() and isinitpath() methods of FSCollector and Package are deprecated;\nuse self.session.gethookproxy() and self.session.isinitpath() instead.\nThis should work on all pytest versions.

    \n
  • \n
\n

Features

\n
    \n
  • #7667: New --durations-min command-line flag controls the minimal duration for inclusion in the slowest list of tests shown by --durations. Previously this was hard-coded to 0.005s.
  • \n
\n

Improvements

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

Sourced from pytest's changelog.

\n
\n
\nCommits\n
    \n
  • 868bc00 Prepare release version 6.1.0
  • \n
  • 0b327cc Merge pull request #7796 from bluetech/changelog-cleanups
  • \n
  • d3c746e changelog: some consistency cleanups
  • \n
  • d3f47bf Improved 'Declaring new hooks' section in docs. (#7782)
  • \n
  • 3db2489 Merge pull request #7784 from nicoddemus/use-new-pip-solver-7783
  • \n
  • 8215625 Use new pip resolver in plugins tox env
  • \n
  • 5cfd7c0 Merge pull request #7780 from bluetech/final
  • \n
  • a99ca87 Mark some public and to-be-public classes as @final
  • \n
  • 050c2df Use multiple issue template types and mention Discussions (#7739)
  • \n
  • cdfdb3a Add docs about reusing fixtures from other projects (#7772)
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language\n- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language\n- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language\n- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language\n- `@dependabot badge me` will comment on this PR with code to add a \"Dependabot enabled\" badge to your readme\n\nAdditionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com):\n- Update frequency (including time of day and day of week)\n- Pull request limits (per update run and/or open at any time)\n- Out-of-range updates (receive only lockfile updates, if desired)\n- Security updates (receive only security updates, if desired)\n\n\n\n
", "created_at": "2020-09-28T13:33:05Z", "updated_at": "2020-09-28T22:16:36Z", "closed_at": "2020-09-28T22:16:35Z", "merged_at": "2020-09-28T22:16:35Z", "merge_commit_sha": "1f021c37110fc9019b0ef70062c28c335e568ae2", "assignee": null, "milestone": null, "draft": 0, "head": "5c01344a0ee3e0e7ad59e1cd8b0e63c976be71ee", "base": "9a6d0dce282e7fb58c5610e24c74098c923abfdc", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/977", "merged_by": null, "auto_merge": null} {"id": 1046652968, "node_id": "PR_kwDOBm6k_c4-Yqgo", "number": 1799, "state": "closed", "locked": 0, "title": "Update aiofiles requirement from <0.9,>=0.4 to >=0.4,<22.2", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Updates the requirements on [aiofiles](https://github.com/Tinche/aiofiles) to permit the latest version.\n
\nCommits\n\n
\n
\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1799.org.readthedocs.build/en/1799/\n\r\n", "created_at": "2022-09-05T16:13:48Z", "updated_at": "2022-09-05T18:36:44Z", "closed_at": "2022-09-05T18:36:43Z", "merged_at": null, "merge_commit_sha": "1f3d29c2db5cbd793cd6224049cb3fe1f4a74b7e", "assignee": null, "milestone": null, "draft": 0, "head": "5abd55a273fedfb700f76b97dc88f5cc2620446e", "base": "ba35105eee2d3ba620e4f230028a02b2e2571df2", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1799", "merged_by": null, "auto_merge": null} {"id": 986925985, "node_id": "PR_kwDOD079W84600uh", "number": 37, "state": "open", "locked": 0, "title": "Fix former command name in readme", "user": {"value": 578773, "label": "DanLipsitt"}, "body": "Looks like a previous commit missed a `photo-to-sqlite`\u2192 `dogsheep-photos` replacement.", "created_at": "2022-07-05T02:09:13Z", "updated_at": "2022-07-05T02:09:13Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "1fa5a3b9ddab2a954aea21ea4292b944e826866a", "assignee": null, "milestone": null, "draft": 0, "head": "b0d256c5bc480450627d98d8c8a5e3d8c61dc2ae", "base": "325aa38cb23d0757bb1335ee2ea94a082475a66e", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 256834907, "label": "dogsheep-photos"}, "url": "https://github.com/dogsheep/dogsheep-photos/pull/37", "merged_by": null, "auto_merge": null} {"id": 327051673, "node_id": "MDExOlB1bGxSZXF1ZXN0MzI3MDUxNjcz", "number": 15, "state": "closed", "locked": 0, "title": "twitter-to-sqlite import command, refs #4", "user": {"value": 9599, "label": "simonw"}, "body": "", "created_at": "2019-10-11T06:37:14Z", "updated_at": "2019-10-11T06:45:01Z", "closed_at": "2019-10-11T06:45:01Z", "merged_at": "2019-10-11T06:45:01Z", "merge_commit_sha": "2019ee908731054c6eaa3d5123dfbdf7d2d70fc4", "assignee": null, "milestone": null, "draft": 0, "head": "df1d85897118310a2d3c1b9e5aad108165302cf2", "base": "436a170d74ec70903d1b4ca430c2c6b6435cdfcc", "author_association": "MEMBER", "repo": {"value": 206156866, "label": "twitter-to-sqlite"}, "url": "https://github.com/dogsheep/twitter-to-sqlite/pull/15", "merged_by": null, "auto_merge": null} {"id": 1186476109, "node_id": "PR_kwDOBm6k_c5GuDBN", "number": 1976, "state": "closed", "locked": 0, "title": "Bump sphinx from 5.3.0 to 6.1.0", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 5.3.0 to 6.1.0.\n
\nRelease notes\n

Sourced from sphinx's releases.

\n
\n

v6.1.0

\n

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

\n

v6.0.1

\n

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

\n

v6.0.0

\n

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

\n

v6.0.0b2

\n

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

\n

v6.0.0b1

\n

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

\n
\n
\n
\nChangelog\n

Sourced from sphinx's changelog.

\n
\n

Release 6.1.0 (released Jan 05, 2023)

\n

Dependencies

\n\n

Incompatible changes

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

Deprecated

\n
    \n
  • \n

    sphinx.util functions:

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

    Moved to sphinx.util.display:

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

    Moved to sphinx.util.http_date:

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

    Moved to sphinx.util.exceptions:

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

Features added

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

... (truncated)

\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sphinx&package-manager=pip&previous-version=5.3.0&new-version=6.1.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1976.org.readthedocs.build/en/1976/\n\r\n", "created_at": "2023-01-05T13:02:37Z", "updated_at": "2023-01-06T13:02:17Z", "closed_at": "2023-01-06T13:02:15Z", "merged_at": null, "merge_commit_sha": "21d3f3f92f1c902ba7acb267022b1c2b38a59bf3", "assignee": null, "milestone": null, "draft": 0, "head": "af76abcf2e9a6645e3d85acbc0da1f69d04e377c", "base": "c41278b46f7936b4b1a8a14bf285bed82c81c609", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1976", "merged_by": null, "auto_merge": null} {"id": 702422263, "node_id": "MDExOlB1bGxSZXF1ZXN0NzAyNDIyMjYz", "number": 1418, "state": "closed", "locked": 0, "title": "Spelling corrections plus CI job for codespell", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1417.", "created_at": "2021-08-03T16:21:19Z", "updated_at": "2021-08-03T16:36:39Z", "closed_at": "2021-08-03T16:36:38Z", "merged_at": "2021-08-03T16:36:38Z", "merge_commit_sha": "2208c3c68e552d343e6a2872ff6e559fca9d1b38", "assignee": null, "milestone": null, "draft": 0, "head": "532170fc606df04986104aacbd67b920c5fa0af9", "base": "54b6e96ee8aa553b6671e341a1944f93f3fb89c3", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1418", "merged_by": null, "auto_merge": null} {"id": 997743473, "node_id": "PR_kwDOBm6k_c47eFtx", "number": 1769, "state": "closed", "locked": 0, "title": "Update pytest-asyncio requirement from <0.19,>=0.17 to >=0.17,<0.20", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Updates the requirements on [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) to permit the latest version.\n
\nRelease notes\n

Sourced from pytest-asyncio's releases.

\n
\n

pytest-asyncio 0.19.0

\n
\n

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

\n

\"image\"

\n

\"image\"

\n

\"image\"

\n

\"Supported

\n

\"image\"

\n

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

\n

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

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

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

\n

Features

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

Installation

\n\n
\n

... (truncated)

\n
\n
\nChangelog\n

Sourced from pytest-asyncio's changelog.

\n
\n

0.19.0 (22-07-13)

\n
    \n
  • BREAKING: The default asyncio_mode is now strict. [#293](https://github.com/pytest-dev/pytest-asyncio/issues/293) <https://github.com/pytest-dev/pytest-asyncio/issues/293>_
  • \n
  • Removes setup.py since all relevant configuration is present setup.cfg. Users requiring an editable installation of pytest-asyncio need to use pip v21.1 or newer. [#283](https://github.com/pytest-dev/pytest-asyncio/issues/283) <https://github.com/pytest-dev/pytest-asyncio/issues/283>_
  • \n
  • Declare support for Python 3.11.
  • \n
\n

0.18.3 (22-03-25)

\n
    \n
  • Adds pytest-trio <https://pypi.org/project/pytest-trio/>_ to the test dependencies
  • \n
  • Fixes a bug that caused pytest-asyncio to try to set up async pytest_trio fixtures in strict mode. [#298](https://github.com/pytest-dev/pytest-asyncio/issues/298) <https://github.com/pytest-dev/pytest-asyncio/issues/298>_
  • \n
\n

0.18.2 (22-03-03)

\n
    \n
  • Fix asyncio auto mode not marking static methods. [#295](https://github.com/pytest-dev/pytest-asyncio/issues/295) <https://github.com/pytest-dev/pytest-asyncio/issues/295>_
  • \n
  • Fix a compatibility issue with Hypothesis 6.39.0. [#302](https://github.com/pytest-dev/pytest-asyncio/issues/302) <https://github.com/pytest-dev/pytest-asyncio/issues/302>_
  • \n
\n

0.18.1 (22-02-10)

\n
    \n
  • Fixes a regression that prevented async fixtures from working in synchronous tests. [#286](https://github.com/pytest-dev/pytest-asyncio/issues/286) <https://github.com/pytest-dev/pytest-asyncio/issues/286>_
  • \n
\n

0.18.0 (22-02-07)

\n
    \n
  • Raise a warning if @\u200bpytest.mark.asyncio is applied to non-async function. [#275](https://github.com/pytest-dev/pytest-asyncio/issues/275) <https://github.com/pytest-dev/pytest-asyncio/issues/275>_
  • \n
  • Support parametrized event_loop fixture. [#278](https://github.com/pytest-dev/pytest-asyncio/issues/278) <https://github.com/pytest-dev/pytest-asyncio/issues/278>_
  • \n
\n

0.17.2 (22-01-17)

\n
    \n
  • Require typing-extensions on Python`_
  • \n
  • Fix a regression in tests collection introduced by 0.17.1, the plugin works fine with non-python tests again. [#267](https://github.com/pytest-dev/pytest-asyncio/issues/267) <https://github.com/pytest-dev/pytest-asyncio/issues/267>_
  • \n
\n

0.17.1 (22-01-16)

\n
    \n
  • Fixes a bug that prevents async Hypothesis tests from working without explicit asyncio marker when --asyncio-mode=auto is set. [#258](https://github.com/pytest-dev/pytest-asyncio/issues/258) <https://github.com/pytest-dev/pytest-asyncio/issues/258>_
  • \n
  • Fixed a bug that closes the default event loop if the loop doesn't exist [#257](https://github.com/pytest-dev/pytest-asyncio/issues/257) <https://github.com/pytest-dev/pytest-asyncio/issues/257>_
  • \n
  • Added type annotations. [#198](https://github.com/pytest-dev/pytest-asyncio/issues/198) <https://github.com/pytest-dev/pytest-asyncio/issues/198>_
  • \n
  • Show asyncio mode in pytest report headers. [#266](https://github.com/pytest-dev/pytest-asyncio/issues/266) <https://github.com/pytest-dev/pytest-asyncio/issues/266>_
  • \n
  • Relax asyncio_mode type definition; it allows to support pytest 6.1+. [#262](https://github.com/pytest-dev/pytest-asyncio/issues/262) <https://github.com/pytest-dev/pytest-asyncio/issues/262>_
  • \n
\n

0.17.0 (22-01-13)

\n
    \n
  • pytest-asyncio no longer alters existing event loop policies. [#168](https://github.com/pytest-dev/pytest-asyncio/issues/168) <https://github.com/pytest-dev/pytest-asyncio/issues/168>, [#188](https://github.com/pytest-dev/pytest-asyncio/issues/188) <https://github.com/pytest-dev/pytest-asyncio/issues/168>
  • \n
  • Drop support for Python 3.6
  • \n
  • Fixed an issue when pytest-asyncio was used in combination with flaky or inherited asynchronous Hypothesis tests. [#178](https://github.com/pytest-dev/pytest-asyncio/issues/178) <https://github.com/pytest-dev/pytest-asyncio/issues/178>_ [#231](https://github.com/pytest-dev/pytest-asyncio/issues/231) <https://github.com/pytest-dev/pytest-asyncio/issues/231>_
  • \n
  • Added flaky <https://pypi.org/project/flaky/>_ to test dependencies
  • \n
  • Added unused_udp_port and unused_udp_port_factory fixtures (similar to unused_tcp_port and unused_tcp_port_factory counterparts. [#99](https://github.com/pytest-dev/pytest-asyncio/issues/99) <https://github.com/pytest-dev/pytest-asyncio/issues/99>_
  • \n
  • Added the plugin modes: strict, auto, and legacy. See documentation <https://github.com/pytest-dev/pytest-asyncio#modes>_ for details. [#125](https://github.com/pytest-dev/pytest-asyncio/issues/125) <https://github.com/pytest-dev/pytest-asyncio/issues/125>_
  • \n
  • Correctly process KeyboardInterrupt during async fixture setup phase [#219](https://github.com/pytest-dev/pytest-asyncio/issues/219) <https://github.com/pytest-dev/pytest-asyncio/issues/219>_
  • \n
\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • 2da33c4 docs: Prepare v0.19.0 release. (#385)
  • \n
  • 07beb80 opt into strict mode by default (#380)
  • \n
  • 25c54a5 Clarify documentation of event_loop fixture (#375)
  • \n
  • 49f07a4 Bump typing-extensions from 4.2.0 to 4.3.0 in /dependencies/default (#382)
  • \n
  • 739198b Bump hypothesis from 6.48.0 to 6.48.3 in /dependencies/default (#381)
  • \n
  • db72f25 Bump importlib-metadata from 4.11.4 to 4.12.0 in /dependencies/default (#378)
  • \n
  • 4cf16cf Bump hypothesis from 6.47.3 to 6.48.0 in /dependencies/default (#377)
  • \n
  • f13c85f docs: Fix typo in README.
  • \n
  • b463f72 Python 3.11 support (#370)
  • \n
  • 860ff51 Bump hypothesis from 6.47.2 to 6.47.3 in /dependencies/default (#373)
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", "created_at": "2022-07-15T13:10:15Z", "updated_at": "2022-07-18T01:06:38Z", "closed_at": "2022-07-18T01:06:38Z", "merged_at": "2022-07-18T01:06:38Z", "merge_commit_sha": "22354c48ce4d514d7a1b321e5651c7f1340e3f5e", "assignee": null, "milestone": null, "draft": 0, "head": "bb3c6105164165432e2e72cc17d3ad71a1ba5b9b", "base": "950cc7677f65aa2543067b3bbfc2b6acb98b62c8", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1769", "merged_by": null, "auto_merge": null} {"id": 775078665, "node_id": "PR_kwDODFE5qs4uMsMJ", "number": 9, "state": "open", "locked": 0, "title": "Removed space from filename My Activity.json", "user": {"value": 91880982, "label": "widadmogral"}, "body": "File name from google takeout has no space. The code only runs without error if filename is \"MyActivity.json\" and not \"My Activity.json\". Is it a new change by Google?", "created_at": "2021-11-08T00:04:31Z", "updated_at": "2021-11-08T00:04:31Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "236da5c8302c09a20fcd4164c563cd9fa5c9595c", "assignee": null, "milestone": null, "draft": 0, "head": "6d111f65687e13ffd8b39aa05f1f8f4a351e7788", "base": "e54e544427f1cc3ea8189f0e95f54046301a8645", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 206649770, "label": "google-takeout-to-sqlite"}, "url": "https://github.com/dogsheep/google-takeout-to-sqlite/pull/9", "merged_by": null, "auto_merge": null} {"id": 1188133959, "node_id": "PR_kwDOBm6k_c5G0XxH", "number": 1977, "state": "closed", "locked": 0, "title": "Bump sphinx from 5.3.0 to 6.1.1", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 5.3.0 to 6.1.1.\n
\nRelease notes\n

Sourced from sphinx's releases.

\n
\n

v6.1.1

\n

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

\n

v6.1.0

\n

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

\n

v6.0.1

\n

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

\n

v6.0.0

\n

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

\n

v6.0.0b2

\n

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

\n

v6.0.0b1

\n

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

\n
\n
\n
\nChangelog\n

Sourced from sphinx's changelog.

\n
\n

Release 6.1.1 (released Jan 05, 2023)

\n

Bugs fixed

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

Release 6.1.0 (released Jan 05, 2023)

\n

Dependencies

\n\n

Incompatible changes

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

Deprecated

\n
    \n
  • \n

    sphinx.util functions:

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

    Moved to sphinx.util.display:

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

    Moved to sphinx.util.http_date:

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

    Moved to sphinx.util.exceptions:

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

... (truncated)

\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sphinx&package-manager=pip&previous-version=5.3.0&new-version=6.1.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1977.org.readthedocs.build/en/1977/\n\r\n", "created_at": "2023-01-06T13:02:12Z", "updated_at": "2023-01-09T13:06:17Z", "closed_at": "2023-01-09T13:06:14Z", "merged_at": null, "merge_commit_sha": "23faad99fb4d7282f6170742fa7e5ef2bbd935af", "assignee": null, "milestone": null, "draft": 0, "head": "a4eebeecd723ed9bc5517fd2f05320c11df3d749", "base": "c41278b46f7936b4b1a8a14bf285bed82c81c609", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1977", "merged_by": null, "auto_merge": null} {"id": 903832393, "node_id": "PR_kwDOBm6k_c4132NJ", "number": 1703, "state": "closed", "locked": 0, "title": "Update beautifulsoup4 requirement from <4.11.0,>=4.8.1 to >=4.8.1,<4.12.0", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Updates the requirements on [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) to permit the latest version.\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", "created_at": "2022-04-08T13:08:53Z", "updated_at": "2022-04-08T22:51:05Z", "closed_at": "2022-04-08T22:51:05Z", "merged_at": "2022-04-08T22:51:05Z", "merge_commit_sha": "247e460e08bf823142f7b84058fe44e43626787f", "assignee": null, "milestone": null, "draft": 0, "head": "73aabe6c4222500745be8ca324431295b727d335", "base": "90d1be9952db9aaddc21a536e4d00a8de44765d7", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1703", "merged_by": null, "auto_merge": null} {"id": 1272169404, "node_id": "PR_kwDOCGYnMM5L08O8", "number": 531, "state": "closed", "locked": 0, "title": "Add paths for homebrew on Apple silicon", "user": {"value": 25778, "label": "eyeseast"}, "body": "This also passes in the extension path when specified in GIS methods. Wherever we know an extension path, we use `db.init_spatialite(find_spatialite() or load_extension)`.\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://sqlite-utils--531.org.readthedocs.build/en/531/\n\r\n", "created_at": "2023-03-11T22:27:52Z", "updated_at": "2023-04-09T01:49:44Z", "closed_at": "2023-04-09T01:49:43Z", "merged_at": null, "merge_commit_sha": "24f3eb082b98b8d676bab2eab4f763cd9b50fe96", "assignee": null, "milestone": null, "draft": 0, "head": "afdf6187716b19fce8692f6887a1d45c85477fee", "base": "c0251cc9271260de73b4227859a51fab9b4cb745", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/531", "merged_by": null, "auto_merge": null} {"id": 409153870, "node_id": "MDExOlB1bGxSZXF1ZXN0NDA5MTUzODcw", "number": 739, "state": "closed", "locked": 0, "title": "Configuration directory mode", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #731\r\n\r\nTODO:\r\n\r\n- [x] Decide how to combine explicit command-line options with items detected from the directory structure\r\n- [x] Add unit tests\r\n- [x] Implement `inspect-data.json` mechanism for populating `immutables`\r\n- [x] Add documentation", "created_at": "2020-04-26T20:37:46Z", "updated_at": "2020-04-27T16:30:25Z", "closed_at": "2020-04-27T16:30:25Z", "merged_at": "2020-04-27T16:30:25Z", "merge_commit_sha": "25014ca25eb70b4c1217558ebd14db2845973bfb", "assignee": null, "milestone": null, "draft": 0, "head": "0d8fa53fab672fcf16b6a75aa55b07ccd243fb96", "base": "1b7b66c465e44025ec73421bd69752e42f108321", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/739", "merged_by": null, "auto_merge": null} {"id": 1333843584, "node_id": "PR_kwDOBm6k_c5PgNaA", "number": 2068, "state": "closed", "locked": 0, "title": "Bump sphinx from 6.1.3 to 7.0.0", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 6.1.3 to 7.0.0.\n
\nRelease notes\n

Sourced from sphinx's releases.

\n
\n

v7.0.0

\n

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

\n

v7.0.0rc1

\n

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

\n

v6.2.1

\n

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

\n

v6.2.0

\n

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

\n
\n
\n
\nChangelog\n

Sourced from sphinx's changelog.

\n
\n

Release 7.0.0 (released Apr 29, 2023)

\n

Incompatible changes

\n
    \n
  • #11359: Remove long-deprecated aliases for MecabSplitter and\nDefaultSplitter in sphinx.search.ja.
  • \n
  • #11360: Remove deprecated make_old_id functions in domain object\ndescription classes.
  • \n
  • #11363: Remove the Setuptools integration (build_sphinx hook in\nsetup.py).
  • \n
  • #11364: Remove deprecated sphinx.ext.napoleon.iterators module.
  • \n
  • #11365: Remove support for the jsdump format in sphinx.search.
  • \n
  • #11366: Make locale a required argument to\nsphinx.util.i18n.format_date().
  • \n
  • #11370: Remove deprecated sphinx.util.stemmer module.
  • \n
  • #11371: Remove deprecated sphinx.pycode.ast.parse() function.
  • \n
  • #11372: Remove deprecated sphinx.io.read_doc() function.
  • \n
  • #11373: Removed deprecated sphinx.util.get_matching_files() function.
  • \n
  • #11378: Remove deprecated sphinx.util.docutils.is_html5_writer_available()\nfunction.
  • \n
  • #11379: Make the env argument to Builder subclasses required.
  • \n
  • #11380: autosummary: Always emit grouped import exceptions.
  • \n
  • #11381: Remove deprecated style key for HTML templates.
  • \n
  • #11382: Remove deprecated sphinx.writers.latex.LaTeXTranslator.docclasses\nattribute.
  • \n
  • #11383: Remove deprecated sphinx.builders.html.html5_ready and\nsphinx.builders.html.HTMLTranslator attributes.
  • \n
  • #11385: Remove support for HTML 4 output.
  • \n
\n

Release 6.2.1 (released Apr 25, 2023)

\n

Bugs fixed

\n
    \n
  • #11355: Revert the default type of :confval:nitpick_ignore and\n:confval:nitpick_ignore_regex to list.
  • \n
\n

Release 6.2.0 (released Apr 23, 2023)

\n

Dependencies

\n
    \n
  • Require Docutils 0.18.1 or greater.
  • \n
\n

Incompatible changes

\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • d568b2f Bump to 7.0.0 final
  • \n
  • ff79edf Remove jsdump references post removal
  • \n
  • 1a5133a Bump to 7.0.0rc1 final
  • \n
  • 5795fc7 Update sphinx.deprecation for Sphinx 7.0 (#11386)
  • \n
  • 6202087 Add a note to CHANGES for PR 11385
  • \n
  • ad47373 Remove HTML 4 support (#11385)
  • \n
  • 3e3251d Remove HTMLTranslator and html5_ready from sphinx.builders.html (...
  • \n
  • 77fd819 Remove deprecated LaTeXTranslator.docclasses attribute (#11382)
  • \n
  • 4be56f3 Remove deprecated style key for HTML templates (#11381)
  • \n
  • 49027a9 Autosummary: Always emit grouped ImportError exceptions (#11380)
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sphinx&package-manager=pip&previous-version=6.1.3&new-version=7.0.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--2068.org.readthedocs.build/en/2068/\n\r\n", "created_at": "2023-05-01T13:58:46Z", "updated_at": "2023-05-15T13:59:38Z", "closed_at": "2023-05-15T13:59:36Z", "merged_at": null, "merge_commit_sha": "262233b5f387ea64f6f71587eb14d3a4025a474c", "assignee": null, "milestone": null, "draft": 0, "head": "379a597e4e813ace6ffd032c6e9a40a682e05a7f", "base": "55c526a5373aa41c76a3f052624f92e7add59cc8", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/2068", "merged_by": null, "auto_merge": null} {"id": 1015591301, "node_id": "PR_kwDOCGYnMM48iLGF", "number": 462, "state": "closed", "locked": 0, "title": "Discord badge", "user": {"value": 9599, "label": "simonw"}, "body": "Also testing fix for:\r\n- https://github.com/readthedocs/readthedocs-preview/issues/10\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://sqlite-utils--462.org.readthedocs.build/en/462/\n\r\n", "created_at": "2022-08-02T20:56:04Z", "updated_at": "2022-08-02T21:15:57Z", "closed_at": "2022-08-02T21:15:52Z", "merged_at": "2022-08-02T21:15:52Z", "merge_commit_sha": "271433fdd18e436b0a527ab899cb6f6fa67f23d0", "assignee": null, "milestone": null, "draft": 0, "head": "0a14a031385f2647be0b9d15d96c1d44d05c2296", "base": "98a28cbfe6cea67f6334b42b74f35b0ddd309561", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/462", "merged_by": null, "auto_merge": null} {"id": 719998225, "node_id": "MDExOlB1bGxSZXF1ZXN0NzE5OTk4MjI1", "number": 322, "state": "closed", "locked": 0, "title": "Add dict type to be mapped as TEXT in sqllite", "user": {"value": 2496189, "label": "minaeid90"}, "body": "the library deal with Postgres type jsonb as dictionary, add dict type as a TEXT for mapping to sqlite\r\n\r\n", "created_at": "2021-08-25T20:54:26Z", "updated_at": "2021-11-15T00:27:40Z", "closed_at": "2021-11-15T00:27:40Z", "merged_at": "2021-11-15T00:27:40Z", "merge_commit_sha": "271b894af52eb6437ae6cd84eba9867ad8dd43f6", "assignee": null, "milestone": null, "draft": 0, "head": "69619f68c26478fdee479110e084fd22711013a3", "base": "77c240df56068341561e95e4a412cbfa24dc5bc7", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/322", "merged_by": null, "auto_merge": null} {"id": 1154884166, "node_id": "PR_kwDOBm6k_c5E1iJG", "number": 1938, "state": "closed", "locked": 0, "title": "\"permissions\" blocks in metadata.json/yaml", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1636\r\n\r\n- [x] Documentation\r\n- [ ] Implementation\r\n- [ ] Validate metadata to check there are no nonsensical permissions (like `debug-menu` set at the table level)\r\n- [ ] Tests\r\n\r\n\r\n----\r\n:books: Documentation preview :books:: https://datasette--1938.org.readthedocs.build/en/1938/\r\n\r\n", "created_at": "2022-12-08T22:07:36Z", "updated_at": "2022-12-13T05:23:19Z", "closed_at": "2022-12-13T05:23:18Z", "merged_at": null, "merge_commit_sha": "271ea3ae0c858de2d392b61a1a4a9f5837cbddf8", "assignee": null, "milestone": {"value": 8711695, "label": " Datasette 1.0a2"}, "draft": 0, "head": "6e35a6b4f7ea9ba3fb6f02f45452eeb41de69786", "base": "e539c1c024bc62d88df91d9107cbe37e7f0fe55f", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1938", "merged_by": null, "auto_merge": null} {"id": 1144085408, "node_id": "PR_kwDOBm6k_c5EMVug", "number": 1931, "state": "closed", "locked": 0, "title": "/db/table/-/upsert", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1878\r\n\r\nStill todo:\r\n- [x] Support `\"return\": true` properly for upserts (with tests)\r\n- [x] Require both `insert-row` and `update-row` permissions\r\n- [x] Tests are going to need to cover both rowid-only and compound primary key tables, including all of the error states\r\n- [x] Documentation\r\n\r\n\r\n----\r\n:books: Documentation preview :books:: https://datasette--1931.org.readthedocs.build/en/1931/\r\n\r\n", "created_at": "2022-12-03T07:01:44Z", "updated_at": "2022-12-08T01:12:17Z", "closed_at": "2022-12-08T01:12:16Z", "merged_at": "2022-12-08T01:12:16Z", "merge_commit_sha": "272982e8a6f45700ff93c3917b4688a86de0e672", "assignee": null, "milestone": {"value": 8711695, "label": " Datasette 1.0a2"}, "draft": 0, "head": "7cd6fd9f76913196d4f99a194a30e406f33aa363", "base": "93ababe6f7150454d2cf278dae08569e505d2a5b", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1931", "merged_by": null, "auto_merge": null} {"id": 1235909998, "node_id": "PR_kwDOCGYnMM5Jqn1u", "number": 528, "state": "closed", "locked": 0, "title": "Enable `Table.convert()` on falsey values", "user": {"value": 167893, "label": "mcarpenter"}, "body": "Fixes #527\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://sqlite-utils--528.org.readthedocs.build/en/528/\n\r\n", "created_at": "2023-02-10T00:04:09Z", "updated_at": "2023-05-08T21:08:23Z", "closed_at": "2023-05-08T21:08:23Z", "merged_at": null, "merge_commit_sha": "279fb2c85c6b3fc7b593aaf4245bd3a038bff5f0", "assignee": null, "milestone": null, "draft": 0, "head": "a09df3844ab91b70cebb7b888fc07cb21dffd01c", "base": "fc221f9b62ed8624b1d2098e564f525c84497969", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/528", "merged_by": null, "auto_merge": null} {"id": 298962551, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjk4OTYyNTUx", "number": 561, "state": "closed", "locked": 0, "title": "Fix typos", "user": {"value": 15278512, "label": "minho42"}, "body": "", "created_at": "2019-07-18T15:13:35Z", "updated_at": "2019-07-26T10:25:45Z", "closed_at": "2019-07-26T10:25:45Z", "merged_at": "2019-07-26T10:25:45Z", "merge_commit_sha": "27cb29365c9f5f6f1492968d1268497193ed75a2", "assignee": null, "milestone": null, "draft": 0, "head": "41341195075adc5093d33633d980657ecdac043c", "base": "a9453c4dda70bbf5122835e68f63db6ecbe1a6fc", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/561", "merged_by": null, "auto_merge": null} {"id": 1067890893, "node_id": "PR_kwDOBm6k_c4_prjN", "number": 1823, "state": "open", "locked": 0, "title": "Keyword-only arguments for a bunch of internal methods", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #1822\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1823.org.readthedocs.build/en/1823/\n\r\n", "created_at": "2022-09-27T00:44:59Z", "updated_at": "2022-10-05T04:37:54Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "28068a62ad6a8b76a1c9223c4ca78099cfd2ece5", "assignee": null, "milestone": null, "draft": 0, "head": "b545b6a04ed7b407331f991adce107691ac3ab97", "base": "5f9f567acbc58c9fcd88af440e68034510fb5d2b", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1823", "merged_by": null, "auto_merge": null} {"id": 1043733712, "node_id": "PR_kwDOBm6k_c4-NhzQ", "number": 1797, "state": "closed", "locked": 0, "title": "Bump black from 22.6.0 to 22.8.0", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [black](https://github.com/psf/black) from 22.6.0 to 22.8.0.\n
\nRelease notes\n

Sourced from black's releases.

\n
\n

22.8.0

\n

Highlights

\n
    \n
  • Python 3.11 is now supported, except for blackd as aiohttp does not support 3.11 as of publishing (#3234)
  • \n
  • This is the last release that supports running Black on Python 3.6 (formatting 3.6 code will continue to be supported until further notice)
  • \n
  • Reword the stability policy to say that we may, in rare cases, make changes that affect code that was not previously formatted by Black (#3155)
  • \n
\n

Stable style

\n
    \n
  • Fix an infinite loop when using # fmt: on/off in the middle of an expression or code block (#3158)
  • \n
  • Fix incorrect handling of # fmt: skip on colon (:) lines (#3148)
  • \n
  • Comments are no longer deleted when a line had spaces removed around power operators (#2874)
  • \n
\n

Preview style

\n
    \n
  • Single-character closing docstring quotes are no longer moved to their own line as this is invalid. This was a bug introduced in version 22.6.0. (#3166)
  • \n
  • --skip-string-normalization / -S now prevents docstring prefixes from being normalized as expected (#3168)
  • \n
  • When using --skip-magic-trailing-comma or -C, trailing commas are stripped from subscript expressions with more than 1 element (#3209)
  • \n
  • Implicitly concatenated strings inside a list, set, or tuple are now wrapped inside parentheses (#3162)
  • \n
  • Fix a string merging/split issue when a comment is present in the middle of implicitly concatenated strings on its own line (#3227)
  • \n
\n

Blackd

\n
    \n
  • blackd now supports enabling the preview style via the X-Preview header (#3217)
  • \n
\n

Configuration

\n
    \n
  • Black now uses the presence of debug f-strings to detect target version (#3215)
  • \n
  • Fix misdetection of project root and verbose logging of sources in cases involving --stdin-filename (#3216)
  • \n
  • Immediate .gitignore files in source directories given on the command line are now also respected, previously only .gitignore files in the project root and automatically discovered directories were respected (#3237)
  • \n
\n

Documentation

\n
    \n
  • Recommend using BlackConnect in IntelliJ IDEs (#3150)
  • \n
\n

Integrations

\n
    \n
  • Vim plugin: prefix messages with Black: so it's clear they come from Black (#3194)
  • \n
  • Docker: changed to a /opt/venv installation + added to PATH to be available to non-root users (#3202)
  • \n
\n

Output

\n
    \n
  • Change from deprecated asyncio.get_event_loop() to create our event loop which removes DeprecationWarning (#3164)
  • \n
  • Remove logging from internal blib2to3 library since it regularly emits error logs about failed caching that can and should be ignored (#3193)
  • \n
\n

Parser

\n
    \n
  • Type comments are now included in the AST equivalence check consistently so accidental deletion raises an error. Though type comments can't be tracked when running on PyPy 3.7 due to standard library limitations. (#2874)
  • \n
\n

Performance

\n\n
\n

... (truncated)

\n
\n
\nChangelog\n

Sourced from black's changelog.

\n
\n

22.8.0

\n

Highlights

\n
    \n
  • Python 3.11 is now supported, except for blackd as aiohttp does not support 3.11 as\nof publishing (#3234)
  • \n
  • This is the last release that supports running Black on Python 3.6 (formatting 3.6\ncode will continue to be supported until further notice)
  • \n
  • Reword the stability policy to say that we may, in rare cases, make changes that\naffect code that was not previously formatted by Black (#3155)
  • \n
\n

Stable style

\n
    \n
  • Fix an infinite loop when using # fmt: on/off in the middle of an expression or code\nblock (#3158)
  • \n
  • Fix incorrect handling of # fmt: skip on colon (:) lines (#3148)
  • \n
  • Comments are no longer deleted when a line had spaces removed around power operators\n(#2874)
  • \n
\n

Preview style

\n
    \n
  • Single-character closing docstring quotes are no longer moved to their own line as\nthis is invalid. This was a bug introduced in version 22.6.0. (#3166)
  • \n
  • --skip-string-normalization / -S now prevents docstring prefixes from being\nnormalized as expected (#3168)
  • \n
  • When using --skip-magic-trailing-comma or -C, trailing commas are stripped from\nsubscript expressions with more than 1 element (#3209)
  • \n
  • Implicitly concatenated strings inside a list, set, or tuple are now wrapped inside\nparentheses (#3162)
  • \n
  • Fix a string merging/split issue when a comment is present in the middle of implicitly\nconcatenated strings on its own line (#3227)
  • \n
\n

Blackd

\n
    \n
  • blackd now supports enabling the preview style via the X-Preview header (#3217)
  • \n
\n

Configuration

\n
    \n
  • Black now uses the presence of debug f-strings to detect target version (#3215)
  • \n
  • Fix misdetection of project root and verbose logging of sources in cases involving\n--stdin-filename (#3216)
  • \n
  • Immediate .gitignore files in source directories given on the command line are now\nalso respected, previously only .gitignore files in the project root and\nautomatically discovered directories were respected (#3237)
  • \n
\n

Documentation

\n
    \n
  • Recommend using BlackConnect in IntelliJ IDEs (#3150)
  • \n
\n

Integrations

\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • 2018e66 Prepare docs for release 22.8.0 (#3248)
  • \n
  • 0019261 Update stable branch after publishing to PyPI (#3223)
  • \n
  • 7757078 Improve & update release process to reflect recent changes (#3242)
  • \n
  • 767604e Use .gitignore files in the initial source directories (#3237)
  • \n
  • 2c90480 Use strict mypy checking (#3222)
  • \n
  • ba618a3 Add parens around implicit string concatenations where it increases readabili...
  • \n
  • c0cc19b Delay worker count determination
  • \n
  • afed2c0 Load .gitignore and exclude regex at time of use
  • \n
  • e269f44 Lazily import parallelized format modules
  • \n
  • c47b91f Fix misdetection of project root with --stdin-filename (#3216)
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=black&package-manager=pip&previous-version=22.6.0&new-version=22.8.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1797.org.readthedocs.build/en/1797/\n\r\n", "created_at": "2022-09-01T13:25:14Z", "updated_at": "2022-09-05T18:51:52Z", "closed_at": "2022-09-05T18:51:52Z", "merged_at": "2022-09-05T18:51:52Z", "merge_commit_sha": "294ecd45f7801971dbeef383d0c5456ee95ab839", "assignee": null, "milestone": null, "draft": 0, "head": "84f9d32109bc92abb609b920ea4f5bef5fb558b9", "base": "51030df1869b3b574dd3584d1563415776b9cd4e", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1797", "merged_by": null, "auto_merge": null} {"id": 729632643, "node_id": "MDExOlB1bGxSZXF1ZXN0NzI5NjMyNjQz", "number": 1463, "state": "closed", "locked": 0, "title": "Update beautifulsoup4 requirement from <4.10.0,>=4.8.1 to >=4.8.1,<4.11.0", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Updates the requirements on [beautifulsoup4](http://www.crummy.com/software/BeautifulSoup/bs4/) to permit the latest version.\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
", "created_at": "2021-09-08T13:09:38Z", "updated_at": "2021-10-13T22:35:37Z", "closed_at": "2021-10-13T22:35:36Z", "merged_at": "2021-10-13T22:35:36Z", "merge_commit_sha": "2a8c6690399ee832ee62aafdede1794f5945d911", "assignee": null, "milestone": null, "draft": 0, "head": "481212cdfc5fa372423e5e67047a3febaa8941b6", "base": "e1012e7098056734d9c90f081493991009253390", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1463", "merged_by": null, "auto_merge": null} {"id": 187668890, "node_id": "MDExOlB1bGxSZXF1ZXN0MTg3NjY4ODkw", "number": 257, "state": "closed", "locked": 0, "title": "Refactor views", "user": {"value": 9599, "label": "simonw"}, "body": "* Split out view classes from main `app.py`\r\n* Run [black](https://github.com/ambv/black) against resulting code to apply opinionated source code formatting\r\n* Run [isort](https://github.com/timothycrosley/isort) to re-order my imports\r\n\r\nRefs #256 ", "created_at": "2018-05-13T13:00:50Z", "updated_at": "2018-05-14T03:04:25Z", "closed_at": "2018-05-14T03:04:24Z", "merged_at": "2018-05-14T03:04:24Z", "merge_commit_sha": "2b79f2bdeb1efa86e0756e741292d625f91cb93d", "assignee": null, "milestone": null, "draft": 0, "head": "0e2b41f3fa38456af32548c536f955c48c7637e8", "base": "4301a8f3ac69f2f54916e73cc90fcf216a9a3746", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/257", "merged_by": null, "auto_merge": null} {"id": 613178968, "node_id": "MDExOlB1bGxSZXF1ZXN0NjEzMTc4OTY4", "number": 1296, "state": "open", "locked": 0, "title": "Dockerfile: use Ubuntu 20.10 as base", "user": {"value": 82332573, "label": "tmcl-it"}, "body": "This PR changes the main Dockerfile to use ubuntu:20.10 as base image instead of python:3.9.2-slim-buster (itself based on debian:buster-slim).\r\n\r\nThe Dockerfile is essentially the one from https://github.com/simonw/datasette/issues/1249#issuecomment-803698983 with some additional cleanups to slim it down.\r\n\r\nThis fixes a couple of issues:\r\n1. The SQLite version in Debian Buster (2.6.0) doesn't support generated columns\r\n2. Installing SpatiaLite from the Debian sid repositories has the side effect of also installing updates to libc and libstdc++ from sid.\r\n\r\nAs a bonus, the Docker image becomes smaller:\r\n\r\n\r\n```\r\n$ docker image ls\r\nREPOSITORY TAG IMAGE ID CREATED SIZE\r\ndatasette 0.56-ubuntu f7aca255140a 5 hours ago 212MB\r\ndatasetteproject/datasette 0.56 efb3b282f390 13 days ago 258MB\r\n```\r\n\r\n### Reproduction of the first issue\r\n\r\n```\r\n$ curl -O https://latest.datasette.io/fixtures.db\r\n % Total % Received % Xferd Average Speed Time Time Time Current\r\n Dload Upload Total Spent Left Speed\r\n100 260k 0 260k 0 0 489k 0 --:--:-- --:--:-- --:--:-- 489k\r\n\r\n$ docker run -v `pwd`:/mnt datasetteproject/datasette:0.56 datasette /mnt/fixtures.db\r\nTraceback (most recent call last):\r\n File \"/usr/local/bin/datasette\", line 8, in \r\n sys.exit(cli())\r\n File \"/usr/local/lib/python3.9/site-packages/click/core.py\", line 829, in __call__\r\n return self.main(*args, **kwargs)\r\n File \"/usr/local/lib/python3.9/site-packages/click/core.py\", line 782, in main\r\n rv = self.invoke(ctx)\r\n File \"/usr/local/lib/python3.9/site-packages/click/core.py\", line 1259, in invoke\r\n return _process_result(sub_ctx.command.invoke(sub_ctx))\r\n File \"/usr/local/lib/python3.9/site-packages/click/core.py\", line 1066, in invoke\r\n return ctx.invoke(self.callback, **ctx.params)\r\n File \"/usr/local/lib/python3.9/site-packages/click/core.py\", line 610, in invoke\r\n return callback(*args, **kwargs)\r\n File \"/usr/local/lib/python3.9/site-packages/datasette/cli.py\", line 544, in serve\r\n asyncio.get_event_loop().run_until_complete(check_databases(ds))\r\n File \"/usr/local/lib/python3.9/asyncio/base_events.py\", line 642, in run_until_complete\r\n return future.result()\r\n File \"/usr/local/lib/python3.9/site-packages/datasette/cli.py\", line 584, in check_databases\r\n await database.execute_fn(check_connection)\r\n File \"/usr/local/lib/python3.9/site-packages/datasette/database.py\", line 155, in execute_fn\r\n return await asyncio.get_event_loop().run_in_executor(\r\n File \"/usr/local/lib/python3.9/concurrent/futures/thread.py\", line 52, in run\r\n result = self.fn(*self.args, **self.kwargs)\r\n File \"/usr/local/lib/python3.9/site-packages/datasette/database.py\", line 153, in in_thread\r\n return fn(conn)\r\n File \"/usr/local/lib/python3.9/site-packages/datasette/utils/__init__.py\", line 892, in check_connection\r\n for r in conn.execute(\r\nsqlite3.DatabaseError: malformed database schema (generated_columns) - near \"AS\": syntax error\r\n```\r\n\r\nHere is the SQLite version:\r\n\r\n```\r\n$ docker run -v `pwd`:/mnt -it datasetteproject/datasette:0.56 /bin/bash\r\nroot@d9220d3b95dd:/# python3\r\nPython 3.9.2 (default, Mar 27 2021, 02:50:26) \r\n[GCC 8.3.0] on linux\r\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\r\n>>> import sqlite3\r\n>>> sqlite3.version\r\n'2.6.0'\r\n```\r\n\r\n### Reproduction of the second issue\r\n\r\n```\r\n$ docker build . -t datasette --build-arg VERSION=0.55\r\n[...snip...]\r\nThe following packages will be upgraded:\r\n libc-bin libc6 libstdc++6\r\n[...snip...]\r\nUnpacking libc6:amd64 (2.31-11) over (2.28-10) ...\r\n[...snip...]\r\nUnpacking libstdc++6:amd64 (10.2.1-6) over (8.3.0-6) ...\r\n[...snip...]\r\n```\r\n\r\nBoth libc and libstdc++ are backwards compatible, so the image still works, but it will result in a combination of libraries and Python versions that exists only in the Datasette image, so it's likely untested. In addition, since Debian sid is an always-changing rolling-release, the versions of libc, libstdc++, Spatialite, and their dependencies change frequently, so the library versions in the Datasette image will depend on the day when it was built.\r\n", "created_at": "2021-04-12T00:23:32Z", "updated_at": "2021-07-20T08:52:13Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "2ba522dbd7168a104a33621598c5a2460aae3e74", "assignee": null, "milestone": null, "draft": 0, "head": "8f00c312f6b8ab5cecbb8a698ab4ad659aabf4ef", "base": "c73af5dd72305f6a01ea94a2c76d52e5e26de38b", "author_association": "FIRST_TIME_CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1296", "merged_by": null, "auto_merge": null} {"id": 1080343782, "node_id": "PR_kwDOBm6k_c5AZLzm", "number": 1839, "state": "closed", "locked": 0, "title": "Bump black from 22.8.0 to 22.10.0", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [black](https://github.com/psf/black) from 22.8.0 to 22.10.0.\n
\nRelease notes\n

Sourced from black's releases.

\n
\n

22.10.0

\n

Highlights

\n
    \n
  • Runtime support for Python 3.6 has been removed. Formatting 3.6 code will still be\nsupported until further notice.
  • \n
\n

Stable style

\n
    \n
  • Fix a crash when # fmt: on is used on a different block level than # fmt: off\n(#3281)
  • \n
\n

Preview style

\n
    \n
  • Fix a crash when formatting some dicts with parenthesis-wrapped long string keys\n(#3262)
  • \n
\n

Configuration

\n
    \n
  • .ipynb_checkpoints directories are now excluded by default (#3293)
  • \n
  • Add --skip-source-first-line / -x option to ignore the first line of source code\nwhile formatting (#3299)
  • \n
\n

Packaging

\n
    \n
  • Executables made with PyInstaller will no longer crash when formatting several files\nat once on macOS. Native x86-64 executables for macOS are available once again.\n(#3275)
  • \n
  • Hatchling is now used as the build backend. This will not have any effect for users\nwho install Black with its wheels from PyPI. (#3233)
  • \n
  • Faster compiled wheels are now available for CPython 3.11 (#3276)
  • \n
\n

Blackd

\n
    \n
  • Windows style (CRLF) newlines will be preserved (#3257).
  • \n
\n

Integrations

\n
    \n
  • Vim plugin: add flag (g:black_preview) to enable/disable the preview style (#3246)
  • \n
  • Update GitHub Action to support formatting of Jupyter Notebook files via a jupyter\noption (#3282)
  • \n
  • Update GitHub Action to support use of version specifiers (e.g. <23) for Black\nversion (#3265)
  • \n
\n
\n
\n
\nChangelog\n

Sourced from black's changelog.

\n
\n

22.10.0

\n

Highlights

\n
    \n
  • Runtime support for Python 3.6 has been removed. Formatting 3.6 code will still be\nsupported until further notice.
  • \n
\n

Stable style

\n
    \n
  • Fix a crash when # fmt: on is used on a different block level than # fmt: off\n(#3281)
  • \n
\n

Preview style

\n
    \n
  • Fix a crash when formatting some dicts with parenthesis-wrapped long string keys\n(#3262)
  • \n
\n

Configuration

\n
    \n
  • .ipynb_checkpoints directories are now excluded by default (#3293)
  • \n
  • Add --skip-source-first-line / -x option to ignore the first line of source code\nwhile formatting (#3299)
  • \n
\n

Packaging

\n
    \n
  • Executables made with PyInstaller will no longer crash when formatting several files\nat once on macOS. Native x86-64 executables for macOS are available once again.\n(#3275)
  • \n
  • Hatchling is now used as the build backend. This will not have any effect for users\nwho install Black with its wheels from PyPI. (#3233)
  • \n
  • Faster compiled wheels are now available for CPython 3.11 (#3276)
  • \n
\n

Blackd

\n
    \n
  • Windows style (CRLF) newlines will be preserved (#3257).
  • \n
\n

Integrations

\n
    \n
  • Vim plugin: add flag (g:black_preview) to enable/disable the preview style (#3246)
  • \n
  • Update GitHub Action to support formatting of Jupyter Notebook files via a jupyter\noption (#3282)
  • \n
  • Update GitHub Action to support use of version specifiers (e.g. <23) for Black\nversion (#3265)
  • \n
\n
\n
\n
\nCommits\n\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=black&package-manager=pip&previous-version=22.8.0&new-version=22.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
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1839.org.readthedocs.build/en/1839/\n\r\n", "created_at": "2022-10-07T13:13:41Z", "updated_at": "2022-10-27T20:51:46Z", "closed_at": "2022-10-27T20:51:45Z", "merged_at": "2022-10-27T20:51:45Z", "merge_commit_sha": "2c36e45447494cd7505440943367e29ec57c8e72", "assignee": null, "milestone": null, "draft": 0, "head": "21da9bebfc4811314a49140b0c31e86b9d05009f", "base": "d2ca13b699d441a201c55cb72ff96919d3cd22bf", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1839", "merged_by": null, "auto_merge": null} {"id": 313383317, "node_id": "MDExOlB1bGxSZXF1ZXN0MzEzMzgzMzE3", "number": 60, "state": "closed", "locked": 0, "title": "db.triggers and table.triggers introspection", "user": {"value": 9599, "label": "simonw"}, "body": "Closes #59", "created_at": "2019-09-03T00:04:32Z", "updated_at": "2019-09-03T00:09:42Z", "closed_at": "2019-09-03T00:09:42Z", "merged_at": "2019-09-03T00:09:42Z", "merge_commit_sha": "2ca63e3b2de5408a860c6c7c1852deb9a138279e", "assignee": null, "milestone": null, "draft": 0, "head": "b0a27fbb34b4362ef192deb560612fabf046cd32", "base": "405e092d5916e70df10f82d15e9c052aa9ee8d80", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/60", "merged_by": null, "auto_merge": null} {"id": 424032445, "node_id": "MDExOlB1bGxSZXF1ZXN0NDI0MDMyNDQ1", "number": 769, "state": "closed", "locked": 0, "title": "Backport of Python 3.8 shutil.copytree", "user": {"value": 9599, "label": "simonw"}, "body": "Closes #744", "created_at": "2020-05-27T18:17:15Z", "updated_at": "2020-05-27T20:21:56Z", "closed_at": "2020-05-27T18:17:44Z", "merged_at": "2020-05-27T18:17:44Z", "merge_commit_sha": "2d099ad9c657d2cab59de91cdb8bfed2da236ef6", "assignee": null, "milestone": {"value": 5471110, "label": "Datasette 0.43"}, "draft": 0, "head": "6f80757f27e4651e6533856ea87b676dbc0d9c37", "base": "cee671a58f417f827d1735b1abaa40716534ea67", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/769", "merged_by": null, "auto_merge": null} {"id": 453890292, "node_id": "MDExOlB1bGxSZXF1ZXN0NDUzODkwMjky", "number": 901, "state": "closed", "locked": 0, "title": "Use None as a default arg", "user": {"value": 56323389, "label": "Alyetama"}, "body": "When passing a mutable value as a default argument in a function, the default argument is mutated anytime that value is mutated. This poses a bug risk. Instead, use None as a default and assign the mutable value inside the function.", "created_at": "2020-07-20T22:18:38Z", "updated_at": "2020-07-31T18:42:39Z", "closed_at": "2020-07-31T18:42:39Z", "merged_at": "2020-07-31T18:42:39Z", "merge_commit_sha": "2d7fa8b9058dfbf9c7c371cdeec115d32a177dc9", "assignee": null, "milestone": null, "draft": 0, "head": "1285f28d82d9ca97e7543bb87fc6ff462855debe", "base": "d9a5ef1c32a4390e398653ebfd570f8e1a03d93e", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/901", "merged_by": null, "auto_merge": null} {"id": 313384926, "node_id": "MDExOlB1bGxSZXF1ZXN0MzEzMzg0OTI2", "number": 571, "state": "closed", "locked": 0, "title": "detect_fts now works with alternative table escaping", "user": {"value": 9599, "label": "simonw"}, "body": "Fixes #570", "created_at": "2019-09-03T00:23:39Z", "updated_at": "2019-09-03T00:32:28Z", "closed_at": "2019-09-03T00:32:28Z", "merged_at": "2019-09-03T00:32:28Z", "merge_commit_sha": "2dc5c8dc259a0606162673d394ba8cc1c6f54428", "assignee": null, "milestone": null, "draft": 0, "head": "a85239f69261c10f1a9f90514c8b5d113cb94585", "base": "f04deebec4f3842f7bd610cd5859de529f77d50e", "author_association": "OWNER", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/571", "merged_by": null, "auto_merge": null} {"id": 928210171, "node_id": "PR_kwDOBm6k_c43U1z7", "number": 1740, "state": "closed", "locked": 0, "title": "chore: Set permissions for GitHub actions", "user": {"value": 172697, "label": "naveensrinivasan"}, "body": " Restrict the GitHub token permissions only to the required ones; this way, even if the attackers will succeed in compromising your workflow, they won\u2019t be able to do much.\n\n- Included permissions for the action. https://github.com/ossf/scorecard/blob/main/docs/checks.md#token-permissions\n\nhttps://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions\n\nhttps://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs\n\n[Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/)\n\nSigned-off-by: naveen <172697+naveensrinivasan@users.noreply.github.com>\n", "created_at": "2022-05-05T01:03:08Z", "updated_at": "2022-05-31T19:28:41Z", "closed_at": "2022-05-31T19:28:40Z", "merged_at": "2022-05-31T19:28:40Z", "merge_commit_sha": "2e9751672d4fe329b3c359d5b7b1992283185820", "assignee": null, "milestone": null, "draft": 0, "head": "f76fce5fd2bacadf2f46656e32093c6d639270c9", "base": "280ff372ab30df244f6c54f6f3002da57334b3d7", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1740", "merged_by": null, "auto_merge": null} {"id": 1058623570, "node_id": "PR_kwDOBm6k_c4_GVBS", "number": 1812, "state": "closed", "locked": 0, "title": "Bump furo from 2022.6.21 to 2022.9.15", "user": {"value": 49699333, "label": "dependabot[bot]"}, "body": "Bumps [furo](https://github.com/pradyunsg/furo) from 2022.6.21 to 2022.9.15.\n
\nChangelog\n

Sourced from furo's changelog.

\n
\n

Changelog

\n\n

2022.09.15 -- Pragmatic Pistachio

\n
    \n
  • Add a minimum version constraint on pygments.
  • \n
  • Add an explicit dependency on sass.
  • \n
  • Change right sidebar title from "Contents" to "On this page".
  • \n
  • Correctly position sidebars on small screens.
  • \n
  • Correctly select only Furo's own svg in related pages nav.
  • \n
  • Make numpy-style documentation headers consistent.
  • \n
  • Retitle the reference section.
  • \n
  • Update npm dependencies.
  • \n
\n

2022.06.21 -- Opulent Opal

\n
    \n
  • Fix docutils <= 0.17.x compatibility.
  • \n
  • Bump to the latest Node.js LTS.
  • \n
\n

2022.06.04.1 -- Naughty Nickel bugfix

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

2022.06.04 -- Naughty Nickel

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

2022.04.07 -- Magical Mauve

\n
    \n
  • \u2728 Make sphinx-copybutton look better.
  • \n
  • Add margin to indentations in line blocks.
  • \n
  • Add styling for non-arabic list styles
  • \n
  • Add support for html_baseurl.
  • \n
\n\n
\n

... (truncated)

\n
\n
\nCommits\n
    \n
  • 08e6b38 Prepare release: 2022.09.15
  • \n
  • 9de7613 Update changelog
  • \n
  • a064929 Tweak changelog content style
  • \n
  • 46f4adc Revert "Add initial theme.conf content for eventual ablog support"
  • \n
  • 45b839b Set a minimum constraint on pygments
  • \n
  • a4af988 [pre-commit.ci] pre-commit autoupdate (#518)
  • \n
  • a72186f [pre-commit.ci] pre-commit autoupdate (#504)
  • \n
  • 9f41ee6 Add initial theme.conf content for eventual ablog support
  • \n
  • 75e0361 Make numpy-style documentation headers consistent
  • \n
  • 9d280e6 [pre-commit.ci] pre-commit autoupdate (#487)
  • \n
  • Additional commits viewable in compare view
  • \n
\n
\n
\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=furo&package-manager=pip&previous-version=2022.6.21&new-version=2022.9.15)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n
\r\n\r\n\r\n----\n:books: Documentation preview :books:: https://datasette--1812.org.readthedocs.build/en/1812/\n\r\n", "created_at": "2022-09-16T13:10:45Z", "updated_at": "2022-09-16T19:50:53Z", "closed_at": "2022-09-16T19:50:52Z", "merged_at": "2022-09-16T19:50:52Z", "merge_commit_sha": "2ebcffe2226ece2a5a86722790d486a480338632", "assignee": null, "milestone": null, "draft": 0, "head": "b3855e7b57d2f2354296b23e8c12df82e9af729e", "base": "b40872f5e5ae5dad331c58f75451e2d206565196", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1812", "merged_by": null, "auto_merge": null} {"id": 816927546, "node_id": "PR_kwDOCGYnMM4wsVM6", "number": 367, "state": "closed", "locked": 0, "title": "Initial prototype of .analyze() methods", "user": {"value": 9599, "label": "simonw"}, "body": "Refs #366", "created_at": "2022-01-08T21:35:12Z", "updated_at": "2022-01-10T19:31:08Z", "closed_at": "2022-01-10T19:31:08Z", "merged_at": null, "merge_commit_sha": "2ffcbed6787523649dd676985f3ea70a62944764", "assignee": null, "milestone": {"value": 7558727, "label": "3.21"}, "draft": 1, "head": "9848eaa61b43de0ddb74ff6d085bcb18f4640f91", "base": "a8f9cc6f64f299830834428509940d448b82b4ed", "author_association": "OWNER", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/367", "merged_by": null, "auto_merge": null}