rowid,repo,release,date,body_markdown,published_at,topics 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.36,2020-02-22,"* The `datasette` object passed to plugins now has API documentation: [Datasette class](https://datasette.readthedocs.io/en/latest/datasette.html#datasette). (#576) * New methods on `datasette`: `.add_database()` and `.remove_database()` - [documentation](https://datasette.readthedocs.io/en/latest/datasette.html#datasette-add-database). (#671) * `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) * Added three new plugins and one new conversion tool to the [The Datasette Ecosystem](https://datasette.readthedocs.io/en/latest/ecosystem.html#ecosystem). https://datasette.readthedocs.io/en/latest/changelog.html#v0-36",2020-02-22T03:24:50Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.37,2020-02-26,"* 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) * Immutable databases that have had their rows counted using the `inspect` command now use the calculated count more effectively - thanks, Kevin Keogh. (#666) * `--reload` no longer restarts the server if a database file is modified, unless that database was opened immutable mode with `-i`. (#494) * New `?_searchmode=raw` option turns off escaping for FTS queries in `?_search=` allowing full use of SQLite’s [FTS5 query syntax](https://www.sqlite.org/fts5.html#full_text_query_syntax). (#676) ",2020-02-26T03:44:07Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.4,2020-02-27,"* `table.disable_fts()` can now be used to remove FTS tables and triggers that were created using `table.enable_fts(...)`. (#88) * The `sqlite-utils disable-fts` command can be used to remove FTS tables and triggers from the command-line. (#88) * Trying to create table columns with square braces ([ or ]) in the name now raises an error. (#86) * Subclasses of `dict`, `list` and `tuple` are now detected as needing a JSON column. (#87) ",2020-02-27T04:58:25Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.37.1,2020-03-03,"* Don’t attempt to count table rows to display on the index page for databases > 100MB. (#688) * Print exceptions if they occur in the write thread rather than silently swallowing them. * Handle the possibility of `scope[""path""]` being a string rather than bytes * 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. ",2020-03-03T03:46:17Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.38,2020-03-08,"* The [Docker build](https://hub.docker.com/r/datasetteproject/datasette) of Datasette now uses SQLite 3.31.1, upgraded from 3.26. (#695) * `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) * Fixed bug where templates that shipped with plugins were sometimes not being correctly loaded. (#697) ",2020-03-08T23:42:36Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 207052882,https://github.com/dogsheep/github-to-sqlite,https://github.com/dogsheep/github-to-sqlite/releases/tag/0.7,2020-03-11,* New `github-to-sqlite commits my.db dogsheep/github-to-sqlite` command. #17,2020-03-11T02:48:32Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""github-api"", ""sqlite""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.4.2,2020-03-14,"* `table.column_dicts` now works with all column types - previously it would throw errors on types other than `TEXT`, `BLOB`, `INTEGER` or `FLOAT`. (#92) * 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). ",2020-03-14T20:13:18Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.4.1,2020-03-14,"* `table.enable_fts()` now works with columns that contain spaces. (#90) ",2020-03-14T20:06:08Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 206156866,https://github.com/dogsheep/twitter-to-sqlite,https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.19,2020-03-20,"* The `twitter-to-sqlite friends` and `twitter-to-sqlite followers` commands now accept the `--sql` and `--attach` options. #36 * Improved the display of the progress bar for the `user-timeline` command. #38",2020-03-20T23:16:53Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""sqlite"", ""twitter"", ""twitter-api""]" 206156866,https://github.com/dogsheep/twitter-to-sqlite,https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.18,2020-03-20,"* `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",2020-03-20T20:19:42Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""sqlite"", ""twitter"", ""twitter-api""]" 206156866,https://github.com/dogsheep/twitter-to-sqlite,https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.17,2020-03-20,"* Upgraded to latest `sqlite-utils` (currently 2.4.2) * This fixed a bug with `user-timeline` - #34",2020-03-20T19:23:40Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""sqlite"", ""twitter"", ""twitter-api""]" 248903544,https://github.com/dogsheep/hacker-news-to-sqlite,https://github.com/dogsheep/hacker-news-to-sqlite/releases/tag/0.3.1,2020-03-21,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).,2020-03-21T22:41:16Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""hacker-news""]" 248903544,https://github.com/dogsheep/hacker-news-to-sqlite,https://github.com/dogsheep/hacker-news-to-sqlite/releases/tag/0.3,2020-03-21,First non-alpha release. Now configures full-text search for the `users` and `items` tables. #1,2020-03-21T19:47:36Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""hacker-news""]" 248903544,https://github.com/dogsheep/hacker-news-to-sqlite,https://github.com/dogsheep/hacker-news-to-sqlite/releases/tag/0.2a,2020-03-21,Compatibility with sqlite-utils 1.x,2020-03-21T19:46:58Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""hacker-news""]" 248903544,https://github.com/dogsheep/hacker-news-to-sqlite,https://github.com/dogsheep/hacker-news-to-sqlite/releases/tag/0.1a,2020-03-21,* `user` and `trees` commands.,2020-03-21T04:26:28Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""hacker-news""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.4.4,2020-03-23,* Fixed bug where columns with only null values were not correctly created. (#95),2020-03-23T20:34:18Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.4.3,2020-03-23,* Column type suggestion code is no longer confused by null values. (#94),2020-03-23T20:00:25Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 206202864,https://github.com/dogsheep/inaturalist-to-sqlite,https://github.com/dogsheep/inaturalist-to-sqlite/releases/tag/0.2,2020-03-24,"* Upgraded to `sqlite-utils` 2.x * First non-alpha release",2020-03-24T00:36:40Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""inaturalist"", ""sqlite""]" 207052882,https://github.com/dogsheep/github-to-sqlite,https://github.com/dogsheep/github-to-sqlite/releases/tag/1.0,2020-03-24,"* Full-text search is configured for more tables. #19 * Release assets are now pulled out into a separate `assets` table. #15 * Now depends on sqlite-utils 2.x. #20 * Commit raw authors are now used to populate a new `raw_authors` able. #18 * New live demo at https://github-to-sqlite.dogsheep.net/ #13 * GitHub API errors are now raised as Pyton exceptions. #21 * Fixed bug running `commits` against repos with no commits. #22",2020-03-24T00:11:51Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""github-api"", ""sqlite""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.39,2020-03-25,"* 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) * 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) * 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) * New `await Request(scope, receive).post_vars()` method for accessing POST form variables. (#700) * Plugin hooks documentation now links to example uses of each plugin. (#709) ",2020-03-25T04:11:35Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 213286752,https://github.com/dogsheep/pocket-to-sqlite,https://github.com/dogsheep/pocket-to-sqlite/releases/tag/0.2,2020-03-27,"* Defaults to only retrieving updated items, unless you use `--all`. #2 * Now displays a progress bar for initial data import and `--all`. * Data is now fetched 500 items at a time using API pagination. #1 * Now depends on `sqlite-utils 2.x`. * `auth.json` now uses `pocket_` prefix on each stored key. #4",2020-03-27T22:26:30Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""pocket"", ""pocket-api"", ""sqlite""]" 205429375,https://github.com/dogsheep/swarm-to-sqlite,https://github.com/dogsheep/swarm-to-sqlite/releases/tag/0.3.1,2020-03-28,"* Fixed bug with very old checkins that were missing their source - thanks, @mfa! #6",2020-03-28T02:30:10Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""foursquare"", ""foursquare-api"", ""sqlite"", ""swarm""]" 205429375,https://github.com/dogsheep/swarm-to-sqlite,https://github.com/dogsheep/swarm-to-sqlite/releases/tag/0.3,2020-03-28,* Upgraded to sqlite-utils 2.x,2020-03-28T02:28:35Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""foursquare"", ""foursquare-api"", ""sqlite"", ""swarm""]" 197882382,https://github.com/dogsheep/healthkit-to-sqlite,https://github.com/dogsheep/healthkit-to-sqlite/releases/tag/0.5,2020-03-28,* Upgraded to latest sqlite-utils,2020-03-28T01:55:19Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""healthkit"", ""sqlite""]" 206156866,https://github.com/dogsheep/twitter-to-sqlite,https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.20.1,2020-04-01,"* Buf fix: `since_id` table no longer records a record for `None`, `None`. #41",2020-04-01T04:33:35Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""sqlite"", ""twitter"", ""twitter-api""]" 206156866,https://github.com/dogsheep/twitter-to-sqlite,https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.20,2020-04-01,"* 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. * 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",2020-04-01T04:18:53Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""sqlite"", ""twitter"", ""twitter-api""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.5,2020-04-13,"* Panda’s Timestamp is now stored as a SQLite TEXT column. Thanks, b0b5h4rp13! (#96) * `table.last_pk` is now only available for inserts or upserts of a single record. (#98) * New `Database(filepath, recreate=True)` parameter for deleting and recreating the database. (#97) ",2020-04-13T03:54:08Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 207052882,https://github.com/dogsheep/github-to-sqlite,https://github.com/dogsheep/github-to-sqlite/releases/tag/1.0.1,2020-04-16,"* Fixed bug where repository topics were not being correctly fetched #26 * 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",2020-04-16T18:09:29Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""github-api"", ""sqlite""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.6,2020-04-16,"* 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) ",2020-04-16T03:14:48Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 206156866,https://github.com/dogsheep/twitter-to-sqlite,https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.21,2020-04-17,"* New command: `twitter-to-sqlite lists username` fetches lists owned by the specified users. #43 * Handle tweets with a blank `source`. #44 * Fixed error with `twitter-to-sqlite user-timeline --sql=... --ids`. #42 * Better error messages for non-existing users. #37 ",2020-04-17T23:46:51Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""sqlite"", ""twitter"", ""twitter-api""]" 207052882,https://github.com/dogsheep/github-to-sqlite,https://github.com/dogsheep/github-to-sqlite/releases/tag/1.1,2020-04-18,"* New `github-to-sqlite contributors` command for fetching contributors to one or more repositories. #28 * 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. * The `organization` column in the `repos` table is now a foreign key to `users` as opposed to a big piece of JSON. #27",2020-04-18T15:09:55Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""github-api"", ""sqlite""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.40,2020-04-22,"* 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) * 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) * Fixed a bug where the `extra_template_vars(request, view_name)` plugin hook was not receiving the correct `view_name`. (#716) * 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) * Fixed a bug where the “templates considered” HTML comment was no longer being displayed. (#689) * Fixed a `datasette publish` bug where `--plugin-secret` would over-ride plugin configuration in the provided `metadata.json` file. (#724) * Added a new CSS class for customizing the canned query page. (#727)",2020-04-22T04:06:51Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 207052882,https://github.com/dogsheep/github-to-sqlite,https://github.com/dogsheep/github-to-sqlite/releases/tag/2.0,2020-04-22,"This release includes some backwards-incompatible schema changes: * 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 * `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 * 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",2020-04-22T01:24:37Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""github-api"", ""sqlite""]" 256834907,https://github.com/dogsheep/dogsheep-photos,https://github.com/dogsheep/dogsheep-photos/releases/tag/0.2a,2020-04-24,* Only upload photos not already in S3. #9 ,2020-04-24T00:44:21Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""sqlite""]" 256834907,https://github.com/dogsheep/dogsheep-photos,https://github.com/dogsheep/dogsheep-photos/releases/tag/0.1a,2020-04-24,* First alpha release,2020-04-24T00:40:57Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""sqlite""]" 207052882,https://github.com/dogsheep/github-to-sqlite,https://github.com/dogsheep/github-to-sqlite/releases/tag/2.1,2020-04-30,* New `github-to-sqlite scrape-dependents` command for importing the dependent repositories for a repo. #34,2020-04-30T23:03:32Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""github-api"", ""sqlite""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.7,2020-04-30,"* 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) ",2020-04-30T18:33:20Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 206156866,https://github.com/dogsheep/twitter-to-sqlite,https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.21.1,2020-04-30,* Fixed bug that occurred when the `since_ids` table had not yet been created. #46,2020-04-30T18:21:46Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""sqlite"", ""twitter"", ""twitter-api""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.7.1,2020-05-01,"* 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) * `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) * Nested structures containing invalid JSON values (e.g. Python bytestrings) are now serialized using `repr()` instead of throwing an error. (#102)",2020-05-01T22:11:19Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 207052882,https://github.com/dogsheep/github-to-sqlite,https://github.com/dogsheep/github-to-sqlite/releases/tag/2.2,2020-05-02,"* 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 * 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 * Added indexes on all foreign key relationships. #35 * GitHub API token can now be read from `GITHUB_TOKEN` environment variable. #33",2020-05-02T21:28:00Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""github-api"", ""sqlite""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.7.2,2020-05-02,"* `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) ",2020-05-02T16:10:11Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.8,2020-05-03,"* New `sqlite-utils create-table` command, see [Creating tables](https://sqlite-utils.readthedocs.io/en/latest/cli.html#creating-tables). (#27) * New `sqlite-utils create-view` command, see [Creating views](https://sqlite-utils.readthedocs.io/en/latest/cli.html#creating-views). (#107) ",2020-05-03T15:41:31Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 256834907,https://github.com/dogsheep/dogsheep-photos,https://github.com/dogsheep/dogsheep-photos/releases/tag/0.3a,2020-05-05,"* Upload photos to S3 in a thread pool #11 * New `--dry-run` option to `upload` command * New `photos-to-sqlite apple-photos` command for importing Apple Photos metadata #1 * Apple Photos quality scores are imported into `apple_photos_scores` table #15 * Machine learning labels imported from Apple Photos into `labels` table #16",2020-05-05T20:17:00Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""sqlite""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.41,2020-05-06,"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) [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: $ datasette one.db two.db \ --metadata.json \ --template-dir=templates/ \ --plugins-dir=plugins \ --static css:css You can instead arrange your files in a single directory called `my-project` and run this: $ datasette my-project/ Also in this release: - New `NOT LIKE` table filter: `?colname__notlike=expression`. (#750) - 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) - SQLite [PRAGMA functions](https://www.sqlite.org/pragma.html#pragfunc) such as `pragma_table_info(tablename)` are now allowed in Datasette SQL queries. (#761) - Datasette pages now consistently return a `content-type` of `text/html; charset=utf-8""`. (#752) - 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) - Installation documentation now covers how to [Install using pipx](https://datasette.readthedocs.io/en/0.41/installation.html#installation-pipx). (#756) - Improved the documentation for [Full-text search](https://datasette.readthedocs.io/en/0.41/full_text_search.html#full-text-search).",2020-05-06T18:30:03Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.42,2020-05-08,"A small release which provides improved internal methods for use in plugins, along with documentation. See #685. * Added documentation for `db.execute()`, see [await db.execute(sql, ...)](https://datasette.readthedocs.io/en/stable/internals.html#database-execute). * 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). * 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). ",2020-05-08T17:56:36Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.9.1,2020-05-11,"* Added custom project links to the [PyPI listing](https://pypi.org/project/sqlite-utils/). ",2020-05-11T19:21:24Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.9,2020-05-11,"- 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)) - New `sqlite-utils drop-view` command, see [Dropping views](https://sqlite-utils.readthedocs.io/en/2.9/cli.html#cli-drop-view). - Python `decimal.Decimal` objects are now stored as `FLOAT`. ([#110](https://github.com/simonw/sqlite-utils/issues/110))",2020-05-11T01:57:11Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 256834907,https://github.com/dogsheep/dogsheep-photos,https://github.com/dogsheep/dogsheep-photos/releases/tag/0.4,2020-05-20,"- Renamed this project to `dogsheep-photos`. #26 - `apple-photos` command now works even if you haven't yet run `upload`. #19 - `--image-url-prefix` and `--image-url-suffix` options to `apple-photos`. #24 - New `create-subset` command. #23 ",2020-05-20T04:24:28Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""sqlite""]" 256834907,https://github.com/dogsheep/dogsheep-photos,https://github.com/dogsheep/dogsheep-photos/releases/tag/0.4.1,2020-05-25,"- 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",2020-05-25T20:13:23Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""sqlite""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.43,2020-05-28,"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). - 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)) - 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)) - 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)) - 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)) - 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)) - 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)) - 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))",2020-05-28T14:39:18Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.10,2020-06-12,- The `sqlite-utils` command now supports UPDATE/INSERT/DELETE in addition to SELECT. #115,2020-06-12T17:44:32Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.44,2020-06-12,"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/).",2020-06-12T07:10:38Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.45a0,2020-06-18,,2020-06-18T21:14:00Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.45a1,2020-06-19,,2020-06-19T00:02:29Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.10.1,2020-06-23,* Added documentation for the `table.pks` introspection property. #116,2020-06-23T21:04:50Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.45a2,2020-06-24,,2020-06-24T04:32:12Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.45a3,2020-06-28,,2020-06-28T03:27:12Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.45a4,2020-06-29,,2020-06-29T02:33:02Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.45,2020-07-01,"Magic parameters for canned queries, a log out feature, improved plugin documentation and four new plugin hooks. ### Magic parameters for canned queries Canned 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: ```sql insert into logs (user_id, timestamp) values (:_actor_id, :_now_datetime_utc) ``` This inserts the currently authenticated actor ID and the current datetime. ([#842](https://github.com/simonw/datasette/issues/842)) ### Log out The [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. A ""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)) ### Better plugin documentation The 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)) - [Plugins](https://docs.datasette.io/en/stable/plugins.html#plugins) introduces Datasette's plugin system and describes how to install and configure plugins. - [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. - [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. - [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/). ### New plugin hooks - [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. - [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)) - [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)) - [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)) ### Smaller changes - 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)) - CSRF protection no longer applies to `Authentication: Bearer token` requests or requests without cookies. ([#835](https://github.com/simonw/datasette/issues/835)) - `datasette.add_message()` now works inside plugins. ([#864](https://github.com/simonw/datasette/issues/864)) - Workaround for ""Too many open files"" error in test runs. ([#846](https://github.com/simonw/datasette/issues/846)) - Respect existing `scope[""actor""]` if already set by ASGI middleware. ([#854](https://github.com/simonw/datasette/issues/854)) - 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)) - `{{ csrftoken() }}` now works when plugins render a template using `datasette.render_template(..., request=request)`. ([#863](https://github.com/simonw/datasette/issues/863)) - 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))",2020-07-01T21:46:07Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.45a5,2020-07-01,,2020-07-01T04:27:08Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.11,2020-07-08,"- 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)) - The `sqlite-utils query` command now runs updates in a transaction. Thanks, Thomas Sibley. ([#120](https://github.com/simonw/sqlite-utils/pull/120))",2020-07-08T17:36:45Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 207052882,https://github.com/dogsheep/github-to-sqlite,https://github.com/dogsheep/github-to-sqlite/releases/tag/2.3,2020-07-09,- New `github-to-sqlite repos my.db -r simonw/datasette` option for importing just specific repositories. #42,2020-07-09T23:28:07Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""github-api"", ""sqlite""]" 206156866,https://github.com/dogsheep/twitter-to-sqlite,https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.21.2,2020-07-18,- Added changelog badge,2020-07-18T22:43:20Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""sqlite"", ""twitter"", ""twitter-api""]" 207052882,https://github.com/dogsheep/github-to-sqlite,https://github.com/dogsheep/github-to-sqlite/releases/tag/2.4,2020-07-18,- New `github-to-sqlite tags github.db simonw/datasette` command for importing all tags for a repository. #43,2020-07-18T22:35:27Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""github-api"", ""sqlite""]" 206156866,https://github.com/dogsheep/twitter-to-sqlite,https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.21.3,2020-07-23,* Added table of contents to the documentation,2020-07-23T14:57:11Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""sqlite"", ""twitter"", ""twitter-api""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.12,2020-07-27,"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. - `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)) - `--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)) - 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)) - 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)) - 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))",2020-07-27T07:24:10Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.13,2020-07-30,"- `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) ",2020-07-30T01:15:55Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.14,2020-08-01,"- 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)) - 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)) - 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.",2020-08-01T21:00:31Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.14.1,2020-08-06,- Documentation improvements,2020-08-06T06:31:48Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.46,2020-08-09,"**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. - **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. - 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/). - Principle git branch has been renamed from `master` to `main`. ([#849](https://github.com/simonw/datasette/issues/849)) - 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)) - New logo for the documentation, and a new project tagline: ""An open source multi-tool for exploring and publishing data"". - Whitespace in column values is now respected on display, using `white-space: pre-wrap`. ([#896](https://github.com/simonw/datasette/issues/896)) - 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)) - Database file downloads now include a `content-length` HTTP header, enabling download progress bars. ([#905](https://github.com/simonw/datasette/issues/905)) - File downloads now also correctly set the suggested file name using a `content-disposition` HTTP header. ([#909](https://github.com/simonw/datasette/issues/909)) - `tests` are now excluded from the Datasette package properly - thanks, abeyerpath. ([#456](https://github.com/simonw/datasette/issues/456)) - The Datasette package published to PyPI now includes `sdist` as well as `bdist_wheel`. - Better titles for canned query pages. ([#887](https://github.com/simonw/datasette/issues/887)) - 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)) - New documentation section on [Publishing to Vercel](https://datasette.readthedocs.io/en/stable/publish.html#publish-vercel).",2020-08-09T16:10:47Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.15,2020-08-10,"- 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. - 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))",2020-08-10T19:07:27Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.47.2,2020-08-12,- 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)),2020-08-12T20:55:28Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.15.1,2020-08-12,- Now available as a `sdist` package on PyPI in addition to a wheel. ([#133](https://github.com/simonw/sqlite-utils/issues/133)),2020-08-12T17:00:27Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.47.1,2020-08-12,- Fixed a bug where the `sdist` distribution of Datasette was not correctly including the template files. ([#930](https://github.com/simonw/datasette/issues/930)),2020-08-12T02:38:00Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.47,2020-08-12,"- 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. - 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)) - 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)) - 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))",2020-08-12T00:44:52Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.47.3,2020-08-15,- 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)),2020-08-15T21:03:58Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.48,2020-08-16,"- Datasette documentation now lives at [docs.datasette.io](https://docs.datasette.io/). - `db.is_mutable` property is now documented and tested, see [Database introspection](https://docs.datasette.io/en/stable/internals.html#internals-database-introspection). - 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)) - 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)) - Fixed bug where plugins calling `db.execute_write_fn()` could hang Datasette if the connection failed. ([#935](https://github.com/simonw/datasette/issues/935)) - Fixed bug with the `?_nl=on` output option and binary data. ([#914](https://github.com/simonw/datasette/issues/914))",2020-08-16T18:58:34Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 207052882,https://github.com/dogsheep/github-to-sqlite,https://github.com/dogsheep/github-to-sqlite/releases/tag/2.5,2020-08-18,"- New `github-to-sqlite emojis` command for fetching emoji supported by GitHub. [Demo](https://github-to-sqlite.dogsheep.net/github/emojis). #47 - Added table of contents to README. - Switched to GitHub Actions for CI. - Switched default branch to `main` ",2020-08-18T15:08:20Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""github-api"", ""sqlite""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.16,2020-08-21,"- `--load-extension` option for `sqlite-utils query` for loading SQLite extensions. ([#134](https://github.com/simonw/sqlite-utils/issues/134)) - New `sqlite_utils.utils.find_spatialite()` function for finding SpatiaLite in common locations. ([#135](https://github.com/simonw/sqlite-utils/issues/135))",2020-08-21T21:05:51Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.49a0,2020-08-28,"- `register_output_renderer()` render functions can now return a `Response`. ([#953](https://github.com/simonw/datasette/issues/953)) - New `--upgrade` option for `datasette install`. ([#945](https://github.com/simonw/datasette/issues/945)) - `datasette publish heroku` now deploys using Python 3.8.5",2020-08-28T23:18:09Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.16.1,2020-08-28,"- `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)) - Continuous Integration is now powered by GitHub Actions. ([#143](https://github.com/simonw/sqlite-utils/issues/143))",2020-08-28T22:47:02Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 197431109,https://github.com/dogsheep/dogsheep-beta,https://github.com/dogsheep/dogsheep-beta/releases/tag/0.2,2020-09-01,"- Use Porter stemming by default, allow that to be over-ridden with the new `--tokenize=` option. #2",2020-09-01T20:41:31Z,"[""datasette"", ""datasette-io"", ""datasette-plugin"", ""datasette-tool"", ""dogsheep"", ""search""]" 197431109,https://github.com/dogsheep/dogsheep-beta,https://github.com/dogsheep/dogsheep-beta/releases/tag/0.1,2020-09-01,"- Optimize the FTS table and vacuum the database. #4 - First non-alpha release",2020-09-01T06:12:05Z,"[""datasette"", ""datasette-io"", ""datasette-plugin"", ""datasette-tool"", ""dogsheep"", ""search""]" 197431109,https://github.com/dogsheep/dogsheep-beta,https://github.com/dogsheep/dogsheep-beta/releases/tag/0.1a2,2020-09-01,- Now creates an index on the `timestamp` column. #1,2020-09-01T04:50:01Z,"[""datasette"", ""datasette-io"", ""datasette-plugin"", ""datasette-tool"", ""dogsheep"", ""search""]" 197431109,https://github.com/dogsheep/dogsheep-beta,https://github.com/dogsheep/dogsheep-beta/releases/tag/0.1a,2020-09-01,- First working version,2020-09-01T04:19:00Z,"[""datasette"", ""datasette-io"", ""datasette-plugin"", ""datasette-tool"", ""dogsheep"", ""search""]" 197431109,https://github.com/dogsheep/dogsheep-beta,https://github.com/dogsheep/dogsheep-beta/releases/tag/0.3,2020-09-02,- New `category` column plus default `categories` table. #7,2020-09-02T21:07:44Z,"[""datasette"", ""datasette-io"", ""datasette-plugin"", ""datasette-tool"", ""dogsheep"", ""search""]" 197431109,https://github.com/dogsheep/dogsheep-beta,https://github.com/dogsheep/dogsheep-beta/releases/tag/0.4.1,2020-09-03,- Fixed support for [advanced FTS query syntax](https://www.sqlite.org/fts5.html#full_text_query_syntax). #13,2020-09-03T21:41:52Z,"[""datasette"", ""datasette-io"", ""datasette-plugin"", ""datasette-tool"", ""dogsheep"", ""search""]" 197431109,https://github.com/dogsheep/dogsheep-beta,https://github.com/dogsheep/dogsheep-beta/releases/tag/0.4,2020-09-03,"- Working faceted search interface at `/-/beta` #3 - `is_public` column for filtering between public and private data. #11 - New `received` category. #10",2020-09-03T21:11:28Z,"[""datasette"", ""datasette-io"", ""datasette-plugin"", ""datasette-tool"", ""dogsheep"", ""search""]" 197431109,https://github.com/dogsheep/dogsheep-beta,https://github.com/dogsheep/dogsheep-beta/releases/tag/0.4a1,2020-09-03,"- Added `received` category. #10 - New `is_public` column. #11",2020-09-03T18:03:50Z,"[""datasette"", ""datasette-io"", ""datasette-plugin"", ""datasette-tool"", ""dogsheep"", ""search""]" 197431109,https://github.com/dogsheep/dogsheep-beta,https://github.com/dogsheep/dogsheep-beta/releases/tag/0.4a0,2020-09-03,"- Incomplete preview of the `/-/beta` search interface. #3 #9 ",2020-09-03T03:54:23Z,"[""datasette"", ""datasette-io"", ""datasette-plugin"", ""datasette-tool"", ""dogsheep"", ""search""]" 197431109,https://github.com/dogsheep/dogsheep-beta,https://github.com/dogsheep/dogsheep-beta/releases/tag/0.5,2020-09-04,- Custom template displays can now render a point on a map. #12,2020-09-04T01:46:16Z,"[""datasette"", ""datasette-io"", ""datasette-plugin"", ""datasette-tool"", ""dogsheep"", ""search""]" 197431109,https://github.com/dogsheep/dogsheep-beta,https://github.com/dogsheep/dogsheep-beta/releases/tag/0.6,2020-09-05,"- 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 - Maximum width 100% on images in results - Don't display facet headers if there are no results for that facet.",2020-09-05T16:26:06Z,"[""datasette"", ""datasette-io"", ""datasette-plugin"", ""datasette-tool"", ""dogsheep"", ""search""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.17,2020-09-07,"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)) - `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)) - `table.optimize()` method now deletes unnecessary rows from the `*_fts_docsize` table. ([#153](https://github.com/simonw/sqlite-utils/issues/153)) - 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)) - Neater indentation for schema SQL. ([#148](https://github.com/simonw/sqlite-utils/issues/148)) - Documentation for `sqlite_utils.AlterError` exception thrown by in `add_foreign_keys()`.",2020-09-07T22:08:33Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 140912432,https://github.com/simonw/sqlite-utils,https://github.com/simonw/sqlite-utils/releases/tag/2.18,2020-09-08,"- `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)) - `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)) - `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. - 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))",2020-09-08T23:39:21Z,"[""cli"", ""click"", ""datasette"", ""datasette-io"", ""datasette-tool"", ""python"", ""sqlite"", ""sqlite-database""]" 197431109,https://github.com/dogsheep/dogsheep-beta,https://github.com/dogsheep/dogsheep-beta/releases/tag/0.7a0,2020-09-09,"- Renamed `table` column to `type`. #17 - New `-d` option for passing one or more databases to index. Without this all databases in the config file will be indexed.",2020-09-09T00:46:06Z,"[""datasette"", ""datasette-io"", ""datasette-plugin"", ""datasette-tool"", ""dogsheep"", ""search""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.49,2020-09-14,"- 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)) - 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)) - `register_output_renderer()` render functions can now return a `Response`. ([#953](https://github.com/simonw/datasette/issues/953)) - New `--upgrade` option for `datasette install`. ([#945](https://github.com/simonw/datasette/issues/945)) - New `datasette --pdb` option. ([#962](https://github.com/simonw/datasette/issues/962)) - `datasette --get` exit code now reflects the internal HTTP status code. ([#947](https://github.com/simonw/datasette/issues/947)) - New `raise_404()` template function for returning 404 errors. ([#964](https://github.com/simonw/datasette/issues/964)) - `datasette publish heroku` now deploys using Python 3.8.5 - Upgraded [CodeMirror](https://codemirror.net/) to 5.57.0. ([#948](https://github.com/simonw/datasette/issues/948)) - Upgraded code style to Black 20.8b1. ([#958](https://github.com/simonw/datasette/issues/958)) - 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)) - Renamed the default error template from `500.html` to `error.html`. - 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))",2020-09-14T21:40:11Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.49a1,2020-09-14,"- Upgraded [CodeMirror](https://codemirror.net/) to 5.57.0. ([#948](https://github.com/simonw/datasette/issues/948)) - Upgraded code style to Black 20.8b1. ([#958](https://github.com/simonw/datasette/issues/958)) - New `datasette --pdb` option. ([#962](https://github.com/simonw/datasette/issues/962)) - `datasette --get` exit code now reflects the internal HTTP status code. ([#947](https://github.com/simonw/datasette/issues/947)) - 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)) - New mechanism for defining page templates with custom path parameters. ([#944](https://github.com/simonw/datasette/issues/944))",2020-09-14T02:48:19Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 107914493,https://github.com/simonw/datasette,https://github.com/simonw/datasette/releases/tag/0.49.1,2020-09-15,"- Fixed a bug with writable canned queries that use magic parameters but accept no non-magic arguments. (#967) ",2020-09-15T20:21:16Z,"[""asgi"", ""automatic-api"", ""csv"", ""datasets"", ""datasette"", ""datasette-io"", ""docker"", ""json"", ""python"", ""sql"", ""sqlite""]" 197431109,https://github.com/dogsheep/dogsheep-beta,https://github.com/dogsheep/dogsheep-beta/releases/tag/0.7.1,2020-09-17,- Fixed bug with sort orders displayed for the timeline view. #22,2020-09-17T23:13:46Z,"[""datasette"", ""datasette-io"", ""datasette-plugin"", ""datasette-tool"", ""dogsheep"", ""search""]" 197431109,https://github.com/dogsheep/dogsheep-beta,https://github.com/dogsheep/dogsheep-beta/releases/tag/0.7,2020-09-17,"- Option to sort by relevance / oldest / newest. #21 - Renamed `table` column to `type`. #17 - New `-d` option for passing one or more databases to index. Without this all databases in the config file will be indexed.",2020-09-17T22:57:09Z,"[""datasette"", ""datasette-io"", ""datasette-plugin"", ""datasette-tool"", ""dogsheep"", ""search""]" 207052882,https://github.com/dogsheep/github-to-sqlite,https://github.com/dogsheep/github-to-sqlite/releases/tag/2.6,2020-09-17,- New `github-to-sqlite get /gists` command for making authenticated API calls against any API path. #50 ,2020-09-17T03:55:03Z,"[""datasette"", ""datasette-io"", ""datasette-tool"", ""dogsheep"", ""github-api"", ""sqlite""]"