{"html_url": "https://github.com/simonw/datasette/releases/tag/0.36", "id": 23896184, "node_id": "MDc6UmVsZWFzZTIzODk2MTg0", "tag_name": "0.36", "target_commitish": "master", "name": "Datasette 0.36", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-02-22T03:04:46Z", "published_at": "2020-02-22T03:24:50Z", "body": "* The `datasette` object passed to plugins now has API documentation: [Datasette class](https://datasette.readthedocs.io/en/latest/datasette.html#datasette). (#576)\r\n* New methods on `datasette`: `.add_database()` and `.remove_database()` - [documentation](https://datasette.readthedocs.io/en/latest/datasette.html#datasette-add-database). (#671)\r\n* `prepare_connection()` plugin hook now takes optional `datasette` and `database` arguments - [prepare_connection(conn, database, datasette)](https://datasette.readthedocs.io/en/latest/plugins.html#plugin-hook-prepare-connection). (#678)\r\n* Added three new plugins and one new conversion tool to the [The Datasette Ecosystem](https://datasette.readthedocs.io/en/latest/ecosystem.html#ecosystem).\r\n\r\nhttps://datasette.readthedocs.io/en/latest/changelog.html#v0-36", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.37", "id": 23986460, "node_id": "MDc6UmVsZWFzZTIzOTg2NDYw", "tag_name": "0.37", "target_commitish": "master", "name": "Datasette 0.37", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-02-26T01:22:02Z", "published_at": "2020-02-26T03:44:07Z", "body": "* Plugins now have a supported mechanism for writing to a database, using the new `.execute_write()` and `.execute_write_fn()` methods. [Documentation](https://datasette.readthedocs.io/en/stable/internals.html#database-execute-write). (#682)\r\n* Immutable databases that have had their rows counted using the `inspect` command now use the calculated count more effectively - thanks, Kevin Keogh. (#666)\r\n* `--reload` no longer restarts the server if a database file is modified, unless that database was opened immutable mode with `-i`. (#494)\r\n* New `?_searchmode=raw` option turns off escaping for FTS queries in `?_search=` allowing full use of SQLite\u2019s [FTS5 query syntax](https://www.sqlite.org/fts5.html#full_text_query_syntax). (#676)\r\n", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.4", "id": 24026132, "node_id": "MDc6UmVsZWFzZTI0MDI2MTMy", "tag_name": "2.4", "target_commitish": "master", "name": "2.4", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-02-27T04:55:58Z", "published_at": "2020-02-27T04:58:25Z", "body": "* `table.disable_fts()` can now be used to remove FTS tables and triggers that were created using `table.enable_fts(...)`. (#88)\r\n* The `sqlite-utils disable-fts` command can be used to remove FTS tables and triggers from the command-line. (#88)\r\n* Trying to create table columns with square braces ([ or ]) in the name now raises an error. (#86)\r\n* Subclasses of `dict`, `list` and `tuple` are now detected as needing a JSON column. (#87)\r\n", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.37.1", "id": 24154697, "node_id": "MDc6UmVsZWFzZTI0MTU0Njk3", "tag_name": "0.37.1", "target_commitish": "master", "name": "Datasette 0.37.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-03T03:43:08Z", "published_at": "2020-03-03T03:46:17Z", "body": "* Don\u2019t attempt to count table rows to display on the index page for databases > 100MB. (#688)\r\n* Print exceptions if they occur in the write thread rather than silently swallowing them.\r\n* Handle the possibility of `scope[\"path\"]` being a string rather than bytes\r\n* Better documentation for the [extra_template_vars(template, database, table, view_name, request, datasette)](https://datasette.readthedocs.io/en/stable/plugins.html#plugin-hook-extra-template-vars) plugin hook.\r\n", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.38", "id": 24330942, "node_id": "MDc6UmVsZWFzZTI0MzMwOTQy", "tag_name": "0.38", "target_commitish": "master", "name": "0.38", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-08T23:26:50Z", "published_at": "2020-03-08T23:42:36Z", "body": "* The [Docker build](https://hub.docker.com/r/datasetteproject/datasette) of Datasette now uses SQLite 3.31.1, upgraded from 3.26. (#695)\r\n* `datasette publish cloudrun` now accepts an optional `--memory=2Gi` flag for setting the Cloud Run allocated memory to a value other than the default (256Mi). (#694)\r\n* Fixed bug where templates that shipped with plugins were sometimes not being correctly loaded. (#697)\r\n", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/dogsheep/github-to-sqlite/releases/tag/0.7", "id": 24410477, "node_id": "MDc6UmVsZWFzZTI0NDEwNDc3", "tag_name": "0.7", "target_commitish": "master", "name": "0.7", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-11T02:47:32Z", "published_at": "2020-03-11T02:48:32Z", "body": "* New `github-to-sqlite commits my.db dogsheep/github-to-sqlite` command. #17", "repo": {"value": 207052882, "label": "github-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.4.1", "id": 24530295, "node_id": "MDc6UmVsZWFzZTI0NTMwMjk1", "tag_name": "2.4.1", "target_commitish": "master", "name": "2.4.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-02T06:12:21Z", "published_at": "2020-03-14T20:06:08Z", "body": "* `table.enable_fts()` now works with columns that contain spaces. (#90)\r\n", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.4.2", "id": 24530387, "node_id": "MDc6UmVsZWFzZTI0NTMwMzg3", "tag_name": "2.4.2", "target_commitish": "master", "name": "2.4.2", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-14T20:09:56Z", "published_at": "2020-03-14T20:13:18Z", "body": "* `table.column_dicts` now works with all column types - previously it would throw errors on types other than `TEXT`, `BLOB`, `INTEGER` or `FLOAT`. (#92)\r\n* Documentation for `NotFoundError` thrown by `table.get(pk)` - see [Retrieving a specific record](https://sqlite-utils.readthedocs.io/en/latest/python-api.html#python-api-get).\r\n", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.17", "id": 24722801, "node_id": "MDc6UmVsZWFzZTI0NzIyODAx", "tag_name": "0.17", "target_commitish": "master", "name": "0.17", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-20T19:22:37Z", "published_at": "2020-03-20T19:23:40Z", "body": "* Upgraded to latest `sqlite-utils` (currently 2.4.2)\r\n* This fixed a bug with `user-timeline` - #34", "repo": {"value": 206156866, "label": "twitter-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.18", "id": 24724394, "node_id": "MDc6UmVsZWFzZTI0NzI0Mzk0", "tag_name": "0.18", "target_commitish": "master", "name": "0.18", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-20T20:16:46Z", "published_at": "2020-03-20T20:19:42Z", "body": "* `twitter-to-sqlite user-timeline` command now accepts `--sql` and `--attach` and `--ids` options, and can also accept multiple screen names or user IDs as command arguments. #35", "repo": {"value": 206156866, "label": "twitter-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.19", "id": 24728163, "node_id": "MDc6UmVsZWFzZTI0NzI4MTYz", "tag_name": "0.19", "target_commitish": "master", "name": "0.19", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-20T23:14:02Z", "published_at": "2020-03-20T23:16:53Z", "body": "* The `twitter-to-sqlite friends` and `twitter-to-sqlite followers` commands now accept the `--sql` and `--attach` options. #36\r\n* Improved the display of the progress bar for the `user-timeline` command. #38", "repo": {"value": 206156866, "label": "twitter-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/hacker-news-to-sqlite/releases/tag/0.1a", "id": 24731201, "node_id": "MDc6UmVsZWFzZTI0NzMxMjAx", "tag_name": "0.1a", "target_commitish": "master", "name": "0.1a", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-21T04:19:07Z", "published_at": "2020-03-21T04:26:28Z", "body": "* `user` and `trees` commands.", "repo": {"value": 248903544, "label": "hacker-news-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/hacker-news-to-sqlite/releases/tag/0.2a", "id": 24738954, "node_id": "MDc6UmVsZWFzZTI0NzM4OTU0", "tag_name": "0.2a", "target_commitish": "master", "name": "0.2a", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-21T15:27:15Z", "published_at": "2020-03-21T19:46:58Z", "body": "Compatibility with sqlite-utils 1.x", "repo": {"value": 248903544, "label": "hacker-news-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/hacker-news-to-sqlite/releases/tag/0.3", "id": 24738963, "node_id": "MDc6UmVsZWFzZTI0NzM4OTYz", "tag_name": "0.3", "target_commitish": "master", "name": "0.3", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-21T19:46:08Z", "published_at": "2020-03-21T19:47:36Z", "body": "First non-alpha release. Now configures full-text search for the `users` and `items` tables. #1", "repo": {"value": 248903544, "label": "hacker-news-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/hacker-news-to-sqlite/releases/tag/0.3.1", "id": 24740687, "node_id": "MDc6UmVsZWFzZTI0NzQwNjg3", "tag_name": "0.3.1", "target_commitish": "master", "name": "0.3.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-21T22:39:34Z", "published_at": "2020-03-21T22:41:16Z", "body": "Added documentation on [Browsing your data with Datasette](https://github.com/dogsheep/hacker-news-to-sqlite/blob/0.3.1/README.md#browsing-your-data-with-datasette).", "repo": {"value": 248903544, "label": "hacker-news-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.4.3", "id": 24786773, "node_id": "MDc6UmVsZWFzZTI0Nzg2Nzcz", "tag_name": "2.4.3", "target_commitish": "master", "name": "2.4.3", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-23T19:58:55Z", "published_at": "2020-03-23T20:00:25Z", "body": "* Column type suggestion code is no longer confused by null values. (#94)", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.4.4", "id": 24787721, "node_id": "MDc6UmVsZWFzZTI0Nzg3NzIx", "tag_name": "2.4.4", "target_commitish": "master", "name": "2.4.4", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-23T20:32:09Z", "published_at": "2020-03-23T20:34:18Z", "body": "* Fixed bug where columns with only null values were not correctly created. (#95)", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/dogsheep/github-to-sqlite/releases/tag/1.0", "id": 24792596, "node_id": "MDc6UmVsZWFzZTI0NzkyNTk2", "tag_name": "1.0", "target_commitish": "master", "name": "1.0", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-24T00:07:47Z", "published_at": "2020-03-24T00:11:51Z", "body": "* Full-text search is configured for more tables. #19\r\n* Release assets are now pulled out into a separate `assets` table. #15\r\n* Now depends on sqlite-utils 2.x. #20\r\n* Commit raw authors are now used to populate a new `raw_authors` able. #18\r\n* New live demo at https://github-to-sqlite.dogsheep.net/ #13\r\n* GitHub API errors are now raised as Pyton exceptions. #21\r\n* Fixed bug running `commits` against repos with no commits. #22", "repo": {"value": 207052882, "label": "github-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/inaturalist-to-sqlite/releases/tag/0.2", "id": 24793032, "node_id": "MDc6UmVsZWFzZTI0NzkzMDMy", "tag_name": "0.2", "target_commitish": "master", "name": "0.2", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-24T00:35:44Z", "published_at": "2020-03-24T00:36:40Z", "body": "* Upgraded to `sqlite-utils` 2.x\r\n* First non-alpha release", "repo": {"value": 206202864, "label": "inaturalist-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.39", "id": 24836140, "node_id": "MDc6UmVsZWFzZTI0ODM2MTQw", "tag_name": "0.39", "target_commitish": "master", "name": "0.39", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-25T04:02:37Z", "published_at": "2020-03-25T04:11:35Z", "body": "* New [base_url](https://datasette.readthedocs.io/en/latest/config.html#config-base-url) configuration setting for serving up the correct links while running Datasette under a different URL prefix. (#394)\r\n* New metadata settings `\"sort\"` and `\"sort_desc\"` for setting the default sort order for a table. See [Setting a default sort order](https://datasette.readthedocs.io/en/latest/metadata.html#metadata-default-sort). (#702)\r\n* Sort direction arrow now displays by default on the primary key. This means you only have to click once (not twice) to sort in reverse order. (#677)\r\n* New `await Request(scope, receive).post_vars()` method for accessing POST form variables. (#700)\r\n* Plugin hooks documentation now links to example uses of each plugin. (#709)\r\n", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/dogsheep/pocket-to-sqlite/releases/tag/0.2", "id": 24950669, "node_id": "MDc6UmVsZWFzZTI0OTUwNjY5", "tag_name": "0.2", "target_commitish": "master", "name": "0.2", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-27T22:23:16Z", "published_at": "2020-03-27T22:26:30Z", "body": "* Defaults to only retrieving updated items, unless you use `--all`. #2 \r\n* Now displays a progress bar for initial data import and `--all`.\r\n* Data is now fetched 500 items at a time using API pagination. #1\r\n* Now depends on `sqlite-utils 2.x`.\r\n* `auth.json` now uses `pocket_` prefix on each stored key. #4", "repo": {"value": 213286752, "label": "pocket-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/healthkit-to-sqlite/releases/tag/0.5", "id": 24953710, "node_id": "MDc6UmVsZWFzZTI0OTUzNzEw", "tag_name": "0.5", "target_commitish": "master", "name": "0.5", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-28T01:50:51Z", "published_at": "2020-03-28T01:55:19Z", "body": "* Upgraded to latest sqlite-utils", "repo": {"value": 197882382, "label": "healthkit-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/swarm-to-sqlite/releases/tag/0.3", "id": 24954042, "node_id": "MDc6UmVsZWFzZTI0OTU0MDQy", "tag_name": "0.3", "target_commitish": "master", "name": "0.3", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-28T02:25:29Z", "published_at": "2020-03-28T02:28:35Z", "body": "* Upgraded to sqlite-utils 2.x", "repo": {"value": 205429375, "label": "swarm-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/swarm-to-sqlite/releases/tag/0.3.1", "id": 24954053, "node_id": "MDc6UmVsZWFzZTI0OTU0MDUz", "tag_name": "0.3.1", "target_commitish": "master", "name": "0.3.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-03-28T02:29:41Z", "published_at": "2020-03-28T02:30:10Z", "body": "* Fixed bug with very old checkins that were missing their source - thanks, @mfa! #6", "repo": {"value": 205429375, "label": "swarm-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.20", "id": 25070766, "node_id": "MDc6UmVsZWFzZTI1MDcwNzY2", "tag_name": "0.20", "target_commitish": "master", "name": "0.20", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-04-01T04:18:17Z", "published_at": "2020-04-01T04:18:53Z", "body": "* Reworked how `--since` works to fix a bug spotted in #39. The most recently seen tweet ID for various commands is now stored in a new `since_ids` table.\r\n* New feature: the friends, followers and listed counts for each user are now stored in a `count_history` table and updated any time we spot that the counts in that user's profile have changed. #40", "repo": {"value": 206156866, "label": "twitter-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.20.1", "id": 25070964, "node_id": "MDc6UmVsZWFzZTI1MDcwOTY0", "tag_name": "0.20.1", "target_commitish": "master", "name": "0.20.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-04-01T04:31:23Z", "published_at": "2020-04-01T04:33:35Z", "body": "* Buf fix: `since_id` table no longer records a record for `None`, `None`. #41", "repo": {"value": 206156866, "label": "twitter-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.5", "id": 25436265, "node_id": "MDc6UmVsZWFzZTI1NDM2MjY1", "tag_name": "2.5", "target_commitish": "master", "name": "2.5", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-04-13T03:52:19Z", "published_at": "2020-04-13T03:54:08Z", "body": "* Panda\u2019s Timestamp is now stored as a SQLite TEXT column. Thanks, b0b5h4rp13! (#96)\r\n* `table.last_pk` is now only available for inserts or upserts of a single record. (#98)\r\n* New `Database(filepath, recreate=True)` parameter for deleting and recreating the database. (#97)\r\n", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.6", "id": 25554617, "node_id": "MDc6UmVsZWFzZTI1NTU0NjE3", "tag_name": "2.6", "target_commitish": "master", "name": "2.6", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-04-16T03:13:13Z", "published_at": "2020-04-16T03:14:48Z", "body": "* New `table.rows_where(..., order_by=\"age desc\")` argument, see [Listing rows](https://sqlite-utils.readthedocs.io/en/stable/python-api.html#listing-rows). (#76)\r\n", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/dogsheep/github-to-sqlite/releases/tag/1.0.1", "id": 25583094, "node_id": "MDc6UmVsZWFzZTI1NTgzMDk0", "tag_name": "1.0.1", "target_commitish": "master", "name": "1.0.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-04-16T17:41:47Z", "published_at": "2020-04-16T18:09:29Z", "body": "* Fixed bug where repository topics were not being correctly fetched #26\r\n* Live demo at https://github-to-sqlite.dogsheep.net/ now uses [datasette-render-markdown](https://github.com/simonw/datasette-render-markdown) and pulls in issue comments #25", "repo": {"value": 207052882, "label": "github-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.21", "id": 25632029, "node_id": "MDc6UmVsZWFzZTI1NjMyMDI5", "tag_name": "0.21", "target_commitish": "master", "name": "0.21", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-04-17T23:44:31Z", "published_at": "2020-04-17T23:46:51Z", "body": "* New command: `twitter-to-sqlite lists username` fetches lists owned by the specified users. #43\r\n* Handle tweets with a blank `source`. #44\r\n* Fixed error with `twitter-to-sqlite user-timeline --sql=... --ids`. #42\r\n* Better error messages for non-existing users. #37\r\n", "repo": {"value": 206156866, "label": "twitter-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/github-to-sqlite/releases/tag/1.1", "id": 25640859, "node_id": "MDc6UmVsZWFzZTI1NjQwODU5", "tag_name": "1.1", "target_commitish": "master", "name": "1.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-04-18T15:07:04Z", "published_at": "2020-04-18T15:09:55Z", "body": "* New `github-to-sqlite contributors` command for fetching contributors to one or more repositories. #28\r\n* The [live demo](https://github-to-sqlite.dogsheep.net/) now includes contributors, and pulls data from `simonw/datasette` and `simonw/sqlite-utils` in addition to the Dogsheep repositories.\r\n* The `organization` column in the `repos` table is now a foreign key to `users` as opposed to a big piece of JSON. #27", "repo": {"value": 207052882, "label": "github-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/github-to-sqlite/releases/tag/2.0", "id": 25745723, "node_id": "MDc6UmVsZWFzZTI1NzQ1NzIz", "tag_name": "2.0", "target_commitish": "master", "name": "2.0", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-04-22T01:20:52Z", "published_at": "2020-04-22T01:24:37Z", "body": "This release includes some backwards-incompatible schema changes:\r\n\r\n* The `milestone` and `assignee` columns on the `issues` table are now integers that are foreign keys to the `milestones` and `users` tables - previously they could be `text` columns instead. #30\r\n* `milestones` now has an integer foreign key in the `creator` column, and a new `repo` column that is an integer foreign key to the `repos` table. #29\r\n* The `repo` column in the `issues` table is now an integer foreign key to `repos`. Previously it was a string of the format `dogsheep/github-to-sqlite`. #31", "repo": {"value": 207052882, "label": "github-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.40", "id": 25748264, "node_id": "MDc6UmVsZWFzZTI1NzQ4MjY0", "tag_name": "0.40", "target_commitish": "master", "name": "0.40", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-04-22T04:06:39Z", "published_at": "2020-04-22T04:06:51Z", "body": "* Datasette [Metadata](https://datasette.readthedocs.io/en/latest/metadata.html) can now be provided as a YAML file as an optional alternative to JSON. See [Using YAML for metadata](https://datasette.readthedocs.io/en/latest/metadata.html#metadata-yaml). (#713)\r\n* Removed support for `datasette publish now`, which used the the now-retired Zeit Now v1 hosting platform. A new plugin, [datasette-publish-now](https://github.com/simonw/datasette-publish-now), can be installed to publish data to Zeit ([now Vercel](https://vercel.com/blog/zeit-is-now-vercel)) Now v2. (#710)\r\n* Fixed a bug where the `extra_template_vars(request, view_name)` plugin hook was not receiving the correct `view_name`. (#716)\r\n* Variables added to the template context by the `extra_template_vars()` plugin hook are now shown in the `?_context=1` debugging mode (see [template_debug](https://datasette.readthedocs.io/en/latest/config.html#config-template-debug)). (#693)\r\n* Fixed a bug where the \u201ctemplates considered\u201d HTML comment was no longer being displayed. (#689)\r\n* Fixed a `datasette publish` bug where `--plugin-secret` would over-ride plugin configuration in the provided `metadata.json` file. (#724)\r\n* Added a new CSS class for customizing the canned query page. (#727)", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/releases/tag/0.1a", "id": 25832422, "node_id": "MDc6UmVsZWFzZTI1ODMyNDIy", "tag_name": "0.1a", "target_commitish": "master", "name": "0.1a", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-04-19T00:15:55Z", "published_at": "2020-04-24T00:40:57Z", "body": "* First alpha release", "repo": {"value": 256834907, "label": "dogsheep-photos"}, "reactions": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/releases/tag/0.2a", "id": 25832475, "node_id": "MDc6UmVsZWFzZTI1ODMyNDc1", "tag_name": "0.2a", "target_commitish": "master", "name": "0.2a", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-04-24T00:42:43Z", "published_at": "2020-04-24T00:44:21Z", "body": "* Only upload photos not already in S3. #9 ", "repo": {"value": 256834907, "label": "dogsheep-photos"}, "reactions": null} {"html_url": "https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.21.1", "id": 26059149, "node_id": "MDc6UmVsZWFzZTI2MDU5MTQ5", "tag_name": "0.21.1", "target_commitish": "master", "name": "0.21.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-04-30T18:20:43Z", "published_at": "2020-04-30T18:21:46Z", "body": "* Fixed bug that occurred when the `since_ids` table had not yet been created. #46", "repo": {"value": 206156866, "label": "twitter-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.7", "id": 26059545, "node_id": "MDc6UmVsZWFzZTI2MDU5NTQ1", "tag_name": "2.7", "target_commitish": "master", "name": "2.7", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-04-18T00:04:50Z", "published_at": "2020-04-30T18:33:20Z", "body": "* New `columns=` argument for the `.insert()`, `.insert_all()`, `.upsert()` and `.upsert_all()` methods, for over-riding the auto-detected types for columns and specifying additional columns that should be added when the table is created. See [Custom column order and column types](https://sqlite-utils.readthedocs.io/en/stable/python-api.html#python-api-custom-columns). (#100)\r\n", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/dogsheep/github-to-sqlite/releases/tag/2.1", "id": 26067911, "node_id": "MDc6UmVsZWFzZTI2MDY3OTEx", "tag_name": "2.1", "target_commitish": "master", "name": "2.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-04-30T23:02:24Z", "published_at": "2020-04-30T23:03:32Z", "body": "* New `github-to-sqlite scrape-dependents` command for importing the dependent repositories for a repo. #34", "repo": {"value": 207052882, "label": "github-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.7.1", "id": 26096691, "node_id": "MDc6UmVsZWFzZTI2MDk2Njkx", "tag_name": "2.7.1", "target_commitish": "master", "name": "2.7.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-05-01T22:08:37Z", "published_at": "2020-05-01T22:11:19Z", "body": "* New `sqlite-utils views my.db` command for listing views in a database, see [Listing views](https://sqlite-utils.readthedocs.io/en/latest/cli.html#cli-views). (#105)\r\n* `sqlite-utils tables` (and `views`) has a new `--schema` option which outputs the table/view schema, see [Listing tables](https://sqlite-utils.readthedocs.io/en/latest/cli.html#cli-tables). (#104)\r\n* Nested structures containing invalid JSON values (e.g. Python bytestrings) are now serialized using `repr()` instead of throwing an error. (#102)", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.7.2", "id": 26107311, "node_id": "MDc6UmVsZWFzZTI2MTA3MzEx", "tag_name": "2.7.2", "target_commitish": "master", "name": "2.7.2", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-05-02T16:05:27Z", "published_at": "2020-05-02T16:10:11Z", "body": "* `db.create_view(...)` now has additional parameters `ignore=True` or `replace=True`, see [Creating views](https://sqlite-utils.readthedocs.io/en/latest/python-api.html#creating-views). (#106)\r\n", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/dogsheep/github-to-sqlite/releases/tag/2.2", "id": 26110434, "node_id": "MDc6UmVsZWFzZTI2MTEwNDM0", "tag_name": "2.2", "target_commitish": "master", "name": "2.2", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-05-02T21:23:11Z", "published_at": "2020-05-02T21:28:00Z", "body": "* New command: `github-to-sqlite stargazers` ([docs](https://github.com/dogsheep/github-to-sqlite/blob/2.2/README.md#fetching-users-that-have-starred-specific-repos)) for fetching all users who have starred the specified repositories. #4\r\n* Added several views: [dependent_repos](https://github-to-sqlite.dogsheep.net/github/dependent_repos), [repos_starred](https://github-to-sqlite.dogsheep.net/github/repos_starred), [recent_releases](https://github-to-sqlite.dogsheep.net/github/recent_releases). #10 #12 #36\r\n* Added indexes on all foreign key relationships. #35\r\n* GitHub API token can now be read from `GITHUB_TOKEN` environment variable. #33", "repo": {"value": 207052882, "label": "github-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.8", "id": 26120136, "node_id": "MDc6UmVsZWFzZTI2MTIwMTM2", "tag_name": "2.8", "target_commitish": "master", "name": "2.8", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-05-03T15:39:56Z", "published_at": "2020-05-03T15:41:31Z", "body": "* New `sqlite-utils create-table` command, see [Creating tables](https://sqlite-utils.readthedocs.io/en/latest/cli.html#creating-tables). (#27)\r\n* New `sqlite-utils create-view` command, see [Creating views](https://sqlite-utils.readthedocs.io/en/latest/cli.html#creating-views). (#107)\r\n", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/releases/tag/0.3a", "id": 26199348, "node_id": "MDc6UmVsZWFzZTI2MTk5MzQ4", "tag_name": "0.3a", "target_commitish": "master", "name": "0.3a", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-05-05T20:16:53Z", "published_at": "2020-05-05T20:17:00Z", "body": "* Upload photos to S3 in a thread pool #11\r\n* New `--dry-run` option to `upload` command\r\n* New `photos-to-sqlite apple-photos` command for importing Apple Photos metadata #1\r\n* Apple Photos quality scores are imported into `apple_photos_scores` table #15\r\n* Machine learning labels imported from Apple Photos into `labels` table #16", "repo": {"value": 256834907, "label": "dogsheep-photos"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.41", "id": 26240662, "node_id": "MDc6UmVsZWFzZTI2MjQwNjYy", "tag_name": "0.41", "target_commitish": "master", "name": "0.41", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-05-06T18:20:58Z", "published_at": "2020-05-06T18:30:03Z", "body": "You can now create [custom pages](https://datasette.readthedocs.io/en/0.41/custom_templates.html#custom-pages) within your Datasette instance using a custom template file. For example, adding a template file called `templates/pages/about.html` will result in a new page being served at `/about` on your instance. See the [custom pages documentation](https://datasette.readthedocs.io/en/0.41/custom_templates.html#custom-pages) for full details, including how to return custom HTTP headers, redirects and status codes. (#648)\r\n\r\n[Configuration directory mode](https://datasette.readthedocs.io/en/0.41/config.html#config-dir) (#731) allows you to define a custom Datasette instance as a directory. So instead of running the following:\r\n\r\n $ datasette one.db two.db \\\r\n --metadata.json \\\r\n --template-dir=templates/ \\\r\n --plugins-dir=plugins \\\r\n --static css:css\r\n\r\nYou can instead arrange your files in a single directory called `my-project` and run this:\r\n\r\n $ datasette my-project/\r\n\r\nAlso in this release:\r\n\r\n- New `NOT LIKE` table filter: `?colname__notlike=expression`. (#750)\r\n- Datasette now has a *pattern portfolio* at `/-/patterns` - e.g. . This is a page that shows every Datasette user interface component in one place, to aid core development and people building custom CSS themes. (#151)\r\n- SQLite [PRAGMA functions](https://www.sqlite.org/pragma.html#pragfunc) such as `pragma_table_info(tablename)` are now allowed in Datasette SQL queries. (#761)\r\n- Datasette pages now consistently return a `content-type` of `text/html; charset=utf-8\"`. (#752)\r\n- Datasette now handles an ASGI `raw_path` value of `None`, which should allow compatibilty with the [Mangum](https://github.com/erm/mangum) adapter for running ASGI apps on AWS Lambda. Thanks, Colin Dellow. (#719)\r\n- Installation documentation now covers how to [Install using pipx](https://datasette.readthedocs.io/en/0.41/installation.html#installation-pipx). (#756)\r\n- Improved the documentation for [Full-text search](https://datasette.readthedocs.io/en/0.41/full_text_search.html#full-text-search).", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.42", "id": 26320774, "node_id": "MDc6UmVsZWFzZTI2MzIwNzc0", "tag_name": "0.42", "target_commitish": "master", "name": "0.42", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-05-08T17:38:27Z", "published_at": "2020-05-08T17:56:36Z", "body": "A small release which provides improved internal methods for use in plugins, along with documentation. See #685.\r\n\r\n* Added documentation for `db.execute()`, see [await db.execute(sql, ...)](https://datasette.readthedocs.io/en/stable/internals.html#database-execute).\r\n* Renamed `db.execute_against_connection_in_thread()` to `db.execute_fn()` and made it a documented method, see [await db.execute_fn(fn)](https://datasette.readthedocs.io/en/stable/internals.html#database-execute-fn).\r\n* New `results.first()` and `results.single_value()` methods, plus documentation for the `Results` class - see [Results](https://datasette.readthedocs.io/en/stable/internals.html#database-results).\r\n", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.9", "id": 26362623, "node_id": "MDc6UmVsZWFzZTI2MzYyNjIz", "tag_name": "2.9", "target_commitish": "master", "name": "2.9", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-05-11T01:54:56Z", "published_at": "2020-05-11T01:57:11Z", "body": "- New `sqlite-utils drop-table` command, see [Dropping tables](https://sqlite-utils.readthedocs.io/en/2.9/cli.html#cli-drop-table). ([#111](https://github.com/simonw/sqlite-utils/issues/111))\r\n- New `sqlite-utils drop-view` command, see [Dropping views](https://sqlite-utils.readthedocs.io/en/2.9/cli.html#cli-drop-view).\r\n- Python `decimal.Decimal` objects are now stored as `FLOAT`. ([#110](https://github.com/simonw/sqlite-utils/issues/110))", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.9.1", "id": 26395903, "node_id": "MDc6UmVsZWFzZTI2Mzk1OTAz", "tag_name": "2.9.1", "target_commitish": "master", "name": "2.9.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-05-11T19:20:29Z", "published_at": "2020-05-11T19:21:24Z", "body": "* Added custom project links to the [PyPI listing](https://pypi.org/project/sqlite-utils/).\r\n", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/releases/tag/0.4", "id": 26698662, "node_id": "MDc6UmVsZWFzZTI2Njk4NjYy", "tag_name": "0.4", "target_commitish": "master", "name": "0.4", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-05-20T04:22:26Z", "published_at": "2020-05-20T04:24:28Z", "body": "- Renamed this project to `dogsheep-photos`. #26\r\n- `apple-photos` command now works even if you haven't yet run `upload`. #19\r\n- `--image-url-prefix` and `--image-url-suffix` options to `apple-photos`. #24 \r\n- New `create-subset` command. #23 ", "repo": {"value": 256834907, "label": "dogsheep-photos"}, "reactions": null} {"html_url": "https://github.com/dogsheep/dogsheep-photos/releases/tag/0.4.1", "id": 26873698, "node_id": "MDc6UmVsZWFzZTI2ODczNjk4", "tag_name": "0.4.1", "target_commitish": "master", "name": "0.4.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-05-25T20:11:20Z", "published_at": "2020-05-25T20:13:23Z", "body": "- Documentation now explains how to use this with the [datasette-media](https://github.com/simonw/datasette-media), [datasette-json-html](https://github.com/simonw/datasette-json-html) and [datasette-template-sql](https://github.com/simonw/datasette-template-sql) plugins. #20", "repo": {"value": 256834907, "label": "dogsheep-photos"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.43", "id": 26994005, "node_id": "MDc6UmVsZWFzZTI2OTk0MDA1", "tag_name": "0.43", "target_commitish": "master", "name": "0.43", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-05-28T14:11:06Z", "published_at": "2020-05-28T14:39:18Z", "body": "The main focus of this release is a major upgrade to the [register_output_renderer(datasette)](https://datasette.readthedocs.io/en/stable/plugins.html#plugin-register-output-renderer) plugin hook, which allows plugins to provide new output formats for Datasette such as [datasette-atom](https://github.com/simonw/datasette-atom) and [datasette-ics](https://github.com/simonw/datasette-ics).\r\n\r\n- Redesign of [register_output_renderer(datasette)](https://datasette.readthedocs.io/en/stable/plugins.html#plugin-register-output-renderer) to provide more context to the render callback and support an optional `\"can_render\"` callback that controls if a suggested link to the output format is provided. ([#581](https://github.com/simonw/datasette/issues/581), [#770](https://github.com/simonw/datasette/issues/770))\r\n- Visually distinguish float and integer columns - useful for figuring out why order-by-column might be returning unexpected results. ([#729](https://github.com/simonw/datasette/issues/729))\r\n- The [Request object](https://datasette.readthedocs.io/en/stable/internals.html#internals-request), which is passed to several plugin hooks, is now documented. ([#706](https://github.com/simonw/datasette/issues/706))\r\n- New `metadata.json` option for setting a custom default page size for specific tables and views, see [Setting a custom page size](https://datasette.readthedocs.io/en/stable/metadata.html#metadata-page-size). ([#751](https://github.com/simonw/datasette/issues/751))\r\n- Canned queries can now be configured with a default URL fragment hash, useful when working with plugins such as [datasette-vega](https://github.com/simonw/datasette-vega), see [Setting a default fragment](https://datasette.readthedocs.io/en/stable/sql_queries.html#canned-queries-default-fragment). ([#706](https://github.com/simonw/datasette/issues/706))\r\n- Fixed a bug in `datasette publish` when running on operating systems where the `/tmp` directory lives in a different volume, using a backport of the Python 3.8 `shutil.copytree()` function. ([#744](https://github.com/simonw/datasette/issues/744))\r\n- Every plugin hook is now covered by the unit tests, and a new unit test checks that each plugin hook has at least one corresponding test. ([#771](https://github.com/simonw/datasette/issues/771), [#773](https://github.com/simonw/datasette/issues/773))", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.44", "id": 27483276, "node_id": "MDc6UmVsZWFzZTI3NDgzMjc2", "tag_name": "0.44", "target_commitish": "master", "name": "0.44", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-06-12T01:19:30Z", "published_at": "2020-06-12T07:10:38Z", "body": "Authentication and permissions, writable canned queries, flash messages, new plugin hooks and more. [Full release notes](https://datasette.readthedocs.io/en/stable/changelog.html#v0-44). See also [Datasette 0.44: the annotated release notes](https://simonwillison.net/2020/Jun/12/annotated-release-notes/).", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.10", "id": 27504516, "node_id": "MDc6UmVsZWFzZTI3NTA0NTE2", "tag_name": "2.10", "target_commitish": "master", "name": "2.10", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-06-12T17:43:45Z", "published_at": "2020-06-12T17:44:32Z", "body": "- The `sqlite-utils` command now supports UPDATE/INSERT/DELETE in addition to SELECT. #115", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.45a0", "id": 27703093, "node_id": "MDc6UmVsZWFzZTI3NzAzMDkz", "tag_name": "0.45a0", "target_commitish": "master", "name": "0.45a0", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 1, "created_at": "2020-06-18T20:58:09Z", "published_at": "2020-06-18T21:14:00Z", "body": "", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.45a1", "id": 27707079, "node_id": "MDc6UmVsZWFzZTI3NzA3MDc5", "tag_name": "0.45a1", "target_commitish": "master", "name": "0.45a1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 1, "created_at": "2020-06-18T23:52:16Z", "published_at": "2020-06-19T00:02:29Z", "body": "", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.10.1", "id": 27847716, "node_id": "MDc6UmVsZWFzZTI3ODQ3NzE2", "tag_name": "2.10.1", "target_commitish": "master", "name": "2.10.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-06-23T21:04:07Z", "published_at": "2020-06-23T21:04:50Z", "body": "* Added documentation for the `table.pks` introspection property. #116", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.45a2", "id": 27856779, "node_id": "MDc6UmVsZWFzZTI3ODU2Nzc5", "tag_name": "0.45a2", "target_commitish": "master", "name": "0.45a2", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 1, "created_at": "2020-06-24T04:17:30Z", "published_at": "2020-06-24T04:32:12Z", "body": "", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.45a3", "id": 27994774, "node_id": "MDc6UmVsZWFzZTI3OTk0Nzc0", "tag_name": "0.45a3", "target_commitish": "master", "name": "0.45a3", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 1, "created_at": "2020-06-28T03:22:49Z", "published_at": "2020-06-28T03:27:12Z", "body": "", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.45a4", "id": 28008549, "node_id": "MDc6UmVsZWFzZTI4MDA4NTQ5", "tag_name": "0.45a4", "target_commitish": "master", "name": "0.45a4", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 1, "created_at": "2020-06-29T02:31:16Z", "published_at": "2020-06-29T02:33:02Z", "body": "", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.45a5", "id": 28097766, "node_id": "MDc6UmVsZWFzZTI4MDk3NzY2", "tag_name": "0.45a5", "target_commitish": "master", "name": "0.45a5", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 1, "created_at": "2020-07-01T04:25:35Z", "published_at": "2020-07-01T04:27:08Z", "body": "", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.45", "id": 28134124, "node_id": "MDc6UmVsZWFzZTI4MTM0MTI0", "tag_name": "0.45", "target_commitish": "master", "name": "0.45", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-07-01T21:43:07Z", "published_at": "2020-07-01T21:46:07Z", "body": "Magic parameters for canned queries, a log out feature, improved plugin documentation and four new plugin hooks.\r\n\r\n### Magic parameters for canned queries\r\n\r\nCanned queries now support [Magic parameters](https://docs.datasette.io/en/stable/sql_queries.html#canned-queries-magic-parameters), which can be used to insert or select automatically generated values. For example:\r\n```sql\r\ninsert into logs\r\n (user_id, timestamp)\r\nvalues\r\n (:_actor_id, :_now_datetime_utc)\r\n```\r\nThis inserts the currently authenticated actor ID and the current datetime. ([#842](https://github.com/simonw/datasette/issues/842))\r\n\r\n### Log out\r\n\r\nThe [ds_actor cookie](https://docs.datasette.io/en/stable/authentication.html#authentication-ds-actor) can be used by plugins (or by Datasette's [--root mechanism](https://docs.datasette.io/en/stable/authentication.html#authentication-root)) to authenticate users. The new `/-/logout` page provides a way to clear that cookie.\r\n\r\nA \"Log out\" button now shows in the global navigation provided the user is authenticated using the `ds_actor` cookie. ([#840](https://github.com/simonw/datasette/issues/840))\r\n\r\n### Better plugin documentation\r\n\r\nThe plugin documentation has been re-arranged into four sections, including a brand new section on testing plugins. ([#687](https://github.com/simonw/datasette/issues/687))\r\n\r\n- [Plugins](https://docs.datasette.io/en/stable/plugins.html#plugins) introduces Datasette's plugin system and describes how to install and configure plugins.\r\n- [Writing plugins](https://docs.datasette.io/en/stable/writing_plugins.html#writing-plugins) describes how to author plugins, from simple one-off plugins to packaged plugins that can be published to PyPI. It also describes how to start a plugin using the new [datasette-plugin](https://github.com/simonw/datasette-plugin) cookiecutter template.\r\n- [Plugin hooks](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hooks) is a full list of detailed documentation for every Datasette plugin hook.\r\n- [Testing plugins](https://docs.datasette.io/en/stable/testing_plugins.html#testing-plugins) describes how to write tests for Datasette plugins, using [pytest](https://docs.pytest.org/) and [HTTPX](https://www.python-httpx.org/).\r\n\r\n### New plugin hooks\r\n\r\n- [register_magic_parameters(datasette)](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-register-magic-parameters) can be used to define new types of magic canned query parameters.\r\n- [startup(datasette)](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-startup) can run custom code when Datasette first starts up. [datasette-init](https://github.com/simonw/datasette-init) is a new plugin that uses this hook to create database tables and views on startup if they have not yet been created. ([#834](https://github.com/simonw/datasette/issues/834))\r\n- [canned_queries(datasette, database, actor)](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-canned-queries) lets plugins provide additional canned queries beyond those defined in Datasette's metadata. See [datasette-saved-queries](https://github.com/simonw/datasette-saved-queries) for an example of this hook in action. ([#852](https://github.com/simonw/datasette/issues/852))\r\n- [forbidden(datasette, request, message)](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-forbidden) is a hook for customizing how Datasette responds to 403 forbidden errors. ([#812](https://github.com/simonw/datasette/issues/812))\r\n\r\n### Smaller changes\r\n\r\n- Cascading view permissons - so if a user has `view-table` they can view the table page even if they do not have `view-database` or `view-instance`. ([#832](https://github.com/simonw/datasette/issues/832))\r\n- CSRF protection no longer applies to `Authentication: Bearer token` requests or requests without cookies. ([#835](https://github.com/simonw/datasette/issues/835))\r\n- `datasette.add_message()` now works inside plugins. ([#864](https://github.com/simonw/datasette/issues/864))\r\n- Workaround for \"Too many open files\" error in test runs. ([#846](https://github.com/simonw/datasette/issues/846))\r\n- Respect existing `scope[\"actor\"]` if already set by ASGI middleware. ([#854](https://github.com/simonw/datasette/issues/854))\r\n- New process for shipping [Alpha and beta releases](https://docs.datasette.io/en/stable/contributing.html#contributing-alpha-beta). ([#807](https://github.com/simonw/datasette/issues/807))\r\n- `{{ csrftoken() }}` now works when plugins render a template using `datasette.render_template(..., request=request)`. ([#863](https://github.com/simonw/datasette/issues/863))\r\n- Datasette now creates a single [Request object](https://docs.datasette.io/en/stable/internals.html#internals-request) and uses it throughout the lifetime of the current HTTP request. ([#870](https://github.com/simonw/datasette/issues/870))", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.11", "id": 28369250, "node_id": "MDc6UmVsZWFzZTI4MzY5MjUw", "tag_name": "2.11", "target_commitish": "master", "name": "2.11", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-07-08T17:36:07Z", "published_at": "2020-07-08T17:36:45Z", "body": "- New `--truncate` option to `sqlite-utils insert`, and `truncate=True` argument to `.insert_all()`. Thanks, Thomas Sibley. ([#118](https://github.com/simonw/sqlite-utils/pull/118))\r\n- The `sqlite-utils query` command now runs updates in a transaction. Thanks, Thomas Sibley. ([#120](https://github.com/simonw/sqlite-utils/pull/120))", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/dogsheep/github-to-sqlite/releases/tag/2.3", "id": 28422716, "node_id": "MDc6UmVsZWFzZTI4NDIyNzE2", "tag_name": "2.3", "target_commitish": "master", "name": "2.3", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-07-09T23:26:34Z", "published_at": "2020-07-09T23:28:07Z", "body": "- New `github-to-sqlite repos my.db -r simonw/datasette` option for importing just specific repositories. #42", "repo": {"value": 207052882, "label": "github-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/github-to-sqlite/releases/tag/2.4", "id": 28705938, "node_id": "MDc6UmVsZWFzZTI4NzA1OTM4", "tag_name": "2.4", "target_commitish": "master", "name": "2.4", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-07-18T22:34:15Z", "published_at": "2020-07-18T22:35:27Z", "body": "- New `github-to-sqlite tags github.db simonw/datasette` command for importing all tags for a repository. #43", "repo": {"value": 207052882, "label": "github-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.21.2", "id": 28705982, "node_id": "MDc6UmVsZWFzZTI4NzA1OTgy", "tag_name": "0.21.2", "target_commitish": "master", "name": "0.21.2", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-07-18T22:42:54Z", "published_at": "2020-07-18T22:43:20Z", "body": "- Added changelog badge", "repo": {"value": 206156866, "label": "twitter-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.21.3", "id": 28876263, "node_id": "MDc6UmVsZWFzZTI4ODc2MjYz", "tag_name": "0.21.3", "target_commitish": "master", "name": "0.21.3", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-07-23T14:56:02Z", "published_at": "2020-07-23T14:57:11Z", "body": "* Added table of contents to the documentation", "repo": {"value": 206156866, "label": "twitter-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.12", "id": 28975119, "node_id": "MDc6UmVsZWFzZTI4OTc1MTE5", "tag_name": "2.12", "target_commitish": "master", "name": "2.12", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-07-27T07:21:26Z", "published_at": "2020-07-27T07:24:10Z", "body": "The theme of this release is better tools for working with binary data. The new `insert-files` command can be used to insert binary files directly into a database table, and other commands have been improved with better support for BLOB columns.\r\n\r\n- `sqlite-utils insert-files my.db gifs *.gif` can now insert the contents of files into a specified table. The columns in the table can be customized to include different pieces of metadata derived from the files. See [Inserting binary data from files](https://sqlite-utils.readthedocs.io/en/stable/cli.html#cli-insert-files). ([#122](https://github.com/simonw/sqlite-utils/issues/122))\r\n- `--raw` option to `sqlite-utils query` - for outputting just a single raw column value - see [Returning raw data from a query, such as binary content](https://sqlite-utils.readthedocs.io/en/stable/cli.html#cli-query-raw). ([#123](https://github.com/simonw/sqlite-utils/issues/123))\r\n- JSON output now encodes BLOB values as special base64 obects - see [Running queries and returning JSON](https://sqlite-utils.readthedocs.io/en/stable/cli.html#cli-query-json). ([#125](https://github.com/simonw/sqlite-utils/issues/125))\r\n- The same format of JSON base64 objects can now be used to insert binary data - see [Inserting JSON data](https://sqlite-utils.readthedocs.io/en/stable/cli.html#cli-inserting-data). ([#126](https://github.com/simonw/sqlite-utils/issues/126))\r\n- The `sqlite-utils query` command can now accept named parameters, e.g. `sqlite-utils :memory: \"select :num * :num2\" -p num 5 -p num2 6` - see [Running queries and returning JSON](https://sqlite-utils.readthedocs.io/en/stable/cli.html#cli-query-json). ([#124](https://github.com/simonw/sqlite-utils/issues/124))", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.13", "id": 29096810, "node_id": "MDc6UmVsZWFzZTI5MDk2ODEw", "tag_name": "2.13", "target_commitish": "master", "name": "2.13", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-07-30T01:13:53Z", "published_at": "2020-07-30T01:15:55Z", "body": "- `memoryview` and `uuid.UUID` objects are now supported. `memoryview` objects will be stored using `BLOB` and `uuid.UUID` objects will be stored using `TEXT`. (#128)\r\n", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.14", "id": 29196241, "node_id": "MDc6UmVsZWFzZTI5MTk2MjQx", "tag_name": "2.14", "target_commitish": "master", "name": "2.14", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-08-01T20:58:47Z", "published_at": "2020-08-01T21:00:31Z", "body": "- The [insert-files command](https://sqlite-utils.readthedocs.io/en/stable/cli.html#cli-insert-files) can now read from standard input: `cat dog.jpg | sqlite-utils insert-files dogs.db pics - --name=dog.jpg`. ([#127](https://github.com/simonw/sqlite-utils/issues/127))\r\n- You can now specify a full-text search tokenizer using the new `tokenize=` parameter to [enable_fts()](https://sqlite-utils.readthedocs.io/en/stable/python-api.html#python-api-fts). This means you can enable Porter stemming on a table by running `db[\"articles\"].enable_fts([\"headline\", \"body\"], tokenize=\"porter\")`. ([#130](https://github.com/simonw/sqlite-utils/issues/130))\r\n- You can also set a custom tokenizer using the [sqlite-utils enable-fts](https://sqlite-utils.readthedocs.io/en/stable/cli.html#cli-fts) CLI command, via the new `--tokenize` option.", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.14.1", "id": 29394982, "node_id": "MDc6UmVsZWFzZTI5Mzk0OTgy", "tag_name": "2.14.1", "target_commitish": "master", "name": "2.14.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-08-06T06:31:11Z", "published_at": "2020-08-06T06:31:48Z", "body": "- Documentation improvements", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.46", "id": 29489364, "node_id": "MDc6UmVsZWFzZTI5NDg5MzY0", "tag_name": "0.46", "target_commitish": "main", "name": "0.46", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-08-09T16:09:07Z", "published_at": "2020-08-09T16:10:47Z", "body": "**Warning:** This release contains a security fix related to authenticated writable canned queries. If you are using this feature you should upgrade as soon as possible.\r\n\r\n- **Security fix:** CSRF tokens were incorrectly included in read-only canned query forms, which could allow them to be leaked to a sophisticated attacker. See [issue 918](https://github.com/simonw/datasette/issues/918) for details.\r\n- Datasette now supports GraphQL via the new [datasette-graphql](https://github.com/simonw/datasette-graphql) plugin - see [GraphQL in Datasette with the new datasette-graphql plugin](https://simonwillison.net/2020/Aug/7/datasette-graphql/).\r\n- Principle git branch has been renamed from `master` to `main`. ([#849](https://github.com/simonw/datasette/issues/849))\r\n- New debugging tool: `/-/allow-debug tool` ([demo here](https://latest.datasette.io/-/allow-debug)) helps test allow blocks against actors, as described in [Defining permissions with \"allow\" blocks](https://datasette.readthedocs.io/en/stable/authentication.html#authentication-permissions-allow). ([#908](https://github.com/simonw/datasette/issues/908))\r\n- New logo for the documentation, and a new project tagline: \"An open source multi-tool for exploring and publishing data\".\r\n- Whitespace in column values is now respected on display, using `white-space: pre-wrap`. ([#896](https://github.com/simonw/datasette/issues/896))\r\n- New `await request.post_body()` method for accessing the raw POST body, see [Request object](https://datasette.readthedocs.io/en/stable/internals.html#internals-request). ([#897](https://github.com/simonw/datasette/issues/897))\r\n- Database file downloads now include a `content-length` HTTP header, enabling download progress bars. ([#905](https://github.com/simonw/datasette/issues/905))\r\n- File downloads now also correctly set the suggested file name using a `content-disposition` HTTP header. ([#909](https://github.com/simonw/datasette/issues/909))\r\n- `tests` are now excluded from the Datasette package properly - thanks, abeyerpath. ([#456](https://github.com/simonw/datasette/issues/456))\r\n- The Datasette package published to PyPI now includes `sdist` as well as `bdist_wheel`.\r\n- Better titles for canned query pages. ([#887](https://github.com/simonw/datasette/issues/887))\r\n- Now only loads Python files from a directory passed using the `--plugins-dir` option - thanks, Amjith Ramanujam. ([#890](https://github.com/simonw/datasette/pull/890))\r\n- New documentation section on [Publishing to Vercel](https://datasette.readthedocs.io/en/stable/publish.html#publish-vercel).", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.15", "id": 29529316, "node_id": "MDc6UmVsZWFzZTI5NTI5MzE2", "tag_name": "2.15", "target_commitish": "master", "name": "2.15", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-08-10T19:06:02Z", "published_at": "2020-08-10T19:07:27Z", "body": "- New `db.enable_wal()` and `db.disable_wal()` methods for enabling and disabling [Write-Ahead Logging](https://www.sqlite.org/wal.html) for a database file - see [WAL mode](https://sqlite-utils.readthedocs.io/en/stable//python-api.html#python-api-wal) in the Python API documentation.\r\n- Also `sqlite-utils enable-wal file.db` and `sqlite-utils disable-wal file.db` commands for doing the same thing on the command-line, see [WAL mode (CLI)](https://sqlite-utils.readthedocs.io/en/stable/cli.html#cli-wal). ([#132](https://github.com/simonw/sqlite-utils/issues/132))", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.47", "id": 29585154, "node_id": "MDc6UmVsZWFzZTI5NTg1MTU0", "tag_name": "0.47", "target_commitish": "main", "name": "0.47", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-08-12T00:42:47Z", "published_at": "2020-08-12T00:44:52Z", "body": "- Datasette now has [a GitHub discussions forum](https://github.com/simonw/datasette/discussions) for conversations about the project that go beyond just bug reports and issues.\r\n- Datasette can now be installed on macOS using Homebrew! Run `brew install simonw/datasette/datasette`. See [Using Homebrew](https://datasette.readthedocs.io/en/stable/installation.html#installation-homebrew). ([#335](https://github.com/simonw/datasette/issues/335))\r\n- Two new commands: `datasette install name-of-plugin` and `datasette uninstall name-of-plugin`. These are equivalent to `pip install` and `pip uninstall` but automatically run in the same virtual environment as Datasette, so users don't have to figure out where that virtual environment is - useful for installations created using Homebrew or `pipx`. See [Installing plugins](https://datasette.readthedocs.io/en/stable/plugins.html#plugins-installing). ([#925](https://github.com/simonw/datasette/issues/925))\r\n- A new command-line option, `datasette --get`, accepts a path to a URL within the Datasette instance. It will run that request through Datasette (without starting a web server) and print out the repsonse. See [datasette --get](https://datasette.readthedocs.io/en/stable/getting_started.html#getting-started-datasette-get) for an example. ([#926](https://github.com/simonw/datasette/issues/926))", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.47.1", "id": 29587652, "node_id": "MDc6UmVsZWFzZTI5NTg3NjUy", "tag_name": "0.47.1", "target_commitish": "main", "name": "0.47.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-08-12T02:37:24Z", "published_at": "2020-08-12T02:38:00Z", "body": "- Fixed a bug where the `sdist` distribution of Datasette was not correctly including the template files. ([#930](https://github.com/simonw/datasette/issues/930))", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.15.1", "id": 29616454, "node_id": "MDc6UmVsZWFzZTI5NjE2NDU0", "tag_name": "2.15.1", "target_commitish": "main", "name": "2.15.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-08-12T16:59:48Z", "published_at": "2020-08-12T17:00:27Z", "body": "- Now available as a `sdist` package on PyPI in addition to a wheel. ([#133](https://github.com/simonw/sqlite-utils/issues/133))", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.47.2", "id": 29625082, "node_id": "MDc6UmVsZWFzZTI5NjI1MDgy", "tag_name": "0.47.2", "target_commitish": "main", "name": "0.47.2", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-08-12T20:54:33Z", "published_at": "2020-08-12T20:55:28Z", "body": "- Fixed an issue with the Docker image [published to Docker Hub](https://hub.docker.com/r/datasetteproject/datasette). ([#931](https://github.com/simonw/datasette/issues/931))", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.47.3", "id": 29738457, "node_id": "MDc6UmVsZWFzZTI5NzM4NDU3", "tag_name": "0.47.3", "target_commitish": "main", "name": "0.47.3", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-08-15T20:56:08Z", "published_at": "2020-08-15T21:03:58Z", "body": "- The `datasette --get` command-line mechanism now ensures any plugins using the `startup()` hook are correctly executed. ([#934](https://github.com/simonw/datasette/issues/934))", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.48", "id": 29749566, "node_id": "MDc6UmVsZWFzZTI5NzQ5NTY2", "tag_name": "0.48", "target_commitish": "main", "name": "0.48", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-08-16T18:56:31Z", "published_at": "2020-08-16T18:58:34Z", "body": "- Datasette documentation now lives at [docs.datasette.io](https://docs.datasette.io/).\r\n- `db.is_mutable` property is now documented and tested, see [Database introspection](https://docs.datasette.io/en/stable/internals.html#internals-database-introspection).\r\n- The `extra_template_vars`, `extra_css_urls`, `extra_js_urls` and `extra_body_script` plugin hooks now all accept the same arguments. See [extra_template_vars(template, database, table, columns, view_name, request, datasette)](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-extra-template-vars) for details. ([#939](https://github.com/simonw/datasette/issues/939))\r\n- Those hooks now accept a new `columns` argument detailing the table columns that will be rendered on that page. ([#938](https://github.com/simonw/datasette/issues/938))\r\n- Fixed bug where plugins calling `db.execute_write_fn()` could hang Datasette if the connection failed. ([#935](https://github.com/simonw/datasette/issues/935))\r\n- Fixed bug with the `?_nl=on` output option and binary data. ([#914](https://github.com/simonw/datasette/issues/914))", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/dogsheep/github-to-sqlite/releases/tag/2.5", "id": 29822005, "node_id": "MDc6UmVsZWFzZTI5ODIyMDA1", "tag_name": "2.5", "target_commitish": "main", "name": "2.5", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-08-18T15:05:50Z", "published_at": "2020-08-18T15:08:20Z", "body": "- New `github-to-sqlite emojis` command for fetching emoji supported by GitHub. [Demo](https://github-to-sqlite.dogsheep.net/github/emojis). #47\r\n- Added table of contents to README.\r\n- Switched to GitHub Actions for CI.\r\n- Switched default branch to `main`\r\n", "repo": {"value": 207052882, "label": "github-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.16", "id": 29999731, "node_id": "MDc6UmVsZWFzZTI5OTk5NzMx", "tag_name": "2.16", "target_commitish": "main", "name": "2.16", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-08-21T21:02:29Z", "published_at": "2020-08-21T21:05:51Z", "body": "- `--load-extension` option for `sqlite-utils query` for loading SQLite extensions. ([#134](https://github.com/simonw/sqlite-utils/issues/134))\r\n- New `sqlite_utils.utils.find_spatialite()` function for finding SpatiaLite in common locations. ([#135](https://github.com/simonw/sqlite-utils/issues/135))", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.16.1", "id": 30352225, "node_id": "MDc6UmVsZWFzZTMwMzUyMjI1", "tag_name": "2.16.1", "target_commitish": "main", "name": "2.16.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-08-28T22:45:11Z", "published_at": "2020-08-28T22:47:02Z", "body": "- `insert_all(..., alter=True)` now works for columns introduced after the first 100 records. Thanks, Simon Wiles! ([#139](https://github.com/simonw/sqlite-utils/issues/139))\r\n- Continuous Integration is now powered by GitHub Actions. ([#143](https://github.com/simonw/sqlite-utils/issues/143))", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.49a0", "id": 30353073, "node_id": "MDc6UmVsZWFzZTMwMzUzMDcz", "tag_name": "0.49a0", "target_commitish": "main", "name": "0.49a0", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 1, "created_at": "2020-08-28T23:12:47Z", "published_at": "2020-08-28T23:18:09Z", "body": "- `register_output_renderer()` render functions can now return a `Response`. ([#953](https://github.com/simonw/datasette/issues/953))\r\n- New `--upgrade` option for `datasette install`. ([#945](https://github.com/simonw/datasette/issues/945))\r\n- `datasette publish heroku` now deploys using Python 3.8.5", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.1a", "id": 30477968, "node_id": "MDc6UmVsZWFzZTMwNDc3OTY4", "tag_name": "0.1a", "target_commitish": "main", "name": "0.1a", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 1, "created_at": "2020-09-01T04:16:59Z", "published_at": "2020-09-01T04:19:00Z", "body": "- First working version", "repo": {"value": 197431109, "label": "dogsheep-beta"}, "reactions": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.1a2", "id": 30478994, "node_id": "MDc6UmVsZWFzZTMwNDc4OTk0", "tag_name": "0.1a2", "target_commitish": "main", "name": "0.1a2", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 1, "created_at": "2020-09-01T04:49:41Z", "published_at": "2020-09-01T04:50:01Z", "body": "- Now creates an index on the `timestamp` column. #1", "repo": {"value": 197431109, "label": "dogsheep-beta"}, "reactions": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.1", "id": 30481804, "node_id": "MDc6UmVsZWFzZTMwNDgxODA0", "tag_name": "0.1", "target_commitish": "main", "name": "0.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-09-01T06:10:44Z", "published_at": "2020-09-01T06:12:05Z", "body": "- Optimize the FTS table and vacuum the database. #4\r\n- First non-alpha release", "repo": {"value": 197431109, "label": "dogsheep-beta"}, "reactions": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.2", "id": 30536189, "node_id": "MDc6UmVsZWFzZTMwNTM2MTg5", "tag_name": "0.2", "target_commitish": "main", "name": "0.2", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-09-01T20:40:52Z", "published_at": "2020-09-01T20:41:31Z", "body": "- Use Porter stemming by default, allow that to be over-ridden with the new `--tokenize=` option. #2", "repo": {"value": 197431109, "label": "dogsheep-beta"}, "reactions": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.3", "id": 30613603, "node_id": "MDc6UmVsZWFzZTMwNjEzNjAz", "tag_name": "0.3", "target_commitish": "main", "name": "0.3", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-09-02T21:07:13Z", "published_at": "2020-09-02T21:07:44Z", "body": "- New `category` column plus default `categories` table. #7", "repo": {"value": 197431109, "label": "dogsheep-beta"}, "reactions": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.4a0", "id": 30632372, "node_id": "MDc6UmVsZWFzZTMwNjMyMzcy", "tag_name": "0.4a0", "target_commitish": "main", "name": "0.4a0", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 1, "created_at": "2020-09-03T03:53:29Z", "published_at": "2020-09-03T03:54:23Z", "body": "- Incomplete preview of the `/-/beta` search interface. #3 #9\r\n\r\n", "repo": {"value": 197431109, "label": "dogsheep-beta"}, "reactions": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.4a1", "id": 30678449, "node_id": "MDc6UmVsZWFzZTMwNjc4NDQ5", "tag_name": "0.4a1", "target_commitish": "main", "name": "0.4a1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 1, "created_at": "2020-09-03T18:03:15Z", "published_at": "2020-09-03T18:03:50Z", "body": "- Added `received` category. #10\r\n- New `is_public` column. #11", "repo": {"value": 197431109, "label": "dogsheep-beta"}, "reactions": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.4", "id": 30688677, "node_id": "MDc6UmVsZWFzZTMwNjg4Njc3", "tag_name": "0.4", "target_commitish": "main", "name": "0.4", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-09-03T21:09:50Z", "published_at": "2020-09-03T21:11:28Z", "body": "- Working faceted search interface at `/-/beta` #3\r\n- `is_public` column for filtering between public and private data. #11\r\n- New `received` category. #10", "repo": {"value": 197431109, "label": "dogsheep-beta"}, "reactions": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.4.1", "id": 30690154, "node_id": "MDc6UmVsZWFzZTMwNjkwMTU0", "tag_name": "0.4.1", "target_commitish": "main", "name": "0.4.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-09-03T21:40:40Z", "published_at": "2020-09-03T21:41:52Z", "body": "- Fixed support for [advanced FTS query syntax](https://www.sqlite.org/fts5.html#full_text_query_syntax). #13", "repo": {"value": 197431109, "label": "dogsheep-beta"}, "reactions": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.5", "id": 30699190, "node_id": "MDc6UmVsZWFzZTMwNjk5MTkw", "tag_name": "0.5", "target_commitish": "main", "name": "0.5", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-09-04T01:45:35Z", "published_at": "2020-09-04T01:46:16Z", "body": "- Custom template displays can now render a point on a map. #12", "repo": {"value": 197431109, "label": "dogsheep-beta"}, "reactions": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.6", "id": 30780951, "node_id": "MDc6UmVsZWFzZTMwNzgwOTUx", "tag_name": "0.6", "target_commitish": "main", "name": "0.6", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-09-05T16:24:11Z", "published_at": "2020-09-05T16:26:06Z", "body": "- Rerun the search query with FTS quoting if a SQLite FTS error occurs. This means searching for e.g. \"#dogfest\" will no longer throw an error, while still supporting advanced SQLite FTS syntax. #14\r\n- Maximum width 100% on images in results\r\n- Don't display facet headers if there are no results for that facet.", "repo": {"value": 197431109, "label": "dogsheep-beta"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.17", "id": 30875333, "node_id": "MDc6UmVsZWFzZTMwODc1MzMz", "tag_name": "2.17", "target_commitish": "main", "name": "2.17", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-09-07T22:08:12Z", "published_at": "2020-09-07T22:08:33Z", "body": "This release handles a bug where replacing rows in FTS tables could result in growing numbers of unneccessary rows in the associated `*_fts_docsize` table. ([#149](https://github.com/simonw/sqlite-utils/issues/149))\r\n\r\n- `PRAGMA recursive_triggers=on` by default for all connections. You can turn it off with `Database(recursive_triggers=False)`. ([#152](https://github.com/simonw/sqlite-utils/issues/152))\r\n- `table.optimize()` method now deletes unnecessary rows from the `*_fts_docsize` table. ([#153](https://github.com/simonw/sqlite-utils/issues/153))\r\n- New tracer method for tracking underlying SQL queries, see [Tracing queries](http://127.0.0.1:8000/python-api.html#python-api-tracing). ([#150](https://github.com/simonw/sqlite-utils/issues/150))\r\n- Neater indentation for schema SQL. ([#148](https://github.com/simonw/sqlite-utils/issues/148))\r\n- Documentation for `sqlite_utils.AlterError` exception thrown by in `add_foreign_keys()`.", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/simonw/sqlite-utils/releases/tag/2.18", "id": 30942758, "node_id": "MDc6UmVsZWFzZTMwOTQyNzU4", "tag_name": "2.18", "target_commitish": "main", "name": "2.18", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-09-08T23:37:28Z", "published_at": "2020-09-08T23:39:21Z", "body": "- `table.rebuild_fts()` method for rebuilding a FTS index, see [Rebuilding a full-text search table](https://sqlite-utils.readthedocs.io/en/stable/python-api.html#python-api-fts-rebuild). ([#155](https://github.com/simonw/sqlite-utils/issues/155))\r\n- `sqlite-utils rebuild-fts data.db` command for rebuilding FTS indexes across all tables, or just specific tables. ([#155](https://github.com/simonw/sqlite-utils/issues/155))\r\n- `table.optimize()` method no longer deletes junk rows from the `*_fts_docsize` table. This was added in 2.17 but it turns out running `table.rebuild_fts()` is a better solution to this problem.\r\n- Fixed a bug where rows with additional columns that are inserted after the first batch of records could cause an error due to breaking SQLite's maximum number of parameters. Thanks, Simon Wiles. ([#145](https://github.com/simonw/sqlite-utils/issues/145))", "repo": {"value": 140912432, "label": "sqlite-utils"}, "reactions": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.7a0", "id": 30944731, "node_id": "MDc6UmVsZWFzZTMwOTQ0NzMx", "tag_name": "0.7a0", "target_commitish": "main", "name": "0.7a0", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 1, "created_at": "2020-09-09T00:45:07Z", "published_at": "2020-09-09T00:46:06Z", "body": "- Renamed `table` column to `type`. #17\r\n- New `-d` option for passing one or more databases to index. Without this all databases in the config file will be indexed.", "repo": {"value": 197431109, "label": "dogsheep-beta"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.49a1", "id": 31227999, "node_id": "MDc6UmVsZWFzZTMxMjI3OTk5", "tag_name": "0.49a1", "target_commitish": "main", "name": "0.49a1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 1, "created_at": "2020-09-14T02:47:21Z", "published_at": "2020-09-14T02:48:19Z", "body": "- Upgraded [CodeMirror](https://codemirror.net/) to 5.57.0. ([#948](https://github.com/simonw/datasette/issues/948))\r\n- Upgraded code style to Black 20.8b1. ([#958](https://github.com/simonw/datasette/issues/958))\r\n- New `datasette --pdb` option. ([#962](https://github.com/simonw/datasette/issues/962))\r\n- `datasette --get` exit code now reflects the internal HTTP status code. ([#947](https://github.com/simonw/datasette/issues/947))\r\n- Fixed bug where selected facets were not correctly persisted in hidden form fields on the table page. ([#963](https://github.com/simonw/datasette/issues/963))\r\n- New mechanism for defining page templates with custom path parameters. ([#944](https://github.com/simonw/datasette/issues/944))", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.49", "id": 31288240, "node_id": "MDc6UmVsZWFzZTMxMjg4MjQw", "tag_name": "0.49", "target_commitish": "main", "name": "0.49", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-09-14T21:38:24Z", "published_at": "2020-09-14T21:40:11Z", "body": "- Writable canned queries now expose a JSON API, see [JSON API for writable canned queries](https://docs.datasette.io/en/stable/sql_queries.html#canned-queries-json-api). ([#880](https://github.com/simonw/datasette/issues/880))\r\n- New mechanism for defining page templates with custom path parameters - a template file called `pages/about/{slug}.html` will be used to render any requests to `/about/something`. See [Path parameters for pages](https://docs.datasette.io/en/stable/custom_templates.html#custom-pages-parameters). ([#944](https://github.com/simonw/datasette/issues/944))\r\n- `register_output_renderer()` render functions can now return a `Response`. ([#953](https://github.com/simonw/datasette/issues/953))\r\n- New `--upgrade` option for `datasette install`. ([#945](https://github.com/simonw/datasette/issues/945))\r\n- New `datasette --pdb` option. ([#962](https://github.com/simonw/datasette/issues/962))\r\n- `datasette --get` exit code now reflects the internal HTTP status code. ([#947](https://github.com/simonw/datasette/issues/947))\r\n- New `raise_404()` template function for returning 404 errors. ([#964](https://github.com/simonw/datasette/issues/964))\r\n- `datasette publish heroku` now deploys using Python 3.8.5\r\n- Upgraded [CodeMirror](https://codemirror.net/) to 5.57.0. ([#948](https://github.com/simonw/datasette/issues/948))\r\n- Upgraded code style to Black 20.8b1. ([#958](https://github.com/simonw/datasette/issues/958))\r\n- Fixed bug where selected facets were not correctly persisted in hidden form fields on the table page. ([#963](https://github.com/simonw/datasette/issues/963))\r\n- Renamed the default error template from `500.html` to `error.html`.\r\n- Custom error pages are now documented, see [Custom error pages](https://docs.datasette.io/en/stable/custom_templates.html#custom-pages-errors). ([#965](https://github.com/simonw/datasette/issues/965))", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/simonw/datasette/releases/tag/0.49.1", "id": 31354944, "node_id": "MDc6UmVsZWFzZTMxMzU0OTQ0", "tag_name": "0.49.1", "target_commitish": "main", "name": "0.49.1", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-09-15T20:20:15Z", "published_at": "2020-09-15T20:21:16Z", "body": "- Fixed a bug with writable canned queries that use magic parameters but accept no non-magic arguments. (#967)\r\n", "repo": {"value": 107914493, "label": "datasette"}, "reactions": null} {"html_url": "https://github.com/dogsheep/github-to-sqlite/releases/tag/2.6", "id": 31441882, "node_id": "MDc6UmVsZWFzZTMxNDQxODgy", "tag_name": "2.6", "target_commitish": "main", "name": "2.6", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-09-17T03:54:16Z", "published_at": "2020-09-17T03:55:03Z", "body": "- New `github-to-sqlite get /gists` command for making authenticated API calls against any API path. #50 ", "repo": {"value": 207052882, "label": "github-to-sqlite"}, "reactions": null} {"html_url": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.7", "id": 31501128, "node_id": "MDc6UmVsZWFzZTMxNTAxMTI4", "tag_name": "0.7", "target_commitish": "main", "name": "0.7", "draft": 0, "author": {"value": 9599, "label": "simonw"}, "prerelease": 0, "created_at": "2020-09-17T22:56:01Z", "published_at": "2020-09-17T22:57:09Z", "body": "- Option to sort by relevance / oldest / newest. #21 \r\n- Renamed `table` column to `type`. #17\r\n- New `-d` option for passing one or more databases to index. Without this all databases in the config file will be indexed.", "repo": {"value": 197431109, "label": "dogsheep-beta"}, "reactions": null}