{"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": 152522762, "node_id": "MDExOlB1bGxSZXF1ZXN0MTUyNTIyNzYy", "number": 89, "state": "closed", "locked": 0, "title": "SQL syntax highlighting with CodeMirror", "user": {"value": 15543, "label": "tomdyson"}, "body": "Addresses #13 \r\n\r\nFuture enhancements could include autocompletion of table and column names, e.g. with\r\n\r\n```javascript\r\nextraKeys: {\"Ctrl-Space\": \"autocomplete\"},\r\nhintOptions: {tables: {\r\n users: [\"name\", \"score\", \"birthDate\"],\r\n countries: [\"name\", \"population\", \"size\"]\r\n }}\r\n```\r\n\r\n(see https://codemirror.net/doc/manual.html#addon_sql-hint and source at http://codemirror.net/mode/sql/)", "created_at": "2017-11-14T14:43:33Z", "updated_at": "2017-11-15T02:03:01Z", "closed_at": "2017-11-15T02:03:01Z", "merged_at": "2017-11-15T02:03:01Z", "merge_commit_sha": "8252daa4c14d73b4b69e3f2db4576bb39d73c070", "assignee": null, "milestone": null, "draft": 0, "head": "7f6ad095e9c41bf24d73b7724d898965c419965b", "base": "075d422c0a1c70259188dfbd940538c67419694a", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/89", "merged_by": null, "auto_merge": null} {"id": 152631570, "node_id": "MDExOlB1bGxSZXF1ZXN0MTUyNjMxNTcw", "number": 94, "state": "closed", "locked": 0, "title": "Initial add simple prod ready Dockerfile refs #57", "user": {"value": 247192, "label": "macropin"}, "body": "Multi-stage build based off official python:3.6-slim\r\n\r\nExample usage:\r\n```\r\ndocker run --rm -t -i -p 9000:8001 -v $(pwd)/db:/db datasette datasette serve /db/chinook.db\r\n```", "created_at": "2017-11-14T22:09:09Z", "updated_at": "2017-11-15T03:08:04Z", "closed_at": "2017-11-15T03:08:04Z", "merged_at": "2017-11-15T03:08:04Z", "merge_commit_sha": "86755503d26b4a83c2ec59f08ec1b8de791fd954", "assignee": null, "milestone": null, "draft": 0, "head": "147195c2fdfa2b984d8f9fc1c6cab6634970a056", "base": "075d422c0a1c70259188dfbd940538c67419694a", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/94", "merged_by": null, "auto_merge": null} {"id": 152870030, "node_id": "MDExOlB1bGxSZXF1ZXN0MTUyODcwMDMw", "number": 104, "state": "closed", "locked": 0, "title": "[WIP] Add publish to heroku support", "user": {"value": 21148, "label": "jacobian"}, "body": "\r\n\r\nRefs #90 ", "created_at": "2017-11-15T19:56:22Z", "updated_at": "2017-11-21T20:55:05Z", "closed_at": "2017-11-21T20:55:05Z", "merged_at": "2017-11-21T20:55:05Z", "merge_commit_sha": "e47117ce1d15f11246a3120aa49de70205713d05", "assignee": null, "milestone": null, "draft": 0, "head": "de42240afd1e3829fd21cbe77a89ab0eaab20d78", "base": "0331666e346c68b86de4aa19fbb37f3a408d37ca", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/104", "merged_by": null, "auto_merge": null} {"id": 152914480, "node_id": "MDExOlB1bGxSZXF1ZXN0MTUyOTE0NDgw", "number": 107, "state": "closed", "locked": 0, "title": "add support for ?field__isnull=1", "user": {"value": 3433657, "label": "raynae"}, "body": "Is this what you had in mind for [this issue](https://github.com/simonw/datasette/issues/64)?", "created_at": "2017-11-15T23:36:36Z", "updated_at": "2017-11-17T15:12:29Z", "closed_at": "2017-11-17T13:29:22Z", "merged_at": "2017-11-17T13:29:22Z", "merge_commit_sha": "ed2b3f25beac720f14869350baacc5f62b065194", "assignee": null, "milestone": null, "draft": 0, "head": "14d5bb572fadbd45973580bd9ad2a16c2bf12909", "base": "b7c4165346ee8b6a6fbd72d6ba2275a24a8a8ae3", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/107", "merged_by": null, "auto_merge": null} {"id": 153201945, "node_id": "MDExOlB1bGxSZXF1ZXN0MTUzMjAxOTQ1", "number": 114, "state": "closed", "locked": 0, "title": "Add spatialite, switch to debian and local build", "user": {"value": 54999, "label": "ingenieroariel"}, "body": "Improves the Dockerfile to support spatial datasets, work with the local datasette code (Friendly with git tags and Dockerhub) and moves to slim debian, a small image easy to extend via apt packages for sqlite.", "created_at": "2017-11-17T02:37:09Z", "updated_at": "2017-11-17T03:50:52Z", "closed_at": "2017-11-17T03:50:52Z", "merged_at": "2017-11-17T03:50:52Z", "merge_commit_sha": "8b4c600d98b85655b3a1454ebf64f858b5fe54c8", "assignee": null, "milestone": null, "draft": 0, "head": "6c6b63d890529eeefcefb7ab126ea3bd7b2315c1", "base": "b7c4165346ee8b6a6fbd72d6ba2275a24a8a8ae3", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/114", "merged_by": null, "auto_merge": null} {"id": 153306882, "node_id": "MDExOlB1bGxSZXF1ZXN0MTUzMzA2ODgy", "number": 115, "state": "closed", "locked": 0, "title": "Add keyboard shortcut to execute SQL query", "user": {"value": 198537, "label": "rgieseke"}, "body": "Very cool tool, thanks a lot!\r\n\r\nThis PR adds a `Shift-Enter` short cut to execute the SQL query. I used CodeMirrors keyboard handling.", "created_at": "2017-11-17T14:13:33Z", "updated_at": "2017-11-17T15:16:34Z", "closed_at": "2017-11-17T14:22:56Z", "merged_at": "2017-11-17T14:22:56Z", "merge_commit_sha": "eda848b37f8452dba7913583ef101f39d9b130ba", "assignee": null, "milestone": null, "draft": 0, "head": "bb514164e69400fc0be4e033c27f45f90b1ef651", "base": "ed2b3f25beac720f14869350baacc5f62b065194", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/115", "merged_by": null, "auto_merge": null} {"id": 153324301, "node_id": "MDExOlB1bGxSZXF1ZXN0MTUzMzI0MzAx", "number": 117, "state": "closed", "locked": 0, "title": "Don't prevent tabbing to `Run SQL` button", "user": {"value": 198537, "label": "rgieseke"}, "body": "Mentioned in #115 \r\n\r\nHere you go!", "created_at": "2017-11-17T15:27:50Z", "updated_at": "2017-11-19T20:30:24Z", "closed_at": "2017-11-18T00:53:43Z", "merged_at": "2017-11-18T00:53:43Z", "merge_commit_sha": "6d39429daa4655e3cf7a6a7671493292a20a30a1", "assignee": null, "milestone": null, "draft": 0, "head": "7b4d00e87ed8ac931e6f5458599aece1a95d4e82", "base": "eda848b37f8452dba7913583ef101f39d9b130ba", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/117", "merged_by": null, "auto_merge": null} {"id": 161982711, "node_id": "MDExOlB1bGxSZXF1ZXN0MTYxOTgyNzEx", "number": 178, "state": "closed", "locked": 0, "title": "If metadata exists, add it to heroku launch command", "user": {"value": 82988, "label": "psychemedia"}, "body": "The heroku build does seem to make use of any provided `metadata.json` file.\r\n\r\nAdd the `--metadata` switch to the Heroku web launch command if a `metadata.json` file is available.\r\n\r\nAddresses: https://github.com/simonw/datasette/issues/177", "created_at": "2018-01-09T21:42:21Z", "updated_at": "2018-01-15T09:42:46Z", "closed_at": "2018-01-14T21:05:16Z", "merged_at": "2018-01-14T21:05:16Z", "merge_commit_sha": "3a56a2cd7eea5d477d5d936b01098be5cba0d98e", "assignee": null, "milestone": null, "draft": 0, "head": "1bc9ed98c4f4fd91b70560ac8f507a2fddbd8317", "base": "306e1c6ac4f00cc25d676a6ee660938f5b27427c", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/178", "merged_by": null, "auto_merge": null} {"id": 163523976, "node_id": "MDExOlB1bGxSZXF1ZXN0MTYzNTIzOTc2", "number": 180, "state": "closed", "locked": 0, "title": "make html title more readable in query template", "user": {"value": 56477, "label": "ryanpitts"}, "body": "tiny tweak to make this easier to visually parse\u2014I think it matches your style in other templates", "created_at": "2018-01-17T18:56:03Z", "updated_at": "2018-04-03T16:03:38Z", "closed_at": "2018-04-03T15:24:05Z", "merged_at": "2018-04-03T15:24:05Z", "merge_commit_sha": "446d47fdb005b3776bc06ad8d1f44b01fc2e938b", "assignee": null, "milestone": null, "draft": 0, "head": "dc900b2f587c839e97389aaca70140fb06b4d40b", "base": "56623e48da5412b25fb39cc26b9c743b684dd968", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/180", "merged_by": null, "auto_merge": null} {"id": 165029807, "node_id": "MDExOlB1bGxSZXF1ZXN0MTY1MDI5ODA3", "number": 182, "state": "closed", "locked": 0, "title": "Add db filesize next to download link", "user": {"value": 3433657, "label": "raynae"}, "body": "Took a stab at #172, will this do the trick?", "created_at": "2018-01-25T04:58:56Z", "updated_at": "2019-03-22T13:50:57Z", "closed_at": "2019-02-06T04:59:38Z", "merged_at": null, "merge_commit_sha": "a8d9e69872dec9a551b25cd609ffdbf3896045bd", "assignee": null, "milestone": null, "draft": 0, "head": "b62835205a830472abb66c708822c2dcdf4ab027", "base": "56623e48da5412b25fb39cc26b9c743b684dd968", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/182", "merged_by": null, "auto_merge": null} {"id": 181033024, "node_id": "MDExOlB1bGxSZXF1ZXN0MTgxMDMzMDI0", "number": 200, "state": "closed", "locked": 0, "title": "Hide Spatialite system tables", "user": {"value": 45057, "label": "russss"}, "body": "They were getting on my nerves.", "created_at": "2018-04-11T21:26:58Z", "updated_at": "2018-04-12T21:34:48Z", "closed_at": "2018-04-12T21:34:48Z", "merged_at": "2018-04-12T21:34:48Z", "merge_commit_sha": "d08a13314081ae2ce0313a17d3c07c1a7f2d94d5", "assignee": null, "milestone": null, "draft": 0, "head": "765b5d677154c633b91e3e826dfffc53b7c4b5d3", "base": "bfb4e45a7bcb880758dbc18f66258de26c1d1904", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/200", "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": 181600926, "node_id": "MDExOlB1bGxSZXF1ZXN0MTgxNjAwOTI2", "number": 204, "state": "closed", "locked": 0, "title": "Initial units support", "user": {"value": 45057, "label": "russss"}, "body": "Add support for specifying units for a column in metadata.json and rendering them on display using [pint](https://pint.readthedocs.io/en/latest/).\r\n\r\nExample table metadata:\r\n```json\r\n \"license_frequency\": {\r\n \"units\": {\r\n \"frequency\": \"Hz\",\r\n \"channel_width\": \"Hz\",\r\n \"height\": \"m\",\r\n \"antenna_height\": \"m\",\r\n \"azimuth\": \"degrees\"\r\n }\r\n }\r\n```\r\n\r\n[Example result](https://wtr-api.herokuapp.com/wtr-663ea99/license_frequency/1)\r\n\r\nThis works surprisingly well! I'd like to add support for using units when querying but this is PR is pretty usable as-is.\r\n\r\n(Pint doesn't seem to support decibels though - it thinks they're decibytes - which is an annoying omission.)\r\n\r\n(ref ticket #203)", "created_at": "2018-04-13T21:32:49Z", "updated_at": "2018-04-14T09:44:33Z", "closed_at": "2018-04-14T03:32:54Z", "merged_at": "2018-04-14T03:32:54Z", "merge_commit_sha": "ec6abc81e433c9bac1b9f085111785fc227e9e34", "assignee": null, "milestone": null, "draft": 0, "head": "67c20a98a0cbb59a10247a49320c2feb7d0b1b41", "base": "fb988ace7c7e2bee5ac142a0eab22431d0675a77", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/204", "merged_by": null, "auto_merge": null} {"id": 181642114, "node_id": "MDExOlB1bGxSZXF1ZXN0MTgxNjQyMTE0", "number": 205, "state": "closed", "locked": 0, "title": "Support filtering with units and more", "user": {"value": 45057, "label": "russss"}, "body": "The first commit:\r\n* Adds units to exported JSON\r\n* Adds units key to metadata skeleton\r\n* Adds some docs for units\r\n\r\nThe second commit adds filtering by units by the first method I mentioned in #203:\r\n![image](https://user-images.githubusercontent.com/45057/38767463-7193be16-3fd9-11e8-8a5f-ac4159415c6d.png)\r\n\r\n[Try it here](https://wtr-api.herokuapp.com/wtr-663ea99/license_frequency?frequency__gt=50GHz&height__lt=50ft). I think it integrates pretty neatly.\r\n\r\nThe third commit adds support for registering custom units with Pint from metadata.json. Probably pretty niche, but I need decibels!", "created_at": "2018-04-14T10:47:51Z", "updated_at": "2018-04-14T15:24:04Z", "closed_at": "2018-04-14T15:24:04Z", "merged_at": null, "merge_commit_sha": "ed059c70e87a2930206652621e23a55167aa57c1", "assignee": null, "milestone": null, "draft": 0, "head": "eb3a37c34813ecbbfdae015305fec1f2a4ec27a5", "base": "6b15a53cd3cd40880a5e2d38827d5fac10e4bb5f", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/205", "merged_by": null, "auto_merge": null} {"id": 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": 181647717, "node_id": "MDExOlB1bGxSZXF1ZXN0MTgxNjQ3NzE3", "number": 207, "state": "closed", "locked": 0, "title": "Link foreign keys which don't have labels", "user": {"value": 45057, "label": "russss"}, "body": "This renders unlabeled FKs as simple links. I can't see why this would cause any major problems.\r\n\r\n![image](https://user-images.githubusercontent.com/45057/38768722-ea15a000-3fef-11e8-8664-ffd7aa4894ea.png)\r\n\r\nAlso includes bonus fixes for two minor issues:\r\n\r\n* In foreign key link hrefs the primary key was escaped using HTML escaping rather than URL escaping. This broke some non-integer PKs.\r\n* Print tracebacks to console when handling 500 errors.", "created_at": "2018-04-14T13:27:14Z", "updated_at": "2018-04-14T15:00:00Z", "closed_at": "2018-04-14T15:00:00Z", "merged_at": "2018-04-14T15:00:00Z", "merge_commit_sha": "f2b940d6026677f6859d46a4f16fa402745d261d", "assignee": null, "milestone": null, "draft": 0, "head": "d9858672da8f74e5530deead140e2e633e1c2627", "base": "ec6abc81e433c9bac1b9f085111785fc227e9e34", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/207", "merged_by": null, "auto_merge": null} {"id": 181654839, "node_id": "MDExOlB1bGxSZXF1ZXN0MTgxNjU0ODM5", "number": 208, "state": "closed", "locked": 0, "title": "Return HTTP 405 on InvalidUsage rather than 500", "user": {"value": 45057, "label": "russss"}, "body": "This also stops it filling up the logs. This happens for HEAD requests at the moment - which perhaps should be handled better, but that's a different issue.", "created_at": "2018-04-14T16:12:50Z", "updated_at": "2018-04-14T18:00:39Z", "closed_at": "2018-04-14T18:00:39Z", "merged_at": "2018-04-14T18:00:39Z", "merge_commit_sha": "efbb4e83374a2c795e436c72fa79f70da72309b8", "assignee": null, "milestone": null, "draft": 0, "head": "20e5fcf827046adf76968d0e58f47e0b7d9271c3", "base": "8d394586f55bc4b8ab70476968d08fb6ec8339e5", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/208", "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": 183135604, "node_id": "MDExOlB1bGxSZXF1ZXN0MTgzMTM1NjA0", "number": 232, "state": "closed", "locked": 0, "title": "Fix a typo", "user": {"value": 45281, "label": "lsb"}, "body": "It looks like this was the only instance of it: https://github.com/simonw/datasette/search?utf8=%E2%9C%93&q=SOLite&type=", "created_at": "2018-04-20T18:20:04Z", "updated_at": "2018-04-21T00:19:08Z", "closed_at": "2018-04-21T00:19:08Z", "merged_at": "2018-04-21T00:19:08Z", "merge_commit_sha": "a971718d2a5e1b61b5e5c27b0ef6c4ec65616e35", "assignee": null, "milestone": null, "draft": 0, "head": "b0f0f16a1c1f48aba62dfa30fa039dc6d3c07802", "base": "3a5d7951ce8f35118ffdd7f8d86e09b909e1218c", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/232", "merged_by": null, "auto_merge": null} {"id": 189318453, "node_id": "MDExOlB1bGxSZXF1ZXN0MTg5MzE4NDUz", "number": 277, "state": "closed", "locked": 0, "title": "Refactor inspect logic", "user": {"value": 45057, "label": "russss"}, "body": "This pulls the logic for inspect out into a new file which makes it a bit easier to understand.\r\n\r\nThis was going to be the first part of an implementation for #276, but it seems like that might take a while so I'm going to PR a few bits of refactoring individually.", "created_at": "2018-05-21T08:49:31Z", "updated_at": "2018-05-22T16:07:24Z", "closed_at": "2018-05-22T14:03:07Z", "merged_at": "2018-05-22T14:03:07Z", "merge_commit_sha": "58b5a37dbbf13868a46bcbb284509434e66eca25", "assignee": null, "milestone": null, "draft": 0, "head": "0b81e047ad27b67ba17e8c176e38a94cf4548115", "base": "d59366d36e95b973d674e62edff0168d5bdd90eb", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/277", "merged_by": null, "auto_merge": null} {"id": 189707374, "node_id": "MDExOlB1bGxSZXF1ZXN0MTg5NzA3Mzc0", "number": 279, "state": "closed", "locked": 0, "title": "Add version number support with Versioneer", "user": {"value": 198537, "label": "rgieseke"}, "body": "I think that's all for getting Versioneer support, I've been happily using it in a couple of projects ... \r\n\r\n```\r\nIn [2]: datasette.__version__\r\nOut[2]: '0.22+3.g6e12445'\r\n```\r\nRepo:\r\nhttps://github.com/warner/python-versioneer\r\n\r\nVersioneer Licence:\r\nPublic Domain (CC0-1.0)\r\n\r\nCloses #273\r\n", "created_at": "2018-05-22T15:39:45Z", "updated_at": "2018-05-22T19:35:23Z", "closed_at": "2018-05-22T19:35:22Z", "merged_at": "2018-05-22T19:35:22Z", "merge_commit_sha": "49f317752cfe89c5641165a490eef49e025752a7", "assignee": null, "milestone": null, "draft": 0, "head": "d0d19453e8623cc98a2baa2cadaaff4cd2fee973", "base": "58b5a37dbbf13868a46bcbb284509434e66eca25", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/279", "merged_by": null, "auto_merge": null} {"id": 189723716, "node_id": "MDExOlB1bGxSZXF1ZXN0MTg5NzIzNzE2", "number": 280, "state": "closed", "locked": 0, "title": "Build Dockerfile with recent Sqlite + Spatialite", "user": {"value": 565628, "label": "r4vi"}, "body": "This solves #278 without bloating the Dockerfile too much, the image size is now\r\n495MB (original was ~240MB) but it could be reduced significantly if we only\r\ncopied the output of the compilation of spatialite and friends to\r\n/usr/local/lib, instead of the entirety of it however that will take more time.\r\n\r\nIn the python code change references to `import sqlite3` to `import pysqlite3`\r\nand it should use the compiled version of sqlite3.23.1. You don't need to\r\ntry/except because pysqlite3 falls back to builtin sqlite3 if there is no\r\ncompiled version.\r\n\r\n```bash\r\n $ docker run --rm -it datasette spatialite\r\n SpatiaLite version ..: 4.4.0-RC0\tSupported Extensions:\r\n - 'VirtualShape'\t[direct Shapefile access]\r\n - 'VirtualDbf'\t\t[direct DBF access]\r\n - 'VirtualXL'\t\t[direct XLS access]\r\n - 'VirtualText'\t\t[direct CSV/TXT access]\r\n - 'VirtualNetwork'\t[Dijkstra shortest path]\r\n - 'RTree'\t\t[Spatial Index - R*Tree]\r\n - 'MbrCache'\t\t[Spatial Index - MBR cache]\r\n - 'VirtualSpatialIndex'\t[R*Tree metahandler]\r\n - 'VirtualElementary'\t[ElemGeoms metahandler]\r\n - 'VirtualKNN'\t[K-Nearest Neighbors metahandler]\r\n - 'VirtualXPath'\t[XML Path Language - XPath]\r\n - 'VirtualFDO'\t\t[FDO-OGR interoperability]\r\n - 'VirtualGPKG'\t[OGC GeoPackage interoperability]\r\n - 'VirtualBBox'\t\t[BoundingBox tables]\r\n - 'SpatiaLite'\t\t[Spatial SQL - OGC]\r\n PROJ.4 version ......: Rel. 4.9.3, 15 August 2016\r\n GEOS version ........: 3.5.1-CAPI-1.9.1 r4246\r\n TARGET CPU ..........: x86_64-linux-gnu\r\n the SPATIAL_REF_SYS table already contains some row(s)\r\n SQLite version ......: 3.23.1\r\n Enter \".help\" for instructions\r\n SQLite version 3.23.1 2018-04-10 17:39:29\r\n Enter \".help\" for instructions\r\n Enter SQL statements terminated with a \";\"\r\n spatialite>\r\n```\r\n\r\n```bash\r\n$ docker run --rm -it datasette python -c \"import pysqlite3; print(pysqlite3.sqlite_version)\"\r\n3.23.1\r\n```", "created_at": "2018-05-22T16:33:50Z", "updated_at": "2018-06-28T11:26:23Z", "closed_at": "2018-05-23T17:43:35Z", "merged_at": "2018-05-23T17:43:35Z", "merge_commit_sha": "bd30c696e18927207358ee9d63174a5c41c8297e", "assignee": null, "milestone": null, "draft": 0, "head": "5cf78eded61cacec435b854e18f1e94511cf2da8", "base": "58b5a37dbbf13868a46bcbb284509434e66eca25", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/280", "merged_by": null, "auto_merge": null} {"id": 201451332, "node_id": "MDExOlB1bGxSZXF1ZXN0MjAxNDUxMzMy", "number": 345, "state": "closed", "locked": 0, "title": "Allow app names for `datasette publish heroku`", "user": {"value": 45057, "label": "russss"}, "body": "Lets you supply the `-n` parameter for Heroku deploys, which also lets you update existing Heroku deployments.", "created_at": "2018-07-14T13:12:34Z", "updated_at": "2018-07-14T14:09:54Z", "closed_at": "2018-07-14T14:04:44Z", "merged_at": "2018-07-14T14:04:44Z", "merge_commit_sha": "58fec99ab0a31bcf25968f2aa05d37de8139b83c", "assignee": null, "milestone": null, "draft": 0, "head": "864cf8c1b01a581d6dc9711efe7cb4f2a6ac87e8", "base": "31a5d8fa77be68d4f837f0a80a611675dce49f4b", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/345", "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": 226314862, "node_id": "MDExOlB1bGxSZXF1ZXN0MjI2MzE0ODYy", "number": 367, "state": "closed", "locked": 0, "title": "Mark codemirror files as vendored", "user": {"value": 48517, "label": "jaap3"}, "body": "GitHub lists datasette as a Javascript project, primarily because of the vendored codemirror files. This is somewhat confusing when you're looking for datasette, knowing it's written in Python.\r\n\r\nLuckily it's possible exclude certain files from GitHub's code statistics: https://github.com/github/linguist#using-gitattributes", "created_at": "2018-10-27T18:41:25Z", "updated_at": "2019-05-03T21:12:09Z", "closed_at": "2019-05-03T21:11:20Z", "merged_at": "2019-05-03T21:11:20Z", "merge_commit_sha": "66c87cee0c7344c7877373c60b180c766c206101", "assignee": null, "milestone": null, "draft": 0, "head": "8e23e4548eedd58b0ff0e69c9a5010fc1a0136d5", "base": "6b398c2971801d9a20cfdb7998f59020d5534e22", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/367", "merged_by": null, "auto_merge": null} {"id": 226315513, "node_id": "MDExOlB1bGxSZXF1ZXN0MjI2MzE1NTEz", "number": 368, "state": "closed", "locked": 0, "title": "Update installation instructions", "user": {"value": 48517, "label": "jaap3"}, "body": "I was writing this as a response to your tweet, but decided I might just make it a pull request.\r\n\r\nI feel like it might be confusing to those unfamiliar with Python's `-m` flag and the built-in `venv` module to omit the space between the flag and its argument. By adding a space and prefixing the second occurrence of `venv` with a `./` it's maybe a bit clearer what the arguments are and what they do.\r\n\r\nBy also using `python3 -m pip` it becomes even clearer that `-m` is a special flag that makes the python executable do neat things.", "created_at": "2018-10-27T18:52:31Z", "updated_at": "2019-05-03T18:18:43Z", "closed_at": "2019-05-03T18:18:42Z", "merged_at": "2019-05-03T18:18:42Z", "merge_commit_sha": "f853d5592ec7f901a50381de22a26a9ab098f885", "assignee": null, "milestone": null, "draft": 0, "head": "8f8d6072820a13e2c698d9c326998b63810779c6", "base": "553314dcd699a84aa7cc806377150ca0d57a6024", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/368", "merged_by": null, "auto_merge": null} {"id": 235194286, "node_id": "MDExOlB1bGxSZXF1ZXN0MjM1MTk0Mjg2", "number": 390, "state": "closed", "locked": 0, "title": "tiny typo in customization docs", "user": {"value": 418191, "label": "jaywgraves"}, "body": "was looking to add some custom templates to my use of datasette and saw this small typo.", "created_at": "2018-12-01T13:44:42Z", "updated_at": "2019-12-19T02:30:35Z", "closed_at": "2018-12-16T21:32:56Z", "merged_at": "2018-12-16T21:32:56Z", "merge_commit_sha": "ed78922ae38b51513319b60ac39990b7c2aca810", "assignee": null, "milestone": null, "draft": 0, "head": "f8c01373dad3b8dcd10577a2e541f88ef34c77bc", "base": "3de8fac1d322cbab6c8c55899e0e8511b36337d0", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/390", "merged_by": null, "auto_merge": null} {"id": 249680944, "node_id": "MDExOlB1bGxSZXF1ZXN0MjQ5NjgwOTQ0", "number": 9, "state": "closed", "locked": 0, "title": ":pencil: Updates my_database.py to my_database.db", "user": {"value": 50527, "label": "jefftriplett"}, "body": "I noticed that both `.py` and `.db` were used in the docs and assumed you'd prefer `.db`. ", "created_at": "2019-02-01T17:35:43Z", "updated_at": "2019-02-24T03:55:04Z", "closed_at": "2019-02-24T03:55:04Z", "merged_at": "2019-02-24T03:55:04Z", "merge_commit_sha": "c5068a0972651b3e359ebc2d6c1486b8b7d2c242", "assignee": null, "milestone": null, "draft": 0, "head": "1ad604fbbd3311f041357190796a3613c0c729d1", "base": "441c131db5cc68e197db19f0623ff8a96c90c3ff", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/9", "merged_by": null, "auto_merge": null} {"id": 255725057, "node_id": "MDExOlB1bGxSZXF1ZXN0MjU1NzI1MDU3", "number": 413, "state": "closed", "locked": 0, "title": "Update spatialite.rst", "user": {"value": 28597217, "label": "joelondon"}, "body": "a line of sql added to create the idx_ in the python recipe", "created_at": "2019-02-25T00:08:35Z", "updated_at": "2019-03-15T05:06:45Z", "closed_at": "2019-03-15T05:06:45Z", "merged_at": "2019-03-15T05:06:45Z", "merge_commit_sha": "9e8c36793bfbb17c2f67371cc7f9aa8b9202fdc4", "assignee": null, "milestone": null, "draft": 0, "head": "e87565604a169a34eadadfc99e96a8f503123e8c", "base": "1f91065b20cbc691f464bccfd8eef7d1ce4b14a8", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/413", "merged_by": null, "auto_merge": null} {"id": 266035382, "node_id": "MDExOlB1bGxSZXF1ZXN0MjY2MDM1Mzgy", "number": 424, "state": "closed", "locked": 0, "title": "Column types in inspected metadata", "user": {"value": 45057, "label": "russss"}, "body": "This PR does two things:\r\n\r\n* Adds the sqlite column type for each column to the inspected table info.\r\n* Stops binary columns from being rendered to HTML, unless a plugin handles it.\r\n\r\nThere's a bit more detail in the changeset descriptions.\r\n\r\nThese changes are intended as a precursor to a plugin which adds first-class support for Spatialite geographic primitives, and perhaps more useful geo-stuff.", "created_at": "2019-03-31T18:46:33Z", "updated_at": "2019-04-29T18:30:50Z", "closed_at": "2019-04-29T18:30:46Z", "merged_at": null, "merge_commit_sha": "a332d4e0b3fed7165a22880430664f1c3a00963d", "assignee": null, "milestone": null, "draft": 0, "head": "92e7b8c67fe5bcd484f19576f20c9235aca9050b", "base": "0209a0a344503157351e625f0629b686961763c9", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/424", "merged_by": null, "auto_merge": null} {"id": 271338405, "node_id": "MDExOlB1bGxSZXF1ZXN0MjcxMzM4NDA1", "number": 434, "state": "closed", "locked": 0, "title": "\"datasette publish cloudrun\" command to publish to Google Cloud Run", "user": {"value": 10352819, "label": "rprimet"}, "body": "This is a very rough draft to start a discussion on a possible datasette cloud run publish plugin (see issue #400).\r\n\r\nThe main change was to dynamically set the listening port in `make_dockerfile` to satisfy cloud run's [requirements](https://cloud.google.com/run/docs/reference/container-contract).\r\n\r\nThis was done by running `datasette` through `sh` to get environment variable substitution. Not sure if that's the right approach?\r\n", "created_at": "2019-04-17T14:41:18Z", "updated_at": "2019-05-03T21:50:44Z", "closed_at": "2019-05-03T13:59:02Z", "merged_at": "2019-05-03T13:59:02Z", "merge_commit_sha": "75a21fc2a136ccfc9da7bbf521cf288e63c9707f", "assignee": null, "milestone": null, "draft": 0, "head": "74c20d0d2eac13892ac20db0e66fcb3437544aa6", "base": "bf229c9bd88179c8ec16bd65fd4fb28ab4241c2e", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/434", "merged_by": null, "auto_merge": null} {"id": 274174614, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjc0MTc0NjE0", "number": 437, "state": "closed", "locked": 0, "title": "Add inspect and prepare_sanic hooks", "user": {"value": 45057, "label": "russss"}, "body": "This adds two new plugin hooks:\r\n\r\nThe `inspect` hook allows plugins to add data to the inspect dictionary.\r\n\r\nThe `prepare_sanic` hook allows plugins to hook into the web router. I've attached a warning to this hook in the docs in light of #272 but I want this hook now...\r\n\r\nOn quick inspection, I don't think it's worthwhile to try and make this hook independent of the web framework (but it looks like Starlette would make the hook implementation a bit nicer).\r\n\r\nRef #14", "created_at": "2019-04-28T11:53:34Z", "updated_at": "2019-06-24T16:38:57Z", "closed_at": "2019-06-24T16:38:56Z", "merged_at": null, "merge_commit_sha": "7aeaac7c478acf572bda61bdaa6ac3247dc15811", "assignee": null, "milestone": null, "draft": 0, "head": "f33a0a63a7442f0b665320ac3e2eb55de315f1f7", "base": "11b352b4d52fd02a422776edebb14f12e4994d3b", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/437", "merged_by": null, "auto_merge": null} {"id": 274313625, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjc0MzEzNjI1", "number": 439, "state": "closed", "locked": 0, "title": "[WIP] Add primary key to the extra_body_script hook arguments", "user": {"value": 45057, "label": "russss"}, "body": "This allows the row to be identified on row pages. The context here is that I want to access the row's data to plot it on a map.\r\n\r\nI considered passing the entire template context through to the hook function. This would expose the actual row data and potentially avoid a further fetch request in JS, but it does make the plugin API a lot more leaky. \r\n\r\n(At any rate, using the selected row data is tricky in my case because of Spatialite's infuriating custom binary representation...)", "created_at": "2019-04-29T10:08:23Z", "updated_at": "2019-05-01T09:58:32Z", "closed_at": "2019-05-01T09:58:30Z", "merged_at": null, "merge_commit_sha": "b3cbcfef4d11d2741cf00861734d726a4730afe5", "assignee": null, "milestone": null, "draft": 0, "head": "76b2c8fa406063b436155a7d8995e07b7e718c13", "base": "11b352b4d52fd02a422776edebb14f12e4994d3b", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/439", "merged_by": null, "auto_merge": null} {"id": 274468836, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjc0NDY4ODM2", "number": 441, "state": "closed", "locked": 0, "title": "Add register_output_renderer hook", "user": {"value": 45057, "label": "russss"}, "body": "This changeset refactors out the JSON renderer and then adds a hook and\r\ndispatcher system to allow custom output renderers to be registered.\r\n\r\nThe CSV output renderer is untouched because supporting streaming\r\nrenderers through this system would be significantly more complex, and\r\nprobably not worthwhile.\r\n\r\nWe can't simply allow hooks to be called at request time because we need\r\na list of supported file extensions when the request is being routed in\r\norder to resolve ambiguous database/table names. So, renderers need to\r\nbe registered at startup.\r\n\r\nI've tried to make this API independent of Sanic's request/response\r\nobjects so that this can remain stable during the switch to ASGI. I'm\r\nusing dictionaries to keep it simple and to make adding additional\r\noptions in the future easy.\r\n\r\nFixes #440", "created_at": "2019-04-29T18:03:21Z", "updated_at": "2019-05-01T23:01:57Z", "closed_at": "2019-05-01T23:01:57Z", "merged_at": "2019-05-01T23:01:57Z", "merge_commit_sha": "cf406c075433882b656e340870adf7757976fa4c", "assignee": null, "milestone": null, "draft": 0, "head": "c9f941f06eb0268841de49407725917c74a8a2dc", "base": "11b352b4d52fd02a422776edebb14f12e4994d3b", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/441", "merged_by": null, "auto_merge": null} {"id": 274478761, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjc0NDc4NzYx", "number": 442, "state": "closed", "locked": 0, "title": "Suppress rendering of binary data", "user": {"value": 45057, "label": "russss"}, "body": "Binary columns (including spatialite geographies) get shown as ugly\r\nbinary strings in the HTML by default. Nobody wants to see that mess.\r\n\r\nShow the size of the column in bytes instead. If you want to decode\r\nthe binary data, you can use a plugin to do it.", "created_at": "2019-04-29T18:36:41Z", "updated_at": "2019-05-03T18:26:48Z", "closed_at": "2019-05-03T16:44:49Z", "merged_at": "2019-05-03T16:44:49Z", "merge_commit_sha": "d555baf508de71a5e3dc9a9aed2c13f6f202956d", "assignee": null, "milestone": null, "draft": 0, "head": "bbbd9ea5ad774f088bd963106fa5756bfd77c799", "base": "11b352b4d52fd02a422776edebb14f12e4994d3b", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/442", "merged_by": null, "auto_merge": null} {"id": 275275610, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjc1Mjc1NjEw", "number": 443, "state": "closed", "locked": 0, "title": "Pass view_name to extra_body_script hook", "user": {"value": 45057, "label": "russss"}, "body": "At the moment it's not easy to tell whether the hook is being called\r\nin (for example) the row or table view, as in both cases the\r\n`database` and `table` parameters are provided.\r\n\r\nThis passes the `view_name` added in #441 to the `extra_body_script`\r\nhook.", "created_at": "2019-05-02T08:38:36Z", "updated_at": "2019-05-03T13:12:20Z", "closed_at": "2019-05-03T13:12:20Z", "merged_at": "2019-05-03T13:12:20Z", "merge_commit_sha": "bf229c9bd88179c8ec16bd65fd4fb28ab4241c2e", "assignee": null, "milestone": null, "draft": 0, "head": "83b6b82d4787b30d34eb26c22ad1ff9c5c118134", "base": "efc93b8ab5a21e3802f75f08d5e41409f5684b5d", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/443", "merged_by": null, "auto_merge": null} {"id": 275281307, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjc1MjgxMzA3", "number": 444, "state": "closed", "locked": 0, "title": "Add a max-line-length setting for flake8", "user": {"value": 45057, "label": "russss"}, "body": "This stops my automatic editor linting from flagging lines which are too\r\nlong. It's been lingering in my checkout for ages.\r\n\r\n160 is an arbitrary large number - we could alter it if we have any\r\nopinions (but I find the line length limit to be my least favourite part\r\nof PEP8).", "created_at": "2019-05-02T08:58:57Z", "updated_at": "2019-05-04T09:44:48Z", "closed_at": "2019-05-03T13:11:28Z", "merged_at": "2019-05-03T13:11:28Z", "merge_commit_sha": "470cf0b05d4fda0d2563f81c7e32af13fe346ccc", "assignee": null, "milestone": null, "draft": 0, "head": "4f0d265951d7e95920298b46eff39bb9cc783984", "base": "efc93b8ab5a21e3802f75f08d5e41409f5684b5d", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/444", "merged_by": null, "auto_merge": null} {"id": 275909197, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjc1OTA5MTk3", "number": 450, "state": "closed", "locked": 0, "title": "Coalesce hidden table count to 0", "user": {"value": 45057, "label": "russss"}, "body": "For some reason I'm hitting a `None` here with a FTS table. I'm not\r\nentirely sure why but this makes the logic work the same as with\r\nnon-hidden tables.", "created_at": "2019-05-04T09:37:10Z", "updated_at": "2019-05-11T18:10:09Z", "closed_at": "2019-05-11T18:10:09Z", "merged_at": null, "merge_commit_sha": "5918489a2a2f14b58c5c71773a9d4fb6bb0e3e0a", "assignee": null, "milestone": null, "draft": 0, "head": "f81d9df985e8d054fc16ab91f72878fe71656354", "base": "55643430f7ac8d27e99b00e7cf79db741003e811", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/450", "merged_by": null, "auto_merge": null} {"id": 275923066, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjc1OTIzMDY2", "number": 452, "state": "open", "locked": 0, "title": "SQL builder utility classes", "user": {"value": 45057, "label": "russss"}, "body": "This adds a straightforward set of classes to aid in the construction of\r\nSQL queries.\r\n\r\nMy plan for this was to allow plugins to manipulate the\r\nDatasette-generated SQL in a more structured way. I'm not sure that's\r\ngoing to work, but I feel like this is still a step forward - it\r\nreduces the number of intermediate variables in `TableView.data` which\r\naids readability, and also factors out a lot of the boring string\r\nconcatenation.\r\n\r\nThere are a fair number of minor structure changes in here too as I've\r\ntried to make the ordering of `TableView.data` a bit more logical. As\r\nfar as I can tell, I haven't broken anything...", "created_at": "2019-05-04T13:57:47Z", "updated_at": "2019-05-04T14:03:04Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "45e7460d78c3f87c01f2e9e142cb7f646b23b156", "assignee": null, "milestone": null, "draft": 0, "head": "c63762280d3bd66ad6ea24933dafe218861efef2", "base": "55643430f7ac8d27e99b00e7cf79db741003e811", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/452", "merged_by": null, "auto_merge": null} {"id": 277524072, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjc3NTI0MDcy", "number": 458, "state": "closed", "locked": 0, "title": "setup: add tests to package exclusion", "user": {"value": 7725188, "label": "hellerve"}, "body": "This PR fixes #456 by adding `tests` to the package exclusion list.\r\n\r\nCheers", "created_at": "2019-05-09T19:47:21Z", "updated_at": "2020-07-21T01:14:42Z", "closed_at": "2019-05-10T01:54:51Z", "merged_at": "2019-05-10T01:54:51Z", "merge_commit_sha": "9f8d9fe262866ff3463f8e61214dcc6897bd5a9c", "assignee": null, "milestone": null, "draft": 0, "head": "9c65ff1ba8c855e4ade5bc7ae29a69215b3979d0", "base": "f825e2012109247fa246e2b938f8174069e574f1", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/458", "merged_by": null, "auto_merge": null} {"id": 280204276, "node_id": "MDExOlB1bGxSZXF1ZXN0MjgwMjA0Mjc2", "number": 479, "state": "closed", "locked": 0, "title": "doc typo fix", "user": {"value": 98555, "label": "IgnoredAmbience"}, "body": "Fix typo in performance doc page", "created_at": "2019-05-19T22:54:25Z", "updated_at": "2019-05-20T16:42:29Z", "closed_at": "2019-05-20T16:42:29Z", "merged_at": "2019-05-20T16:42:29Z", "merge_commit_sha": "70d2858067d3c4da0e17c1d39e03de89190e94b6", "assignee": null, "milestone": null, "draft": 0, "head": "708e13ab87f8c8620796c3e8f2b0aa1b2fc26875", "base": "e513a80afba30bca9eeebd71c5e6aa6d8a811f33", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/479", "merged_by": null, "auto_merge": null} {"id": 280205502, "node_id": "MDExOlB1bGxSZXF1ZXN0MjgwMjA1NTAy", "number": 480, "state": "closed", "locked": 0, "title": "Split pypi and docker travis tasks", "user": {"value": 813732, "label": "glasnt"}, "body": "Resolves #478 \r\n\r\nThis *should* work, but because this is a change that'll only really be testable on a) this repo, b) master branch, this might fail fast if I didn't get the configurations right. \r\n\r\n\r\nLooking at #478 it should just be as simple as splitting out the docker and pypi processes into separate jobs, but it might end up being more complicated than that, depending on what pre-processes the pypi deployment needs, and how travisci treats deployment steps without scripts in general. ", "created_at": "2019-05-19T23:14:37Z", "updated_at": "2019-07-07T20:03:20Z", "closed_at": "2019-07-07T20:03:20Z", "merged_at": "2019-07-07T20:03:20Z", "merge_commit_sha": "d95048031edb02bbc9892879507f55a4f29c5459", "assignee": null, "milestone": {"value": 4471010, "label": "Datasette 0.29"}, "draft": 0, "head": "8b667898b6c2dd57fa68310c6d3c62d77b68f321", "base": "4246e138f9512686413e97878659ef953337e57b", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/480", "merged_by": null, "auto_merge": null} {"id": 284743794, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjg0NzQzNzk0", "number": 500, "state": "closed", "locked": 0, "title": "Fix typo in install step: should be install -e", "user": {"value": 32314, "label": "tmcw"}, "body": "", "created_at": "2019-06-03T21:50:51Z", "updated_at": "2019-06-11T18:48:43Z", "closed_at": "2019-06-11T18:48:40Z", "merged_at": "2019-06-11T18:48:40Z", "merge_commit_sha": "aa911122feab13f8e65875c98edb00fd3832b7b8", "assignee": null, "milestone": null, "draft": 0, "head": "ff98f44d7f10ff65fc172df9155c77f169ab4c7f", "base": "5e8fbf7f6fbc0b63d0479da3806dd9ccd6aaa945", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/500", "merged_by": null, "auto_merge": null} {"id": 295711504, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjk1NzExNTA0", "number": 554, "state": "closed", "locked": 0, "title": "Fix static mounts using relative paths and prevent traversal exploits", "user": {"value": 3243482, "label": "abdusco"}, "body": "While debugging why my static mounts using a relative path (`--static mystatic:rel/path/to/dir`) not working, I noticed that the requests fail no matter what, returning 404 errors. \r\n\r\nThe reason is that datasette tries to prevent traversal exploits by checking if the path is relative to its registered directory. This check fails when the mount is a relative directory, because `/abs/dir/file` obviously not under `dir/file`. \r\n\r\nhttps://github.com/simonw/datasette/blob/81fa8b6cdc5457b42a224779e5291952314e8d20/datasette/utils/asgi.py#L303-L306\r\n\r\nThis also has the consequence of returning any requested file, because when `/abs/dir/../../evil.file` resolves `aiofiles` happily returns it to the client after it resolves the path itself. The solution is to make sure we're checking relativity of paths after they're fully resolved.\r\n\r\nI've implemented the mentioned changes and also updated the tests.", "created_at": "2019-07-09T11:32:02Z", "updated_at": "2019-07-11T16:29:26Z", "closed_at": "2019-07-11T16:13:19Z", "merged_at": "2019-07-11T16:13:19Z", "merge_commit_sha": "74ecf8a7cc45cabf369e510c7214f5ed85c8c6d8", "assignee": null, "milestone": null, "draft": 0, "head": "fa7ddea3ea6c9378bee7d5f5c93fe05d735a0afb", "base": "81fa8b6cdc5457b42a224779e5291952314e8d20", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/554", "merged_by": null, "auto_merge": null} {"id": 295748268, "node_id": "MDExOlB1bGxSZXF1ZXN0Mjk1NzQ4MjY4", "number": 556, "state": "closed", "locked": 0, "title": "Add support for running datasette as a module", "user": {"value": 3243482, "label": "abdusco"}, "body": "This PR allows running datasette using `python -m datasette` command in addition to just running the executable.\r\n\r\nThis function is quite useful when debugging a plugin in a project because IDEs like PyCharm can easily start a debug session when datasette is run as a module in contrast to trying to attach a debugger to a running process.\r\n\r\n![image](https://user-images.githubusercontent.com/3243482/60890448-fc4ede80-a263-11e9-8b42-d2a3db8d1a59.png)\r\n", "created_at": "2019-07-09T13:13:30Z", "updated_at": "2019-07-11T16:07:45Z", "closed_at": "2019-07-11T16:07:44Z", "merged_at": "2019-07-11T16:07:44Z", "merge_commit_sha": "9ca860e54fe480d0a365c0c1d8d085926d12be1e", "assignee": null, "milestone": null, "draft": 0, "head": "056a7eac9480cb814d9c453b983e6b2b831e0ca1", "base": "81fa8b6cdc5457b42a224779e5291952314e8d20", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/556", "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": 313007483, "node_id": "MDExOlB1bGxSZXF1ZXN0MzEzMDA3NDgz", "number": 56, "state": "closed", "locked": 0, "title": "Escape the table name in populate_fts and search.", "user": {"value": 49260, "label": "amjith"}, "body": "The table names weren't escaped using double quotes in the populate_fts method. \r\n\r\nReproducible case: \r\n```\r\n>>> import sqlite_utils\r\n>>> db = sqlite_utils.Database(\"abc.db\")\r\n>>> db[\"http://example.com\"].insert_all([\r\n... {\"id\": 1, \"age\": 4, \"name\": \"Cleo\"},\r\n... {\"id\": 2, \"age\": 2, \"name\": \"Pancakes\"}\r\n... ], pk=\"id\")\r\n\r\n>>> db[\"http://example.com\"].enable_fts([\"name\"])\r\nTraceback (most recent call last):\r\n File \"\", line 1, in \r\n db[\"http://example.com\"].enable_fts([\"name\"])\r\n File \"/home/amjith/.virtualenvs/itsysearch/lib/python3.7/site-packages/sqlite_utils/db.py\", l\r\nine 705, in enable_fts\r\n self.populate_fts(columns)\r\n File \"/home/amjith/.virtualenvs/itsysearch/lib/python3.7/site-packages/sqlite_utils/db.py\", l\r\nine 715, in populate_fts\r\n self.db.conn.executescript(sql)\r\nsqlite3.OperationalError: unrecognized token: \":\"\r\n>>> \r\n```", "created_at": "2019-09-01T06:29:05Z", "updated_at": "2019-09-02T17:23:21Z", "closed_at": "2019-09-02T17:23:21Z", "merged_at": null, "merge_commit_sha": "79852e97ecb69b88da87da0cba2a55887cf83bda", "assignee": null, "milestone": null, "draft": 0, "head": "83ca4c802f5d5102e73ff366e61514ded81dc7a1", "base": "cb70f7d10996b844154bf3da88779dd1f65590bc", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/56", "merged_by": null, "auto_merge": null} {"id": 313105634, "node_id": "MDExOlB1bGxSZXF1ZXN0MzEzMTA1NjM0", "number": 57, "state": "closed", "locked": 0, "title": "Add triggers while enabling FTS", "user": {"value": 49260, "label": "amjith"}, "body": "This adds the option for a user to set up triggers in the database to keep their FTS table in sync with the parent table. \r\n\r\nRef: https://sqlite.org/fts5.html#external_content_and_contentless_tables\r\n\r\nI would prefer to make the creation of triggers the default behavior, but that will break existing usage where people have been calling `populate_fts` after inserting new rows.\r\n\r\nI am happy to make changes to the PR as you see fit. ", "created_at": "2019-09-02T04:23:40Z", "updated_at": "2019-09-03T01:03:59Z", "closed_at": "2019-09-02T23:42:29Z", "merged_at": "2019-09-02T23:42:29Z", "merge_commit_sha": "405e092d5916e70df10f82d15e9c052aa9ee8d80", "assignee": null, "milestone": null, "draft": 0, "head": "e01943271b17115fbe0e81d523126d2fb1c7c24b", "base": "cb70f7d10996b844154bf3da88779dd1f65590bc", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/57", "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": 327172545, "node_id": "MDExOlB1bGxSZXF1ZXN0MzI3MTcyNTQ1", "number": 590, "state": "closed", "locked": 0, "title": "Handle spaces in DB names", "user": {"value": 2657547, "label": "rixx"}, "body": "Closes #503", "created_at": "2019-10-11T12:18:22Z", "updated_at": "2019-11-04T23:16:31Z", "closed_at": "2019-11-04T23:16:30Z", "merged_at": "2019-11-04T23:16:30Z", "merge_commit_sha": "931bfc66613aa3e22f8314df5c0d0758baf31f38", "assignee": null, "milestone": null, "draft": 0, "head": "0c306e89e4f97f64921e4f6d1fe7bab52fad6ade", "base": "52fa79c6075f0830ff635b81d957c64d877a05aa", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/590", "merged_by": null, "auto_merge": null} {"id": 327188087, "node_id": "MDExOlB1bGxSZXF1ZXN0MzI3MTg4MDg3", "number": 591, "state": "closed", "locked": 0, "title": "Sort databases on homepage by argument order", "user": {"value": 2657547, "label": "rixx"}, "body": "Closes #585", "created_at": "2019-10-11T12:57:38Z", "updated_at": "2019-10-14T08:57:50Z", "closed_at": "2019-10-14T03:52:34Z", "merged_at": "2019-10-14T03:52:34Z", "merge_commit_sha": "908fc3999e06f3ccd3bb8ad0539490bbc7809748", "assignee": null, "milestone": null, "draft": 0, "head": "5a8e52fa60f2c2c93f10b9c6c126f31b02d647b0", "base": "fffd69ec031b83f46680f192ba57a27f0d1f0b8a", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/591", "merged_by": null, "auto_merge": null} {"id": 327279818, "node_id": "MDExOlB1bGxSZXF1ZXN0MzI3Mjc5ODE4", "number": 592, "state": "closed", "locked": 0, "title": "Offer SQL formatting", "user": {"value": 2657547, "label": "rixx"}, "body": "SQL code will be formatted on page load, and can additionally be formatted by clicking the \"Format SQL\" button. Closes #136", "created_at": "2019-10-11T16:35:49Z", "updated_at": "2019-10-14T08:57:12Z", "closed_at": "2019-10-14T03:46:13Z", "merged_at": "2019-10-14T03:46:13Z", "merge_commit_sha": "af2e6a5cf186a7200d76cb67ac30fa59cc24d84e", "assignee": null, "milestone": null, "draft": 0, "head": "b46195af65846ca30c6006520cc778eeed052324", "base": "fffd69ec031b83f46680f192ba57a27f0d1f0b8a", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/592", "merged_by": null, "auto_merge": null} {"id": 330076263, "node_id": "MDExOlB1bGxSZXF1ZXN0MzMwMDc2MjYz", "number": 602, "state": "closed", "locked": 0, "title": "Offer to format readonly SQL", "user": {"value": 2657547, "label": "rixx"}, "body": "Following discussion in #601, this PR adds a \"Format SQL\" button to\r\nread-only SQL (if the SQL actually differs from the formatting result).\r\n\r\nIt also removes a console error on readonly SQL queries.", "created_at": "2019-10-20T02:29:32Z", "updated_at": "2019-11-04T07:29:33Z", "closed_at": "2019-11-04T02:39:56Z", "merged_at": "2019-11-04T02:39:56Z", "merge_commit_sha": "ee330222f4c3ee66c2fe41ebc76fed56b9cb9a00", "assignee": null, "milestone": null, "draft": 0, "head": "266c3dafb9bf3b12204b6152d7b48e94a131584a", "base": "8050f9e1ece9afd0236ad38c6458c12a4ad917e6", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/602", "merged_by": null, "auto_merge": null} {"id": 330129358, "node_id": "MDExOlB1bGxSZXF1ZXN0MzMwMTI5MzU4", "number": 603, "state": "closed", "locked": 0, "title": "always pop as_format off args dict", "user": {"value": 6025893, "label": "chris48s"}, "body": "closes #563", "created_at": "2019-10-20T15:44:22Z", "updated_at": "2019-10-30T19:12:22Z", "closed_at": "2019-10-21T02:03:09Z", "merged_at": "2019-10-21T02:03:09Z", "merge_commit_sha": "f4c0830529a9513a83437a9e1550bbe27ebc5c64", "assignee": null, "milestone": null, "draft": 0, "head": "39d044502590224e4f07c05e02fc8a4d312255c1", "base": "8050f9e1ece9afd0236ad38c6458c12a4ad917e6", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/603", "merged_by": null, "auto_merge": null} {"id": 338647378, "node_id": "MDExOlB1bGxSZXF1ZXN0MzM4NjQ3Mzc4", "number": 1, "state": "closed", "locked": 0, "title": "Add parkrun-to-sqlite", "user": {"value": 1101318, "label": "mrw34"}, "body": "", "created_at": "2019-11-08T12:05:32Z", "updated_at": "2020-10-12T00:35:16Z", "closed_at": "2020-10-12T00:35:16Z", "merged_at": "2020-10-12T00:35:16Z", "merge_commit_sha": "58ca0c785fbf34250042379dd0269bf2d0c5ea7e", "assignee": null, "milestone": null, "draft": 0, "head": "ccb86548e0ae6f02a83f1feb0974476ad0f2f2d8", "base": "2972bb001ab5f675eced62f7ba5adef2d3eba2ad", "author_association": "CONTRIBUTOR", "repo": {"value": 214746582, "label": "dogsheep.github.io"}, "url": "https://github.com/dogsheep/dogsheep.github.io/pull/1", "merged_by": null, "auto_merge": null} {"id": 340211149, "node_id": "MDExOlB1bGxSZXF1ZXN0MzQwMjExMTQ5", "number": 631, "state": "closed", "locked": 0, "title": "bugfix issue 572", "user": {"value": 3683993, "label": "qwo"}, "body": "closes bugfix issue #572 ", "created_at": "2019-11-13T02:46:50Z", "updated_at": "2019-11-13T04:28:43Z", "closed_at": "2019-11-13T04:28:42Z", "merged_at": "2019-11-13T04:28:42Z", "merge_commit_sha": "848dec4deb0d3c140a4e0394cac45fbb2593349b", "assignee": null, "milestone": null, "draft": 0, "head": "ca43966e5aa832a377e4db5d411b6cc8b1c5b3ac", "base": "bbd00e903cdd49067ecdbdb60a4d225833a44b05", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/631", "merged_by": null, "auto_merge": null} {"id": 347179081, "node_id": "MDExOlB1bGxSZXF1ZXN0MzQ3MTc5MDgx", "number": 644, "state": "closed", "locked": 0, "title": "Validate metadata json on startup", "user": {"value": 6025893, "label": "chris48s"}, "body": "This PR adds a sanity check which builds up a marshmallow schema on-the-fly based on the structure of the database(s) on startup and then validates the metadata json against it.\r\n\r\nIn case of invalid data, this will raise with a descriptive error e.g:\r\n\r\n```\r\nmarshmallow.exceptions.ValidationError: {'databases': {'fixtures': {'tables': {'not_a_table': ['Unknown field.']}}}}\r\n```\r\n\r\nCloses #260\r\n\r\n---\r\n\r\nThis was intended to be fairly self-contained, but then while I was working on it, I hit some problems getting the tests to pass in the context of the test suite as a whole. My tests passed in isolation, but then failed while doing a full test suite run. That's when the worms started coming out of the can :bug: After some sleuthing, it turned out this was essentially the result of several issues intersecting:\r\n\r\n* There are certain events in the application lifecycle where the metadata schema can be modified after it is loaded e.g: https://github.com/simonw/datasette/blob/a562f2965552fb2dbbbd74df245c9965ee23d886/datasette/app.py#L299-L320 This means that sometimes what goes in isn't always exactly what comes out when you call `/-/metadata`.\r\n* Because the test fixtures use session scope for performance reasons if one unit test performs an action which mutates the metadata, that can impact on other unit tests which run after it using the same fixture.\r\n* Because the `self._metadata` property was being set with a simple assignment `self._metadata = metadata`, that created an object reference to the test fixture data, so operating on `self._metadata` was actually modifying the test fixture `METADATA` meaning that depending on when it was loaded in the test suite lifecycle, `METADATA` had different content, which was somewhat unexpected.\r\n\r\nAs such, I've added some band-aids in 3552024 and 6859fd8:\r\n* Switching the metadata object to a `deepcopy` of the input prevents us directly mutating the input fixture.\r\n* I've switched some of the tests to use a fixture with function scope instead of session scope so we're working on a clean copy that hasn't been mutated by other tests where necessary but keeping session scope in most cases for performance.\r\n* I haven't really addressed the fact that sometimes the metadata object gets mutated in place, so the object that is served from `/-/metadata` isn't necessarily always exactly the same as the file you fed into it on init. I'm not sure how much of a problem that is. The way the tests were written makes me think it was unexpected, but getting into it feels like too much scope creep for this PR so its probably best addressed as another issue.", "created_at": "2019-11-30T00:32:15Z", "updated_at": "2021-07-28T17:58:45Z", "closed_at": "2021-07-28T17:58:45Z", "merged_at": null, "merge_commit_sha": "e71b642474d54f986bc8857346103d8a10d84e6d", "assignee": null, "milestone": null, "draft": 0, "head": "6859fd8c5eef26f397aa949dc4edf3747e8ab0a5", "base": "a562f2965552fb2dbbbd74df245c9965ee23d886", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/644", "merged_by": null, "auto_merge": null} {"id": 356004242, "node_id": "MDExOlB1bGxSZXF1ZXN0MzU2MDA0MjQy", "number": 653, "state": "closed", "locked": 0, "title": "allow leading comments in SQL input field", "user": {"value": 418191, "label": "jaywgraves"}, "body": "this changes the SQL validation to allow for lines that are commented out\r\n\r\nmy main use case for this is that I like to write a succession of queries when trying to solve a problem.\r\nIn most native SQL clients there is a key binding that will run just the current highlighted query or the program is smart enough to run just the query that the cursor is in if it's properly delimited with a ';'.\r\nTypically my workflow will start with a single simple query and I'll copy/paste it to a new query below when I want to make big changes while debugging. This makes it easy to go back to a working version above when the query doesn't work.\r\nSince datasette sends the whole query to the DB I have to comment out the older queries by prefixing each line with `--`. This gets caught by the validators when I use my typical strategy of copy/pasting each successive query below the last one. \r\nso this is just a simple fix to allow for a query to be sent to the DB with leading comments.\r\n", "created_at": "2019-12-21T14:19:52Z", "updated_at": "2020-02-05T02:35:41Z", "closed_at": "2020-02-05T02:13:25Z", "merged_at": "2020-02-05T02:13:25Z", "merge_commit_sha": "33a12c8ae526afb40a7819c9ca411c9d3c41219b", "assignee": null, "milestone": null, "draft": 0, "head": "3a4cb551b9a217d5798e3e9ad5d4b06234a81885", "base": "d6b6c9171f3fd945c4e5e4144923ac831c43c208", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/653", "merged_by": null, "auto_merge": null} {"id": 357640186, "node_id": "MDExOlB1bGxSZXF1ZXN0MzU3NjQwMTg2", "number": 6, "state": "closed", "locked": 0, "title": "don't break if source is missing", "user": {"value": 78035, "label": "mfa"}, "body": "broke for me. very old checkins in 2010 had no source set.", "created_at": "2019-12-29T10:46:47Z", "updated_at": "2020-03-28T02:28:11Z", "closed_at": "2020-03-28T02:28:11Z", "merged_at": "2020-03-28T02:28:11Z", "merge_commit_sha": "d3c4ab2848ea606417150f377a82e66ca7887c54", "assignee": null, "milestone": null, "draft": 0, "head": "a41b5bcd63012f64fe6746825d7101cc3d071483", "base": "f2c89dd613fb8a7f14e5267ccc2145463b996190", "author_association": "CONTRIBUTOR", "repo": {"value": 205429375, "label": "swarm-to-sqlite"}, "url": "https://github.com/dogsheep/swarm-to-sqlite/pull/6", "merged_by": null, "auto_merge": null} {"id": 357974326, "node_id": "MDExOlB1bGxSZXF1ZXN0MzU3OTc0MzI2", "number": 3, "state": "closed", "locked": 0, "title": "Add todoist-to-sqlite", "user": {"value": 706257, "label": "bcongdon"}, "body": "Really enjoying getting into the dogsheep/datasette ecosystem. I made a downloader for Todoist, and I think/hope others might find this useful", "created_at": "2019-12-30T04:02:59Z", "updated_at": "2020-10-12T00:35:58Z", "closed_at": "2020-10-12T00:35:57Z", "merged_at": "2020-10-12T00:35:57Z", "merge_commit_sha": "85af27dbff7e08a92656639fbf0cfa15c7d30b5c", "assignee": null, "milestone": null, "draft": 0, "head": "49bc87a43555d10696044e8e40d700d93611a190", "base": "58ca0c785fbf34250042379dd0269bf2d0c5ea7e", "author_association": "CONTRIBUTOR", "repo": {"value": 214746582, "label": "dogsheep.github.io"}, "url": "https://github.com/dogsheep/dogsheep.github.io/pull/3", "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": 365218391, "node_id": "MDExOlB1bGxSZXF1ZXN0MzY1MjE4Mzkx", "number": 660, "state": "closed", "locked": 0, "title": "gcloud run is now GA, s/beta//", "user": {"value": 813732, "label": "glasnt"}, "body": "", "created_at": "2020-01-21T10:08:38Z", "updated_at": "2020-01-22T03:41:09Z", "closed_at": "2020-01-21T23:28:12Z", "merged_at": "2020-01-21T23:28:12Z", "merge_commit_sha": "34d77d780f68b778fd9d6ebbaf69f250436f055f", "assignee": null, "milestone": null, "draft": 0, "head": "894e96026b838288f926f62914123a1f86139793", "base": "3c861f363df02a59a67c59036278338e4760d2ed", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/660", "merged_by": null, "auto_merge": null} {"id": 370024697, "node_id": "MDExOlB1bGxSZXF1ZXN0MzcwMDI0Njk3", "number": 4, "state": "closed", "locked": 0, "title": "Add beeminder-to-sqlite", "user": {"value": 706257, "label": "bcongdon"}, "body": "", "created_at": "2020-02-02T15:51:36Z", "updated_at": "2020-10-12T00:36:16Z", "closed_at": "2020-10-12T00:36:16Z", "merged_at": "2020-10-12T00:36:16Z", "merge_commit_sha": "7e4c6ecdabc249c77e8049cd172b1b5af08a3371", "assignee": null, "milestone": null, "draft": 0, "head": "6713b5c50178b95a9ec50227d4ef5793e71e8b0a", "base": "2972bb001ab5f675eced62f7ba5adef2d3eba2ad", "author_association": "CONTRIBUTOR", "repo": {"value": 214746582, "label": "dogsheep.github.io"}, "url": "https://github.com/dogsheep/dogsheep.github.io/pull/4", "merged_by": null, "auto_merge": null} {"id": 372763906, "node_id": "MDExOlB1bGxSZXF1ZXN0MzcyNzYzOTA2", "number": 666, "state": "closed", "locked": 0, "title": "Use inspect-file, if possible, for total row count", "user": {"value": 13896256, "label": "kevindkeogh"}, "body": "For large tables, counting the number of rows in the table can take a\r\nsignficant amount of time. Instead, where an inspect-file is provided\r\nfor an immutable database, look up the row-count for a plain count(*).", "created_at": "2020-02-08T22:10:35Z", "updated_at": "2020-03-09T02:47:15Z", "closed_at": "2020-02-25T20:19:29Z", "merged_at": "2020-02-25T20:19:29Z", "merge_commit_sha": "3041c6b6412bbe317f8b9afd6529a15954f2c47e", "assignee": null, "milestone": null, "draft": 0, "head": "8947a60404b8242a03f9ebabc5f957d75f4dfe04", "base": "b031fe97636b80b05fec409ee1dffb7d044fd4e9", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/666", "merged_by": null, "auto_merge": null} {"id": 373775788, "node_id": "MDExOlB1bGxSZXF1ZXN0MzczNzc1Nzg4", "number": 669, "state": "closed", "locked": 0, "title": "fix db-to-sqlite command in ecosystem doc page", "user": {"value": 883348, "label": "adipasquale"}, "body": "the `--connection` parameter has become positional", "created_at": "2020-02-11T17:05:41Z", "updated_at": "2020-02-22T02:32:18Z", "closed_at": "2020-02-22T02:32:17Z", "merged_at": "2020-02-22T02:32:17Z", "merge_commit_sha": "be2265b0e811d0ac2875c2f748125c17b0f9289e", "assignee": null, "milestone": null, "draft": 0, "head": "6eb0e8cd90be82eff0a5152b0985c2a3cb7a44a8", "base": "30b6f71b306a43605c99bef79302ed5cb22d1924", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/669", "merged_by": null, "auto_merge": null} {"id": 395258687, "node_id": "MDExOlB1bGxSZXF1ZXN0Mzk1MjU4Njg3", "number": 96, "state": "closed", "locked": 0, "title": "Add type conversion for Panda's Timestamp", "user": {"value": 32605365, "label": "b0b5h4rp13"}, "body": "Add type conversion for Panda's Timestamp, if Panda library is present in system\r\n(thanks for this project, I was about to do the same thing from scratch)", "created_at": "2020-03-29T14:13:09Z", "updated_at": "2020-03-31T04:40:49Z", "closed_at": "2020-03-31T04:40:48Z", "merged_at": "2020-03-31T04:40:48Z", "merge_commit_sha": "8ea626e5fcdc4c9e52f615c6347e68173805f8b4", "assignee": null, "milestone": null, "draft": 0, "head": "16ebbd2d494caabd0eeb502f8a944614b464bb12", "base": "22250a9c735077d6f365b73bf824e6c67b122c83", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/96", "merged_by": null, "auto_merge": null} {"id": 399166433, "node_id": "MDExOlB1bGxSZXF1ZXN0Mzk5MTY2NDMz", "number": 719, "state": "closed", "locked": 0, "title": "asgi: check raw_path is not None", "user": {"value": 193185, "label": "cldellow"}, "body": "The ASGI spec\r\n(https://asgi.readthedocs.io/en/latest/specs/www.html#http) seems to imply that `None` is a valid value, so we need to check the value itself, not just whether the key is present.\r\n\r\nIn particular, the [mangum](https://github.com/erm/mangum) adapter passes `None` for this key's value. This change permits mangum to be used to front datasette in Amazon API Gateway + AWS Lambda deployments.", "created_at": "2020-04-05T16:53:58Z", "updated_at": "2020-05-04T17:14:26Z", "closed_at": "2020-05-04T17:14:26Z", "merged_at": "2020-05-04T17:14:26Z", "merge_commit_sha": "dbd2d70b3819a7041bb36a527033d77c85683c05", "assignee": null, "milestone": null, "draft": 0, "head": "161f61d73800a605354b4ac44a3c989e19bbc77a", "base": "e0e7a0facfc935a835cd73c720bc46661462f0b1", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/719", "merged_by": null, "auto_merge": null} {"id": 400578979, "node_id": "MDExOlB1bGxSZXF1ZXN0NDAwNTc4OTc5", "number": 720, "state": "closed", "locked": 0, "title": "Update beautifulsoup4 requirement from ~=4.8.1 to >=4.8.1,<4.10.0", "user": {"value": 27856297, "label": "dependabot-preview[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**Note:** This repo was added to Dependabot recently, so you'll receive a maximum of 5 PRs for your first few update runs. Once an update run creates fewer than 5 PRs we'll remove that limit.\n\nYou can always request more updates by clicking `Bump now` in your [Dependabot dashboard](https://app.dependabot.com).\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-08T01:24:38Z", "updated_at": "2020-05-04T17:14:51Z", "closed_at": "2020-05-04T17:14:46Z", "merged_at": "2020-05-04T17:14:46Z", "merge_commit_sha": "707fe039947b3e48f2b6dcfe8e577d76b617f2a5", "assignee": null, "milestone": null, "draft": 0, "head": "ab76bf88f597e61668dc6fc750502f8db207bd9c", "base": "d55fe8cdfc2ce7bc6960bf2507766c1fcd1d31a7", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/720", "merged_by": null, "auto_merge": null} {"id": 400579077, "node_id": "MDExOlB1bGxSZXF1ZXN0NDAwNTc5MDc3", "number": 721, "state": "closed", "locked": 0, "title": "Update pytest requirement from ~=5.2.2 to >=5.2.2,<5.5.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

5.4.1

\n

pytest 5.4.1 (2020-03-13)

\n

Bug Fixes

\n
    \n
  • \n

    #6909: Revert the change introduced by #6330, which required all arguments to @pytest.mark.parametrize to be explicitly defined in the function signature.

    \n

    The intention of the original change was to remove what was expected to be an unintended/surprising behavior, but it turns out many people relied on it, so the restriction has been reverted.

    \n
  • \n
  • \n

    #6910: Fix crash when plugins return an unknown stats while using the --reportlog option.

    \n
  • \n
\n
\n
\n
\nChangelog\n

Sourced from pytest's changelog.

\n
\n
\nCommits\n
    \n
  • 3d0f3ba Preparing release version 5.4.1
  • \n
  • b9e2cd0 Merge pull request #6914 from nicoddemus/revert-6330
  • \n
  • a84fcbf Revert "[parametrize] enforce explicit argnames declaration (#6330)"
  • \n
  • 59c1bfa Merge pull request #6913 from nicoddemus/backport-6910
  • \n
  • 3267f64 Merge pull request #6910 from nicoddemus/resultlog-logreport
  • \n
  • c9fd1bd Preparing release version 5.4.0
  • \n
  • 93aa988 Merge pull request #6901 from RonnyPfannschmidt/regendoc-fix-simple
  • \n
  • 7996724 Merge pull request #6902 from RoyalTS/filterwarnings-docfix
  • \n
  • 90ee8a7 docfix
  • \n
  • 378a75d run and fix tox -e regen to prepare 5.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**Note:** This repo was added to Dependabot recently, so you'll receive a maximum of 5 PRs for your first few update runs. Once an update run creates fewer than 5 PRs we'll remove that limit.\n\nYou can always request more updates by clicking `Bump now` in your [Dependabot dashboard](https://app.dependabot.com).\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-08T01:25:04Z", "updated_at": "2020-05-04T17:13:49Z", "closed_at": "2020-05-04T17:13:41Z", "merged_at": "2020-05-04T17:13:41Z", "merge_commit_sha": "c91fb9e3d4f0632d4ef25a21165739ab88a9d491", "assignee": null, "milestone": null, "draft": 0, "head": "54ea56285f9512c991e343ffad9d848d551977de", "base": "d55fe8cdfc2ce7bc6960bf2507766c1fcd1d31a7", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/721", "merged_by": null, "auto_merge": null} {"id": 400579136, "node_id": "MDExOlB1bGxSZXF1ZXN0NDAwNTc5MTM2", "number": 722, "state": "closed", "locked": 0, "title": "Update jinja2 requirement from ~=2.10.3 to >=2.10.3,<2.12.0", "user": {"value": 27856297, "label": "dependabot-preview[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

2.11.1

\n

This fixes an issue in async environment when indexing the result of an attribute lookup, like {{ data.items[1:] }}.

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

Sourced from jinja2's changelog.

\n
\n

Version 2.11.1

\n

Released 2020-01-30

\n
    \n
  • Fix a bug that prevented looking up a key after an attribute ({{ data.items[1:] }}) in an async template. 1141
  • \n
\n

Version 2.11.0

\n

Released 2020-01-27

\n
    \n
  • Drop support for Python 2.6, 3.3, and 3.4. This will be the last version to support Python 2.7 and 3.5.
  • \n
  • Added a new ChainableUndefined class to support getitem and getattr on an undefined object. 977
  • \n
  • Allow {%+ syntax (with NOP behavior) when lstrip_blocks is disabled. 748
  • \n
  • Added a default parameter for the map filter. 557
  • \n
  • Exclude environment globals from meta.find_undeclared_variables. 931
  • \n
  • Float literals can be written with scientific notation, like 2.56e-3. 912, 922
  • \n
  • Int and float literals can be written with the '_' separator for legibility, like 12_345. 923
  • \n
  • Fix a bug causing deadlocks in LRUCache.setdefault. 1000
  • \n
  • The trim filter takes an optional string of characters to trim. 828
  • \n
  • A new jinja2.ext.debug extension adds a {% debug %} tag to quickly dump the current context and available filters and tests. 174, 798, 983
  • \n
  • Lexing templates with large amounts of whitespace is much faster. 857, 858
  • \n
  • Parentheses around comparisons are preserved, so {{ 2 * (3 < 5) }} outputs "2" instead of "False". 755, 938
  • \n
  • Add new boolean, false, true, integer and float tests. 824
  • \n
  • The environment's finalize function is only applied to the output of expressions (constant or not), not static template data. 63
  • \n
  • When providing multiple paths to FileSystemLoader, a template can have the same name as a directory. 821
  • \n
  • Always return Undefined when omitting the else clause in a {{ 'foo' if bar }} expression, regardless of the environment's undefined class. Omitting the else clause is a valid shortcut and should not raise an error when using StrictUndefined. 710, 1079
  • \n
  • Fix behavior of loop control variables such as length and revindex0 when looping over a generator. 459, 751, 794, 993
  • \n
  • Async support is only loaded the first time an environment enables it, in order to avoid a slow initial import. 765
  • \n
  • In async environments, the |map filter will await the filter call if needed. 913
  • \n
  • In for loops that access loop attributes, the iterator is not advanced ahead of the current iteration unless length, revindex, nextitem, or last are accessed. This makes it less likely to break groupby results. 555, 1101
  • \n
  • In async environments, the loop attributes length and revindex work for async iterators. 1101
  • \n
  • In async environments, values from attribute/property access will be awaited if needed. 1101
  • \n
  • ~loader.PackageLoader doesn't depend on setuptools or pkg_resources. 970
  • \n
  • PackageLoader has limited support for 420 namespace packages. 1097
  • \n
  • Support os.PathLike objects in ~loader.FileSystemLoader and ~loader.ModuleLoader. 870
  • \n
  • ~nativetypes.NativeTemplate correctly handles quotes between expressions. "'{{ a }}', '{{ b }}'" renders as the tuple ('1', '2') rather than the string '1, 2'. 1020
  • \n
  • Creating a ~nativetypes.NativeTemplate directly creates a ~nativetypes.NativeEnvironment instead of a default Environment. 1091
  • \n
  • After calling LRUCache.copy(), the copy's queue methods point to the correct queue. 843
  • \n
  • Compiling templates always writes UTF-8 instead of defaulting to the system encoding. 889
  • \n
  • |wordwrap filter treats existing newlines as separate paragraphs to be wrapped individually, rather than creating short intermediate lines. 175
  • \n
  • Add break_on_hyphens parameter to |wordwrap filter. 550
  • \n
  • Cython compiled functions decorated as context functions will be passed the context. 1108
  • \n
  • When chained comparisons of constants are evaluated at compile time, the result follows Python's behavior of returning False if any comparison returns False, rather than only the last one. 1102
  • \n
  • Tracebacks for exceptions in templates show the correct line numbers and source for Python >= 3.7. 1104
  • \n
  • Tracebacks for template syntax errors in Python 3 no longer show internal compiler frames. 763
  • \n
  • Add a DerivedContextReference node that can be used by extensions to get the current context and local variables such as loop. 860
  • \n
  • Constant folding during compilation is applied to some node types that were previously overlooked. 733
  • \n
  • TemplateSyntaxError.source is not empty when raised from an included template. 457
  • \n
\n
... (truncated)\n\n\n
\nCommits\n
    \n
  • b85283e release version 2.11.1
  • \n
  • 3d5bfc6 Merge pull request #1143 from pallets/bugfix/attribute-access
  • \n
  • d61c1ea add changelog
  • \n
  • 15d7e61 Added regression test for slicing of attributes
  • \n
  • 05dee9b Fix attribute access in async code. Fixes #1141
  • \n
  • bbdafe3 release version 2.11.0
  • \n
  • 9ff27f6 add python 3.8 classifier, clean up changelog
  • \n
  • d312609 isolate bytecode cache tests
  • \n
  • 9849979 import Markup from markupsafe, fix flake8 import warnings
  • \n
  • c6d864c increment bytecode cache version
  • \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**Note:** This repo was added to Dependabot recently, so you'll receive a maximum of 5 PRs for your first few update runs. Once an update run creates fewer than 5 PRs we'll remove that limit.\n\nYou can always request more updates by clicking `Bump now` in your [Dependabot dashboard](https://app.dependabot.com).\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-08T01:25:24Z", "updated_at": "2020-05-04T17:13:26Z", "closed_at": "2020-05-04T17:13:16Z", "merged_at": "2020-05-04T17:13:16Z", "merge_commit_sha": "aa064de3f400899dbf61f2d33a035fba4017596c", "assignee": null, "milestone": null, "draft": 0, "head": "0a503b7fdb0cce1bb82e18c4552a4f92808fe41f", "base": "d55fe8cdfc2ce7bc6960bf2507766c1fcd1d31a7", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/722", "merged_by": null, "auto_merge": null} {"id": 402645984, "node_id": "MDExOlB1bGxSZXF1ZXN0NDAyNjQ1OTg0", "number": 725, "state": "closed", "locked": 0, "title": "Update aiofiles requirement from ~=0.4.0 to >=0.4,<0.6", "user": {"value": 27856297, "label": "dependabot-preview[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- `@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-13T13:32:47Z", "updated_at": "2020-05-04T18:16:54Z", "closed_at": "2020-05-04T16:17:49Z", "merged_at": "2020-05-04T16:17:49Z", "merge_commit_sha": "985e59493e44d6fcebf7a30f693f4edecee3e90d", "assignee": null, "milestone": null, "draft": 0, "head": "a7053e8d17559a6ebb4265c0783b84cc6aaff7e2", "base": "d349d57cdf3d577afb62bdf784af342a4d5be660", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/725", "merged_by": null, "auto_merge": null} {"id": 406067019, "node_id": "MDExOlB1bGxSZXF1ZXN0NDA2MDY3MDE5", "number": 728, "state": "closed", "locked": 0, "title": "Update mergedeep requirement from ~=1.1.1 to >=1.1.1,<1.4.0", "user": {"value": 27856297, "label": "dependabot-preview[bot]"}, "body": "Updates the requirements on [mergedeep](https://github.com/clarketm/mergedeep) to permit the latest version.\n
\nCommits\n
    \n
  • 3d6e7b4 v1.3.0 - support additive merging of Counter types
  • \n
  • 56a258a v1.2.1 - tidy docs and variable names
  • \n
  • 61ab213 v1.2.0 - support both TYPESAFE_REPLACE and TYPESAFE_ADDITIVE merge strategies...
  • \n
  • b331bb5 cleanup Makefile
  • \n
  • 6f577bf officially label support for python3.8
  • \n
  • 84faf37 use pipenv for managing dev dependencies
  • \n
  • 3a8761a Update README.md
  • \n
  • See full diff 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-20T13:33:23Z", "updated_at": "2020-05-04T16:45:58Z", "closed_at": "2020-05-04T16:45:49Z", "merged_at": "2020-05-04T16:45:49Z", "merge_commit_sha": "e232f77055880b38cc0b738607cd50cde9188eaf", "assignee": null, "milestone": null, "draft": 0, "head": "b584fbc4215d92df08360937916ffe128f11f72e", "base": "985e59493e44d6fcebf7a30f693f4edecee3e90d", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/728", "merged_by": null, "auto_merge": null} {"id": 406677205, "node_id": "MDExOlB1bGxSZXF1ZXN0NDA2Njc3MjA1", "number": 730, "state": "closed", "locked": 0, "title": "Update pytest-asyncio requirement from ~=0.10.0 to >=0.10,<0.12", "user": {"value": 27856297, "label": "dependabot-preview[bot]"}, "body": "Updates the requirements on [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) to permit the latest version.\n
\nCommits\n
    \n
  • 1026c39 0.11.0
  • \n
  • ab2b140 Test on Python 3.8, drop 3.3 and 3.4
  • \n
  • 6397a22 plugin: Use pytest 5.4.0 new Function API
  • \n
  • 21a0f94 Replace yield_fixture() by fixture()
  • \n
  • 964b295 Added min hypothesis version so that bugfix for https://github.com/Hypothesis...
  • \n
  • 4a11a20 Add max supported pytest version to < 5.4.0 to prevent fails until #141 is fi...
  • \n
  • b305594 Change event_loop to module scope in hypothesis tests, fixing #145.
  • \n
  • d5a0f47 Enable test_subprocess to be run on win, by changing to ProactorEventLoop in ...
  • \n
  • d07cd2d Fix required pytest version
  • \n
  • 86cd9a6 Handle BaseExceptions from loop.run_until_complete (#126)
  • \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-21T13:32:35Z", "updated_at": "2020-05-04T13:27:24Z", "closed_at": "2020-05-04T13:27:23Z", "merged_at": null, "merge_commit_sha": "460708c7107a7cf15971a9aa1040635f6bc1be6d", "assignee": null, "milestone": null, "draft": 0, "head": "11c67f82cdccc6e34cbff717e673451ac6172ef4", "base": "15e232180427e988174fdf88440c84b91d2d98d1", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/730", "merged_by": null, "auto_merge": null} {"id": 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": 412951191, "node_id": "MDExOlB1bGxSZXF1ZXN0NDEyOTUxMTkx", "number": 753, "state": "closed", "locked": 0, "title": "Update pytest-asyncio requirement from ~=0.10.0 to >=0.10,<0.13", "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
  • b8e2a45 0.12.0
  • \n
  • 06580c6 Update changelog
  • \n
  • b45de23 Fixed failing test case, 'test_asyncio_marker_without_loop'.
  • \n
  • 238cced Put event_loop first among the fixtures of asyncio tests, fixes #154.
  • \n
  • e5e3dc7 Added unittests for issue #154.
  • \n
  • a7e5795 0.12.0 open for business!
  • \n
  • 1026c39 0.11.0
  • \n
  • ab2b140 Test on Python 3.8, drop 3.3 and 3.4
  • \n
  • 6397a22 plugin: Use pytest 5.4.0 new Function API
  • \n
  • 21a0f94 Replace yield_fixture() by fixture()
  • \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-05-04T13:27:19Z", "updated_at": "2020-05-04T17:41:01Z", "closed_at": "2020-05-04T17:40:49Z", "merged_at": "2020-05-04T17:40:49Z", "merge_commit_sha": "b314e088c59425122fb2b2abde8741010d9d274a", "assignee": null, "milestone": null, "draft": 0, "head": "877fb569d2ae460ce845c7c855b02e0cdac23b68", "base": "707fe039947b3e48f2b6dcfe8e577d76b617f2a5", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/753", "merged_by": null, "auto_merge": null} {"id": 434085235, "node_id": "MDExOlB1bGxSZXF1ZXN0NDM0MDg1MjM1", "number": 848, "state": "closed", "locked": 0, "title": "Reload support for config_dir mode.", "user": {"value": 49260, "label": "amjith"}, "body": "A reference implementation for adding support to reload when datasette is in the config_dir mode. \r\n\r\nThis implementation is flawed since it is watching the entire directory and any changes to the database will reload the server and adding unrelated files to the directory will also reload the server. ", "created_at": "2020-06-14T02:34:46Z", "updated_at": "2020-07-03T02:44:54Z", "closed_at": "2020-07-03T02:44:53Z", "merged_at": null, "merge_commit_sha": "888538efdbf545c0df524ca590a17fb6c6fa2419", "assignee": null, "milestone": null, "draft": 0, "head": "0d100d15aca93fae200b3bc2e29dfd60aaa4b384", "base": "57879dc8b346a435804a9e45ffaacbf2a0228bc6", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/848", "merged_by": null, "auto_merge": null} {"id": 434162316, "node_id": "MDExOlB1bGxSZXF1ZXN0NDM0MTYyMzE2", "number": 29, "state": "closed", "locked": 0, "title": "Fixed bug in SQL query for photo scores", "user": {"value": 41546558, "label": "RhetTbull"}, "body": "The join on ZCOMPUTEDASSETATTRIBUTES used the wrong columns. In most of the Photos database tables, table.ZASSET joins with ZGENERICASSET.Z_PK", "created_at": "2020-06-14T15:39:22Z", "updated_at": "2020-12-04T22:32:36Z", "closed_at": "2020-12-04T22:32:27Z", "merged_at": "2020-12-04T22:32:27Z", "merge_commit_sha": "edc80a0d361006f478f2904a90bfe6c730ed6194", "assignee": null, "milestone": null, "draft": 0, "head": "f961a90788cb2059d40b9a0810900ac81e6859f6", "base": "45ce3f8bfb8c70f57ca5d8d82f22368fea1eb391", "author_association": "CONTRIBUTOR", "repo": {"value": 256834907, "label": "dogsheep-photos"}, "url": "https://github.com/dogsheep/dogsheep-photos/pull/29", "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": 442505088, "node_id": "MDExOlB1bGxSZXF1ZXN0NDQyNTA1MDg4", "number": 883, "state": "open", "locked": 0, "title": "Skip counting hidden tables", "user": {"value": 3243482, "label": "abdusco"}, "body": "Potential fix for https://github.com/simonw/datasette/issues/859.\r\n\r\nDisabling table counts for hidden tables speeds up database page quite a bit. In my setup it reduced load time by 2/3 (~300 -> ~90ms)", "created_at": "2020-07-01T07:38:08Z", "updated_at": "2020-07-02T00:25:44Z", "closed_at": null, "merged_at": null, "merge_commit_sha": "527624338acd38b97bb33b0a0b913d80e8345fee", "assignee": null, "milestone": null, "draft": 0, "head": "251884f58895faf8056b3dfdeae3bb92c5bc58ac", "base": "676bb64c877d73f8ff496cef4632f5a8a5a9283c", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/883", "merged_by": null, "auto_merge": null} {"id": 443823040, "node_id": "MDExOlB1bGxSZXF1ZXN0NDQzODIzMDQw", "number": 890, "state": "closed", "locked": 0, "title": "Load only python files from plugins-dir.", "user": {"value": 49260, "label": "amjith"}, "body": "The current behavior for `--plugins-dir` is to load every file in that folder as a python module. This can result in errors if there are non-python files in the plugins dir (such as .mypy_cache). \r\n\r\nThis PR restricts the module loading to only python files. ", "created_at": "2020-07-03T02:47:32Z", "updated_at": "2020-07-03T03:08:33Z", "closed_at": "2020-07-03T03:08:33Z", "merged_at": "2020-07-03T03:08:33Z", "merge_commit_sha": "ea99a4431ce5bc2d65a3496da5b38e1986550a96", "assignee": null, "milestone": null, "draft": 0, "head": "745af3b72d95d91f3ccd703f4fab819bc9f4b6a4", "base": "57879dc8b346a435804a9e45ffaacbf2a0228bc6", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/890", "merged_by": null, "auto_merge": null} {"id": 445023326, "node_id": "MDExOlB1bGxSZXF1ZXN0NDQ1MDIzMzI2", "number": 118, "state": "closed", "locked": 0, "title": "Add insert --truncate option", "user": {"value": 79913, "label": "tsibley"}, "body": "\r\n\r\nDeletes all rows in the table (if it exists) before inserting new rows.\r\nSQLite doesn't implement a TRUNCATE TABLE statement but does optimize an\r\nunqualified DELETE FROM.\r\n\r\nThis can be handy if you want to refresh the entire contents of a table\r\nbut a) don't have a PK (so can't use --replace), b) don't want the table\r\nto disappear (even briefly) for other connections, and c) have to handle\r\nrecords that used to exist being deleted.\r\n\r\nIdeally the replacement of rows would appear instantaneous to other\r\nconnections by putting the DELETE + INSERT in a transaction, but this is\r\nvery difficult without breaking other code as the current transaction\r\nhandling is inconsistent and non-systematic. There exists the\r\npossibility for the DELETE to succeed but the INSERT to fail, leaving an\r\nempty table. This is not much worse, however, than the current\r\npossibility of one chunked INSERT succeeding and being committed while\r\nthe next chunked INSERT fails, leaving a partially complete operation.", "created_at": "2020-07-06T21:58:40Z", "updated_at": "2020-07-08T17:26:21Z", "closed_at": "2020-07-08T17:26:21Z", "merged_at": "2020-07-08T17:26:21Z", "merge_commit_sha": "ae4593316ccf5e42ad26f27033193834a7e696c8", "assignee": null, "milestone": null, "draft": 0, "head": "332f7d770b84734dbed4842ab3ed24ee5b687889", "base": "f8277d0fb9c05a88a9ff01d996e31d55f0f0a645", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/118", "merged_by": null, "auto_merge": null} {"id": 445833908, "node_id": "MDExOlB1bGxSZXF1ZXN0NDQ1ODMzOTA4", "number": 120, "state": "closed", "locked": 0, "title": "Fix query command's support for DML", "user": {"value": 79913, "label": "tsibley"}, "body": "See commit messages for details. I ran into this while investigating another feature/issue.", "created_at": "2020-07-08T01:36:34Z", "updated_at": "2020-07-08T05:14:04Z", "closed_at": "2020-07-08T05:14:04Z", "merged_at": "2020-07-08T05:14:04Z", "merge_commit_sha": "f8277d0fb9c05a88a9ff01d996e31d55f0f0a645", "assignee": null, "milestone": null, "draft": 0, "head": "6a660d12a27864d6ab552e11eef9fd13bc281198", "base": "d0cdaaaf00249230e847be3a3b393ee2689fbfe4", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/120", "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": 453995179, "node_id": "MDExOlB1bGxSZXF1ZXN0NDUzOTk1MTc5", "number": 902, "state": "closed", "locked": 0, "title": "Don't install tests package", "user": {"value": 32467826, "label": "abeyerpath"}, "body": "The `exclude` argument to `find_packages` needs an iterable of package\r\nnames.\r\n\r\nFixes: #456 ", "created_at": "2020-07-21T01:08:50Z", "updated_at": "2020-07-24T20:39:54Z", "closed_at": "2020-07-24T20:39:54Z", "merged_at": "2020-07-24T20:39:54Z", "merge_commit_sha": "6be5654ffab282e8cf39cc138ba2d4496ebc7407", "assignee": null, "milestone": null, "draft": 0, "head": "9aa139dc98bd72a29ee1c940820bc05b0e717f1d", "base": "d9a5ef1c32a4390e398653ebfd570f8e1a03d93e", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/902", "merged_by": null, "auto_merge": null} {"id": 458435592, "node_id": "MDExOlB1bGxSZXF1ZXN0NDU4NDM1NTky", "number": 910, "state": "closed", "locked": 0, "title": "Update pytest requirement from <5.5.0,>=5.2.2 to >=5.2.2,<6.1.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.0.0

\n

pytest 6.0.0 (2020-07-28)

\n

(Please see the full set of changes for this release also in the 6.0.0rc1 notes below)

\n

Breaking Changes

\n
    \n
  • \n

    #5584: PytestDeprecationWarning are now errors by default.

    \n

    Following our plan to remove deprecated features with as little disruption as\npossible, all warnings of type PytestDeprecationWarning now generate errors\ninstead of warning messages.

    \n

    The affected features will be effectively removed in pytest 6.1, so please consult the\nDeprecations and Removals\nsection in the docs for directions on how to update existing code.

    \n

    In the pytest 6.0.X series, it is possible to change the errors back into warnings as a\nstopgap measure by adding this to your pytest.ini file:

    \n
    [pytest]\nfilterwarnings =\n    ignore::pytest.PytestDeprecationWarning\n
    \n

    But this will stop working when pytest 6.1 is released.

    \n

    If you have concerns about the removal of a specific feature, please add a\ncomment to #5584.

    \n
  • \n
  • \n

    #7472: The exec_() and is_true() methods of _pytest._code.Frame have been removed.

    \n
  • \n
\n

Features

\n
    \n
  • #7464: Added support for NO_COLOR and FORCE_COLOR environment variables to control colored output.
  • \n
\n

Improvements

\n
    \n
  • #7467: --log-file CLI option and log_file ini marker now create subdirectories if needed.
  • \n
  • #7489: The pytest.raises function has a clearer error message when match equals the obtained string but is not a regex match. In this case it is suggested to escape the regex.
  • \n
\n

Bug Fixes

\n
    \n
  • #7392: Fix the reported location of tests skipped with @pytest.mark.skip when --runxfail is used.
  • \n
\n\n
\n
\n
\nChangelog\n

Sourced from pytest's changelog.

\n
\n
\nCommits\n
    \n
  • 41a4539 Add link to 6.0.0rc1 changelog
  • \n
  • 45ced1d Update doc/en/announce/release-6.0.0.rst
  • \n
  • 1e4b8d4 Prepare release version 6.0.0
  • \n
  • 3802982 Support generating major releases using issue comments (#7548)
  • \n
  • c2c0b7a Merge pull request #7545 from asottile/pylib_in_docs
  • \n
  • 9818899 remove usage of pylib in docs
  • \n
  • 3a060b7 Revert change to traceback repr (#7535)
  • \n
  • 7ec6401 Change pytest deprecation warnings into errors for 6.0 release (#7362)
  • \n
  • a9799f0 Merge pull request #7531 from bluetech/changelog-mypy-version
  • \n
  • 102360b Merge pull request #7519 from hroncok/pytest_warning_captured_deprecated
  • \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-07-29T13:21:17Z", "updated_at": "2020-07-29T21:26:05Z", "closed_at": "2020-07-29T21:26:04Z", "merged_at": "2020-07-29T21:26:04Z", "merge_commit_sha": "c5c12a797f0b81cd5862dcd50354b4b571e9bf5a", "assignee": null, "milestone": null, "draft": 0, "head": "3493915bbce6a279659df3d6b09ba0d36a8f9793", "base": "3c33b421320c0be81a625ca7307b2e4416a9ed5b", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/910", "merged_by": null, "auto_merge": null} {"id": 469651732, "node_id": "MDExOlB1bGxSZXF1ZXN0NDY5NjUxNzMy", "number": 48, "state": "closed", "locked": 0, "title": "Add pull requests", "user": {"value": 755825, "label": "adamjonas"}, "body": "ref #46 \r\n\r\nIssues don't have merge information on them, which means that PRs need to be pulled separately.\r\n\r\nDid my best to mimic the API of issues.", "created_at": "2020-08-18T17:58:44Z", "updated_at": "2020-11-29T23:51:09Z", "closed_at": "2020-11-29T23:51:09Z", "merged_at": "2020-11-29T23:51:09Z", "merge_commit_sha": "b37f55549461cfe0731b57623f315860b3db49d0", "assignee": null, "milestone": null, "draft": 0, "head": "3a0d5c498f9faae4e40aab204cd01b965a4f61f3", "base": "16d271253f4ea71b261d2d228b926c7bc1a7e660", "author_association": "CONTRIBUTOR", "repo": {"value": 207052882, "label": "github-to-sqlite"}, "url": "https://github.com/dogsheep/github-to-sqlite/pull/48", "merged_by": null, "auto_merge": null} {"id": 469944999, "node_id": "MDExOlB1bGxSZXF1ZXN0NDY5OTQ0OTk5", "number": 49, "state": "closed", "locked": 0, "title": "Document the use of --stop_after with favorites, refs #20", "user": {"value": 370930, "label": "mikepqr"}, "body": "(I discovered this trawling the issues for how to use --since with favorites)", "created_at": "2020-08-19T06:10:52Z", "updated_at": "2021-08-20T00:02:11Z", "closed_at": "2021-08-20T00:02:11Z", "merged_at": "2021-08-20T00:02:10Z", "merge_commit_sha": "b6a4da8be3b6d4b74c6a5fac8924bf22a6824f2c", "assignee": null, "milestone": null, "draft": 0, "head": "7ace806c81faf31c1aace0f0b2a4c17dd72cfa06", "base": "21fc1cad6dd6348c67acff90a785b458d3a81275", "author_association": "CONTRIBUTOR", "repo": {"value": 206156866, "label": "twitter-to-sqlite"}, "url": "https://github.com/dogsheep/twitter-to-sqlite/pull/49", "merged_by": null, "auto_merge": null} {"id": 474703007, "node_id": "MDExOlB1bGxSZXF1ZXN0NDc0NzAzMDA3", "number": 952, "state": "closed", "locked": 0, "title": "Update black requirement from ~=19.10b0 to >=19.10,<21.0", "user": {"value": 27856297, "label": "dependabot-preview[bot]"}, "body": "Updates the requirements on [black](https://github.com/psf/black) to permit the latest version.\n
\nChangelog\n

Sourced from black's changelog.

\n
\n

20.8b1

\n

Packaging

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

20.8b0

\n

Black

\n
    \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

    Black now shows colored diffs (#1266)

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

    Black now works on AWS Lambda (#1141)

    \n
  • \n
  • \n

    added --force-exclude argument (#1032)

    \n
  • \n
  • \n

    removed deprecated --py36 option (#1236)

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
  • \n

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

    \n
  • \n
\n\n
\n
\n
\nCommits\n\n
\n
\n\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n
\nDependabot commands and options\n
\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot use these labels` will set the current labels as the default for future PRs for this repo and language\n- `@dependabot use these reviewers` will set the current reviewers as the default for future PRs for this repo and language\n- `@dependabot use these assignees` will set the current assignees as the default for future PRs for this repo and language\n- `@dependabot use this milestone` will set the current milestone as the default for future PRs for this repo and language\n- `@dependabot badge me` will comment on this PR with code to add a \"Dependabot enabled\" badge to your readme\n\nAdditionally, you can set the following in your Dependabot [dashboard](https://app.dependabot.com):\n- Update frequency (including time of day and day of week)\n- Pull request limits (per update run and/or open at any time)\n- Out-of-range updates (receive only lockfile updates, if desired)\n- Security updates (receive only security updates, if desired)\n\n\n\n
", "created_at": "2020-08-27T13:31:36Z", "updated_at": "2020-09-02T22:26:17Z", "closed_at": "2020-09-02T22:26:16Z", "merged_at": null, "merge_commit_sha": "37f8531b321855bdbc58960281957febaa59e4b9", "assignee": null, "milestone": null, "draft": 0, "head": "7b1354706467136f5030504fe799201b13333a95", "base": "86aefc39c5aca01b00dbc57ba386a6743c21fb46", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/952", "merged_by": null, "auto_merge": null} {"id": 475665984, "node_id": "MDExOlB1bGxSZXF1ZXN0NDc1NjY1OTg0", "number": 142, "state": "closed", "locked": 0, "title": "insert_all(..., alter=True) should work for new columns introduced after the first 100 records", "user": {"value": 96218, "label": "simonwiles"}, "body": "Closes #139.", "created_at": "2020-08-28T22:22:57Z", "updated_at": "2020-08-30T07:28:23Z", "closed_at": "2020-08-28T22:30:14Z", "merged_at": "2020-08-28T22:30:14Z", "merge_commit_sha": "947bb7626fd1763608a470adf9cf5f156ef003e9", "assignee": null, "milestone": null, "draft": 0, "head": "1b992c7c1e5855caa87c7939efad287052f446f3", "base": "ea87c2b943fdd162c42a900ac0aea5ecc2f4b9d9", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/142", "merged_by": null, "auto_merge": null} {"id": 475874493, "node_id": "MDExOlB1bGxSZXF1ZXN0NDc1ODc0NDkz", "number": 146, "state": "closed", "locked": 0, "title": "Handle case where subsequent records (after first batch) include extra columns", "user": {"value": 96218, "label": "simonwiles"}, "body": "Addresses #145.\r\n\r\nI think this should do the job. If it meets with your approval I'll update this PR to include an update to the documentation -- I came across this bug while preparing a PR to update the documentation around `batch_size` in any event.", "created_at": "2020-08-30T07:13:58Z", "updated_at": "2020-09-08T23:20:37Z", "closed_at": "2020-09-08T23:20:37Z", "merged_at": "2020-09-08T23:20:36Z", "merge_commit_sha": "e6d202b742a7b531fffa593703d34f8337632d68", "assignee": null, "milestone": null, "draft": 0, "head": "40fcea41525682fdc2f601da787b29d5a8517dcd", "base": "deb2eb013ff85bbc828ebc244a9654f0d9c3139e", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/146", "merged_by": null, "auto_merge": null} {"id": 483027587, "node_id": "MDExOlB1bGxSZXF1ZXN0NDgzMDI3NTg3", "number": 156, "state": "closed", "locked": 0, "title": "Typos in tests", "user": {"value": 96218, "label": "simonwiles"}, "body": "One of these is my fault, and the other is one I just happened to come across. They're harmless, but might as well be fixed.", "created_at": "2020-09-09T18:00:58Z", "updated_at": "2020-09-09T18:24:50Z", "closed_at": "2020-09-09T18:21:23Z", "merged_at": "2020-09-09T18:21:23Z", "merge_commit_sha": "367082e787101fb90901ef3214804ab23a92ce46", "assignee": null, "milestone": null, "draft": 0, "head": "b777776753ef08f35dfaa7d86b2d5082e8904f27", "base": "6be61263642d8e46ec54cf5f51af74e0df2f2393", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/156", "merged_by": null, "auto_merge": null} {"id": 483175509, "node_id": "MDExOlB1bGxSZXF1ZXN0NDgzMTc1NTA5", "number": 158, "state": "closed", "locked": 0, "title": "Fix accidental mega long line in docs", "user": {"value": 167319, "label": "tomviner"}, "body": "", "created_at": "2020-09-09T22:31:23Z", "updated_at": "2020-09-16T06:21:43Z", "closed_at": "2020-09-16T06:21:43Z", "merged_at": "2020-09-16T06:21:43Z", "merge_commit_sha": "7805d53bcf11199bd1f2b07e05ae90151f9d0eb0", "assignee": null, "milestone": null, "draft": 0, "head": "5c1d8a5f3ac8684657eefe4f57ff5ff605f6b633", "base": "367082e787101fb90901ef3214804ab23a92ce46", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/158", "merged_by": null, "auto_merge": null} {"id": 493162767, "node_id": "MDExOlB1bGxSZXF1ZXN0NDkzMTYyNzY3", "number": 178, "state": "closed", "locked": 0, "title": "Update README.md", "user": {"value": 19921, "label": "shakeel"}, "body": "The `sqlite-utils insert releases.db releases - --pk` is missing the pk field name, added ` \"id\"` to fix it.", "created_at": "2020-09-25T15:52:11Z", "updated_at": "2020-10-01T14:18:30Z", "closed_at": "2020-09-30T20:29:28Z", "merged_at": "2020-09-30T20:29:28Z", "merge_commit_sha": "cada1017edcfa691c2314d7ad1b7c7576495317f", "assignee": null, "milestone": null, "draft": 0, "head": "0c6a81dae802a55d5469c18cd32402d11b6e8a59", "base": "94fc62857ee2655a21d85f6dae84b67bbfa5956d", "author_association": "CONTRIBUTOR", "repo": {"value": 140912432, "label": "sqlite-utils"}, "url": "https://github.com/simonw/sqlite-utils/pull/178", "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": 498630708, "node_id": "MDExOlB1bGxSZXF1ZXN0NDk4NjMwNzA4", "number": 995, "state": "closed", "locked": 0, "title": "Document setting Google Cloud SDK properties", "user": {"value": 110420, "label": "ghing"}, "body": "Document setting Google Cloud SDK properties to avoid having to respond to interactive prompts when running `datasette publish cloudrun`.", "created_at": "2020-10-06T15:18:01Z", "updated_at": "2020-10-08T23:55:30Z", "closed_at": "2020-10-06T16:25:38Z", "merged_at": "2020-10-06T16:25:38Z", "merge_commit_sha": "ca5ba6b77b4c973fa7ba91008a2e99debfa306b4", "assignee": null, "milestone": {"value": 5971510, "label": "Datasette 0.50"}, "draft": 0, "head": "aed2cf9f470bdc0b704ee62032fe0dcb1e557e43", "base": "5a184a5d211d3226e0417ee5cf8476cd887cd35e", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/995", "merged_by": null, "auto_merge": null} {"id": 501579088, "node_id": "MDExOlB1bGxSZXF1ZXN0NTAxNTc5MDg4", "number": 1017, "state": "closed", "locked": 0, "title": "Update janus requirement from <0.6,>=0.4 to >=0.4,<0.7", "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

Changes

\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\n
\n
\n
\nCommits\n
    \n
  • d186724 Fix yaml
  • \n
  • dbb2d7b Fix deploy script
  • \n
  • 18df625 Bump to 0.6.0
  • \n
  • a50b7ec Test on ubuntu only, the library has no platform specific dependencies
  • \n
  • b599d94 Fix workflow
  • \n
  • 9897fca Setup github workflows
  • \n
  • cde6918 Drop Python 3.5, test on Python 3.9, format with black/isort
  • \n
  • 5f04d79 Support Python 3.9 officially
  • \n
  • ac23eb7 janus: remove unused type ignores (#287)
  • \n
  • 0da8f95 Make all tests non-skipped again
  • \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-10-12T13:29:46Z", "updated_at": "2020-10-14T21:52:08Z", "closed_at": "2020-10-14T21:52:07Z", "merged_at": "2020-10-14T21:52:07Z", "merge_commit_sha": "7f2edb5dd2074dce0090659021991695a984844b", "assignee": null, "milestone": null, "draft": 0, "head": "f30d9da06b02a53f880b6fe7a7af9d3ff719dede", "base": "acf07a67722aa74828744726187690b59d342494", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1017", "merged_by": null, "auto_merge": null} {"id": 501579315, "node_id": "MDExOlB1bGxSZXF1ZXN0NTAxNTc5MzE1", "number": 1018, "state": "closed", "locked": 0, "title": "Update asgiref requirement from ~=3.2.10 to >=3.2.10,<3.4.0", "user": {"value": 27856297, "label": "dependabot-preview[bot]"}, "body": "Updates the requirements on [asgiref](https://github.com/django/asgiref) to permit the latest version.\n
\nChangelog\n

Sourced from asgiref's changelog.

\n
\n

3.3.0 (2020-10-09)

\n
    \n
  • sync_to_async now defaults to thread-sensitive mode being on
  • \n
  • async_to_sync now works inside of forked processes
  • \n
  • WsgiToAsgi now correctly clamps its response body when Content-Length is set
  • \n
\n

3.2.10 (2020-08-18)

\n
    \n
  • Fixed bugs due to bad WeakRef handling introduced in 3.2.8
  • \n
\n

3.2.9 (2020-06-16)

\n
    \n
  • Fixed regression with exception handling in 3.2.8 related to the contextvars fix.
  • \n
\n

3.2.8 (2020-06-15)

\n
    \n
  • Fixed small memory leak in local.Local
  • \n
  • contextvars are now persisted through AsyncToSync
  • \n
\n

3.2.7 (2020-03-24)

\n
    \n
  • Bug fixed in local.Local where deleted Locals would occasionally inherit\ntheir storage into new Locals due to memory reuse.
  • \n
\n

3.2.6 (2020-03-23)

\n
    \n
  • local.Local now works in all threading situations, no longer requires\nperiodic garbage collection, and works with libraries that monkeypatch\nthreading (like gevent)
  • \n
\n

3.2.5 (2020-03-11)

\n
    \n
  • self is now preserved on methods by async_to_sync
  • \n
\n

3.2.4 (2020-03-10)

\n\n
\n
\n
\nCommits\n
    \n
  • 7dba5ff Releasing 3.3.0
  • \n
  • e1e0dd9 Added ZeroCopy extension
  • \n
  • 3834d13 Added rpc.py to Implementations (#198)
  • \n
  • 03b0dbb Clamped WsgiToAsgi response body using Content-Length value
  • \n
  • cfd82e4 Fix linting with unused import removal
  • \n
  • cc1877e Fix import sorting in previous commit.
  • \n
  • 7becc9d Making thread_sensitive=True the default
  • \n
  • 66a6e68 Fixed #194: Made async_to_sync work inside a fork
  • \n
  • 4ab9d8e Fixed #193: Bumped docs version to 3.0
  • \n
  • 1c9d063 Clarified "Optional" meaning (#190)
  • \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-10-12T13:30:09Z", "updated_at": "2020-10-14T21:51:36Z", "closed_at": "2020-10-14T21:51:35Z", "merged_at": "2020-10-14T21:51:35Z", "merge_commit_sha": "b4a8e70957517ff44d6a9121422d266a3c5fd664", "assignee": null, "milestone": null, "draft": 0, "head": "4b021be087d0dba2b4ac0b872b2512f5b2203397", "base": "acf07a67722aa74828744726187690b59d342494", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1018", "merged_by": null, "auto_merge": null} {"id": 501791663, "node_id": "MDExOlB1bGxSZXF1ZXN0NTAxNzkxNjYz", "number": 10, "state": "closed", "locked": 0, "title": "Update utils.py to fix sqlite3.OperationalError", "user": {"value": 29426418, "label": "mattiaborsoi"}, "body": "Fixes the errors:\r\n- sqlite3.OperationalError: table posts has no column named text\r\n- sqlite3.OperationalError: table photos has no column named hasSticker\r\n\r\nThat will cause sqlite-utils to notice if there's a missing column and add it. As recommended by @simonw", "created_at": "2020-10-12T20:17:53Z", "updated_at": "2020-10-12T20:25:10Z", "closed_at": "2020-10-12T20:25:09Z", "merged_at": "2020-10-12T20:25:09Z", "merge_commit_sha": "a5a2b5feb56fef4f2b627699b7d628ee9d2d63db", "assignee": null, "milestone": null, "draft": 0, "head": "c7bdb0207708a9eb40ba095039f0918fd103b176", "base": "f4a82633da927cde672c9d9af92930bfca2e3ddf", "author_association": "CONTRIBUTOR", "repo": {"value": 205429375, "label": "swarm-to-sqlite"}, "url": "https://github.com/dogsheep/swarm-to-sqlite/pull/10", "merged_by": null, "auto_merge": null} {"id": 503685077, "node_id": "MDExOlB1bGxSZXF1ZXN0NTAzNjg1MDc3", "number": 1022, "state": "closed", "locked": 0, "title": "Fix table name in spatialite example command", "user": {"value": 639012, "label": "jsfenfen"}, "body": "The example query for creating a new point geometry seems to be using a table called 'museums' but at one point it instead uses 'events'. I *believe* it is intended to be museums (the example makes more sense if so). ", "created_at": "2020-10-14T22:19:34Z", "updated_at": "2020-10-14T23:46:46Z", "closed_at": "2020-10-14T23:46:46Z", "merged_at": "2020-10-14T23:46:46Z", "merge_commit_sha": "4f7c0ebd85ccd8c1853d7aa0147628f7c1b749cc", "assignee": null, "milestone": null, "draft": 0, "head": "7cef70a5528af4626302729ff0ebc88d92b5f4ca", "base": "7f2edb5dd2074dce0090659021991695a984844b", "author_association": "CONTRIBUTOR", "repo": {"value": 107914493, "label": "datasette"}, "url": "https://github.com/simonw/datasette/pull/1022", "merged_by": null, "auto_merge": null}