{"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.29", "date": "2019-07-08", "body_markdown": "ASGI, new plugin hooks, facet by date and much, much more\u2026 See [the release notes](https://datasette.readthedocs.io/en/stable/changelog.html#v0-29) for full details.", "published_at": "2019-07-08T03:43:13Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.42", "date": "2020-05-08", "body_markdown": "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", "published_at": "2020-05-08T17:56:36Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.51", "date": "2020-10-31", "body_markdown": "A new visual design, plugin hooks for adding navigation options, better handling of binary data, URL building utility methods and better support for running Datasette behind a proxy.\r\n\r\n### New visual design\r\n\r\nDatasette is no longer white and grey with blue and purple links! [Natalie Downe](https://twitter.com/natbat) has been working on a visual refresh, the first iteration of which is included in this release. ([#1056](https://github.com/simonw/datasette/pull/1056))\r\n\r\n![datasette-0 51](https://user-images.githubusercontent.com/9599/97791267-d9011e80-1b8d-11eb-9b1b-42908266f36f.png)\r\n\r\n### Plugins can now add links within Datasette\r\n\r\nA number of existing Datasette plugins add new pages to the Datasette interface, providig tools for things like [uploading CSVs](https://github.com/simonw/datasette-upload-csvs), [editing table schemas](https://github.com/simonw/datasette-edit-schema) or [configuring full-text search](https://github.com/simonw/datasette-configure-fts).\r\n\r\nPlugins like this can now link to themselves from other parts of Datasette interface. The [menu_links(datasette, actor)](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-menu-links) hook ([#1064](https://github.com/simonw/datasette/issues/1064)) lets plugins add links to Datasette's new top-right application menu, and the [table_actions(datasette, actor, database, table)](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-table-actions) hook ([#1066](https://github.com/simonw/datasette/issues/1066)) adds links to a new \"table actions\" menu on the table page.\r\n\r\nThe demo at [latest.datasette.io](https://latest.datasette.io/) now includes some example plugins. To see the new table actions menu first [sign into that demo as root](https://latest.datasette.io/login-as-root) and then visit the [facetable](https://latest.datasette.io/fixtures/facetable) table to see the new cog icon menu at the top of the page.\r\n\r\n### Binary data\r\n\r\nSQLite tables can contain binary data in `BLOB` columns. Datasette now provides links for users to download this data directly from Datasette, and uses those links to make binary data available from CSV exports. See [Binary data](https://docs.datasette.io/en/stable/binary_data.html#binary) for more details. ([#1036](https://github.com/simonw/datasette/issues/1036) and [#1034](https://github.com/simonw/datasette/issues/1034)).\r\n\r\n### URL building\r\n\r\nThe new [datasette.urls](https://docs.datasette.io/en/stable/internals.html#internals-datasette-urls) family of methods can be used to generate URLs to key pages within the Datasette interface, both within custom templates and Datasette plugins. See [Building URLs within plugins](https://docs.datasette.io/en/stable/writing_plugins.html#writing-plugins-building-urls) for more details. ([#904](https://github.com/simonw/datasette/issues/904))\r\n\r\n### Running Datasette behind a proxy\r\n\r\nThe [base_url](https://docs.datasette.io/en/stable/config.html#config-base-url) configuration option is designed to help run Datasette on a specific path behind a proxy - for example if you want to run an instance of Datasette at `/my-datasette/` within your existing site's URL hierarchy, proxied behind nginx or Apache.\r\n\r\nSupport for this configuration option has been greatly improved ([#1023](https://github.com/simonw/datasette/issues/1023)), and guidelines for using it are now available in a new documentation section on [Running Datasette behind a proxy](https://docs.datasette.io/en/stable/deploying.html#deploying-proxy). ([#1027](https://github.com/simonw/datasette/issues/1027))\r\n\r\n### Smaller changes\r\n\r\n- Wide tables shown within Datasette now scroll horizontally ([#998](https://github.com/simonw/datasette/issues/998)). This is achieved using a new `
` element which may impact the implementation of some plugins (for example [this change to datasette-cluster-map](https://github.com/simonw/datasette-cluster-map/commit/fcb4abbe7df9071c5ab57defd39147de7145b34e)).\r\n- New [debug-menu](https://docs.datasette.io/en/stable/authentication.html#permissions-debug-menu) permission. ([#1068](https://github.com/simonw/datasette/issues/1068))\r\n- Removed `--debug` option, which didn't do anything. ([#814](https://github.com/simonw/datasette/issues/814))\r\n- `Link:` HTTP header pagination. ([#1014](https://github.com/simonw/datasette/issues/1014))\r\n- `x` button for clearing filters. ([#1016](https://github.com/simonw/datasette/issues/1016))\r\n- Edit SQL button on canned queries, ([#1019](https://github.com/simonw/datasette/issues/1019))\r\n- `--load-extension=spatialite` shortcut. ([#1028](https://github.com/simonw/datasette/issues/1028))\r\n- scale-in animation for column action menu. ([#1039](https://github.com/simonw/datasette/issues/1039))\r\n- Option to pass a list of templates to `.render_template()` is now documented. ([#1045](https://github.com/simonw/datasette/issues/1045))\r\n- New `datasette.urls.static_plugins()` method. ([#1033](https://github.com/simonw/datasette/issues/1033))\r\n- `datasette -o` option now opens the most relevant page. ([#976](https://github.com/simonw/datasette/issues/976))\r\n- `datasette --cors` option now enables access to `/database.db` downloads. ([#1057](https://github.com/simonw/datasette/issues/1057))\r\n- Database file downloads now implement cascading permissions, so you can download a database if you have `view-database-download` permission even if you do not have permission to access the Datasette instance. ([#1058](https://github.com/simonw/datasette/issues/1058))\r\n- New documentation on [Designing URLs for your plugin](https://docs.datasette.io/en/stable/writing_plugins.html#writing-plugins-designing-urls). ([#1053](https://github.com/simonw/datasette/issues/1053))", "published_at": "2020-10-31T22:29:33Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 206156866, "repo": "https://github.com/dogsheep/twitter-to-sqlite", "release": "https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.22", "date": "2021-09-21", "body_markdown": "- `twitter-to-sqlite import` now imports `app.js` to `archive_app` table.\r\n- Small fixes for `twitter-to-sqlite import` reflecting changed filenames in the Twitter export.\r\n- Fix for remaining `since_id` bug, thanks Ruben Vermeersch! [#58](https://github.com/dogsheep/twitter-to-sqlite/issues/58)", "published_at": "2021-09-21T17:41:05Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"sqlite\", \"twitter\", \"twitter-api\"]"} {"rowid": 140912432, "repo": "https://github.com/simonw/sqlite-utils", "release": "https://github.com/simonw/sqlite-utils/releases/tag/3.33", "date": "2023-06-26", "body_markdown": "- `sqlite-utils` will now use [sqlean.py](https://github.com/nalgeon/sqlean.py) in place of `sqlite3` if it is installed in the same virtual environment. This is useful for Python environments with either an outdated version of SQLite or with restrictions on SQLite such as disabled extension loading or restrictions resulting in the `sqlite3.OperationalError: table sqlite_master may not be modified` error. ([#559](https://github.com/simonw/sqlite-utils/issues/559))\r\n- New `with db.ensure_autocommit_off()` context manager, which ensures that the database is in autocommit mode for the duration of a block of code. This is used by `db.enable_wal()` and `db.disable_wal()` to ensure they work correctly with `pysqlite3` and `sqlean.py`.\r\n- New `db.iterdump()` method, providing an iterator over SQL strings representing a dump of the database. This uses `sqlite-dump` if it is available, otherwise falling back on the `conn.iterdump()` method from `sqlite3`. Both `pysqlite3` and `sqlean.py` omit support for `iterdump()` - this method helps paper over that difference.", "published_at": "2023-06-26T01:32:30Z", "topics": "[\"cli\", \"click\", \"datasette\", \"datasette-io\", \"datasette-tool\", \"python\", \"sqlite\", \"sqlite-database\"]"} {"rowid": 140912432, "repo": "https://github.com/simonw/sqlite-utils", "release": "https://github.com/simonw/sqlite-utils/releases/tag/1.6", "date": "2019-07-19", "body_markdown": "- `sqlite-utils insert` can now accept TSV data via the new `--tsv` option (#41)\r\n", "published_at": "2019-07-19T05:36:48Z", "topics": "[\"cli\", \"click\", \"datasette\", \"datasette-io\", \"datasette-tool\", \"python\", \"sqlite\", \"sqlite-database\"]"} {"rowid": 140912432, "repo": "https://github.com/simonw/sqlite-utils", "release": "https://github.com/simonw/sqlite-utils/releases/tag/2.13", "date": "2020-07-30", "body_markdown": "- `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", "published_at": "2020-07-30T01:15:55Z", "topics": "[\"cli\", \"click\", \"datasette\", \"datasette-io\", \"datasette-tool\", \"python\", \"sqlite\", \"sqlite-database\"]"} {"rowid": 207052882, "repo": "https://github.com/dogsheep/github-to-sqlite", "release": "https://github.com/dogsheep/github-to-sqlite/releases/tag/2.7", "date": "2020-10-19", "body_markdown": "- `github-to-sqlite repos` command now takes options `--readme` and `--readme-html`, which write the README or rendered HTML README into the `readme` or `readme_html` columns, respectively. #52\r\n- New `--accept` option for `github-to-sqlite get`. #50", "published_at": "2020-10-19T05:38:34Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"github-api\", \"sqlite\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.34", "date": "2020-01-30", "body_markdown": "- `_search=` queries are now correctly escaped using a new `escape_fts()` custom SQL function. This means you can now run searches for strings like `park.` without seeing errors. (#651)\r\n- Google Cloud Run is no longer in beta, so `datasette publish cloudrun` has been updated to work even if the user has not installed the `gcloud` beta components package. Thanks, Katie McLaughlin (#660)\r\n- `datasette package` now accepts a `--port` option for specifying which port the resulting Docker container should listen on. (#661)\r\n\r\nhttps://datasette.readthedocs.io/en/stable/changelog.html#v0-34\r\n", "published_at": "2020-01-30T00:29:21Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 213286752, "repo": "https://github.com/dogsheep/pocket-to-sqlite", "release": "https://github.com/dogsheep/pocket-to-sqlite/releases/tag/0.2.2", "date": "2022-08-22", "body_markdown": "- `-a` is now the shortcut for `--auth` - previously it was duplicated as a shortcut for `--all`. Thanks, [Thomas Lockney](https://github.com/tlockney). [#7](https://github.com/dogsheep/pocket-to-sqlite/issues/7)\r\n- `pocket-to-sqlite auth` command now updates the existing `auth.json` file rather than over-writing it. [#10](https://github.com/dogsheep/pocket-to-sqlite/issues/10)", "published_at": "2022-08-22T16:21:34Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"pocket\", \"pocket-api\", \"sqlite\"]"} {"rowid": 207052882, "repo": "https://github.com/dogsheep/github-to-sqlite", "release": "https://github.com/dogsheep/github-to-sqlite/releases/tag/2.8.2", "date": "2020-12-16", "body_markdown": "- `--readme` now stores `null` if the README file does not exist, rather than throwing an error. #57\r\n- README HTML is rewritten to fix broken internal links, e.g. for a table of contents. #58\r\n", "published_at": "2020-12-16T19:21:58Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"github-api\", \"sqlite\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/1.0a1", "date": "2022-12-01", "body_markdown": "- Write APIs now serve correct CORS headers if Datasette is started in `--cors` mode. See the full list of [CORS headers](https://docs.datasette.io/en/latest/json_api.html#json-api) in the documentation. ([#1922](https://github.com/simonw/datasette/issues/1922))\r\n- Fixed a bug where the `_memory` database could be written to even though writes were not persisted. ([#1917](https://github.com/simonw/datasette/issues/1917))\r\n- The demo instance now includes an `ephemeral` database which can be used to test Datasette's write APIs, using the new [datasette-ephemeral-tables](https://datasette.io/plugins/datasette-ephemeral-tables) plugin to drop any created tables after five minutes. This database is only available if you sign in as the root user using the link on the homepage. ([#1915](https://github.com/simonw/datasette/issues/1915))\r\n- Fixed a bug where hitting the write endpoints with a `GET` request returned a 500 error. It now returns a 405 (method not allowed) error instead. ([#1916](https://github.com/simonw/datasette/issues/1916))\r\n- The list of endpoints in the API explorer now lists mutable databases first. ([#1918](https://github.com/simonw/datasette/issues/1918))\r\n- The `\"ignore\": true` and `\"replace\": true` options for the insert API are [now documented](https://docs.datasette.io/en/latest/json_api.html#tableinsertview). ([#1924](https://github.com/simonw/datasette/issues/1924))", "published_at": "2022-12-01T21:42:45Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 197431109, "repo": "https://github.com/dogsheep/dogsheep-beta", "release": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.4", "date": "2020-09-03", "body_markdown": "- 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", "published_at": "2020-09-03T21:11:28Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-plugin\", \"datasette-tool\", \"dogsheep\", \"search\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/1.0a5", "date": "2023-08-29", "body_markdown": "- When restrictions are applied to [API tokens](https://docs.datasette.io/en/1.0a5/authentication.html#createtokenview), those restrictions now behave slightly differently: applying the `view-table` restriction will imply the ability to `view-database` for the database containing that table, and both `view-table` and `view-database` will imply `view-instance`. Previously you needed to create a token with restrictions that explicitly listed `view-instance` and `view-database` and `view-table` in order to view a table without getting a permission denied error. ([#2102](https://github.com/simonw/datasette/issues/2102))\r\n- New `datasette.yaml` (or `.json`) configuration file, which can be specified using `datasette -c path-to-file`. The goal here to consolidate settings, plugin configuration, permissions, canned queries, and other Datasette configuration into a single single file, separate from `metadata.yaml`. The legacy `settings.json` config file used for [Configuration directory mode](https://docs.datasette.io/en/1.0a5/settings.html#config-dir) has been removed, and `datasette.yaml` has a `\"settings\"` section where the same settings key/value pairs can be included. In the next future alpha release, more configuration such as plugins/permissions/canned queries will be moved to the `datasette.yaml` file. See [#2093](https://github.com/simonw/datasette/issues/2093) for more details. Thanks, Alex Garcia.\r\n- The `-s/--setting` option can now take dotted paths to nested settings. These will then be used to set or over-ride the same options as are present in the new configuration file. ([#2156](https://github.com/simonw/datasette/issues/2156))\r\n- New `--actor '{\"id\": \"json-goes-here\"}'` option for use with `datasette --get` to treat the simulated request as being made by a specific actor, see [datasette --get](https://docs.datasette.io/en/1.0a5/cli-reference.html#cli-datasette-get). ([#2153](https://github.com/simonw/datasette/issues/2153))\r\n- The Datasette `_internal` database has had some changes. It no longer shows up in the `datasette.databases` list by default, and is now instead available to plugins using the `datasette.get_internal_database()`. Plugins are invited to use this as a private database to store configuration and settings and secrets that should not be made visible through the default Datasette interface. Users can pass the new `--internal internal.db` option to persist that internal database to disk. Thanks, Alex Garcia. ([#2157](https://github.com/simonw/datasette/issues/2157)).", "published_at": "2023-08-29T17:19:35Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 197431109, "repo": "https://github.com/dogsheep/dogsheep-beta", "release": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.2", "date": "2020-09-01", "body_markdown": "- Use Porter stemming by default, allow that to be over-ridden with the new `--tokenize=` option. #2", "published_at": "2020-09-01T20:41:31Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-plugin\", \"datasette-tool\", \"dogsheep\", \"search\"]"} {"rowid": 206202864, "repo": "https://github.com/dogsheep/inaturalist-to-sqlite", "release": "https://github.com/dogsheep/inaturalist-to-sqlite/releases/tag/0.2.1", "date": "2020-10-22", "body_markdown": "- Tweaked dependencies for compatibility with new PyPI resolver.\r\n\r\n", "published_at": "2020-10-22T00:08:58Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"inaturalist\", \"sqlite\"]"} {"rowid": 213286752, "repo": "https://github.com/dogsheep/pocket-to-sqlite", "release": "https://github.com/dogsheep/pocket-to-sqlite/releases/tag/0.2.1", "date": "2020-10-22", "body_markdown": "- Tweaked dependencies for compatibility with new PyPI resolver.", "published_at": "2020-10-22T00:08:24Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"pocket\", \"pocket-api\", \"sqlite\"]"} {"rowid": 197882382, "repo": "https://github.com/dogsheep/healthkit-to-sqlite", "release": "https://github.com/dogsheep/healthkit-to-sqlite/releases/tag/0.3", "date": "2019-07-22", "body_markdown": "- Tool now displays a progress bar during import - you can disable it with `--silent` #5\r\n- You can pass a path to a decompressed XML file instead of a zip file, using `--xml`\r\n- Records table is now broken up into different tables for each type of recorded data #6", "published_at": "2019-07-22T03:33:32Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"healthkit\", \"sqlite\"]"} {"rowid": 140912432, "repo": "https://github.com/simonw/sqlite-utils", "release": "https://github.com/simonw/sqlite-utils/releases/tag/3.18", "date": "2021-11-15", "body_markdown": "- The `table.lookup()` method now has an optional second argument which can be used to populate columns only the first time the record is created, see [Working with lookup tables](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-lookup-tables). ([#339](https://github.com/simonw/sqlite-utils/issues/339))\r\n- `sqlite-utils memory` now has a `--flatten` option for [flattening nested JSON objects](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-inserting-data-flatten) into separate columns, consistent with `sqlite-utils insert`. ([#332](https://github.com/simonw/sqlite-utils/issues/332))\r\n- `table.create_index(..., find_unique_name=True)` parameter, which finds an available name for the created index even if the default name has already been taken. This means that `index-foreign-keys` will work even if one of the indexes it tries to create clashes with an existing index name. ([#335](https://github.com/simonw/sqlite-utils/issues/335))\r\n- Added `py.typed` to the module, so [mypy](http://mypy-lang.org/) should now correctly pick up the type annotations. Thanks, Andreas Longo. ([#331](https://github.com/simonw/sqlite-utils/issues/331))\r\n- Now depends on `python-dateutil` instead of depending on `dateutils`. Thanks, Denys Pavlov. ([#324](https://github.com/simonw/sqlite-utils/issues/324))\r\n- `table.create()` (see [Explicitly creating a table](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-explicit-create)) now handles `dict`, `list` and `tuple` types, mapping them to `TEXT` columns in SQLite so that they can be stored encoded as JSON. ([#338](https://github.com/simonw/sqlite-utils/issues/338))\r\n- Inserted data with square braces in the column names (for example a CSV file containing a `item[price]`) column now have the braces converted to underscores: `item_price_`. Previously such columns would be rejected with an error. ([#329](https://github.com/simonw/sqlite-utils/issues/329))\r\n- Now also tested against Python 3.10. ([#330](https://github.com/simonw/sqlite-utils/pull/330))", "published_at": "2021-11-15T03:17:31Z", "topics": "[\"cli\", \"click\", \"datasette\", \"datasette-io\", \"datasette-tool\", \"python\", \"sqlite\", \"sqlite-database\"]"} {"rowid": 140912432, "repo": "https://github.com/simonw/sqlite-utils", "release": "https://github.com/simonw/sqlite-utils/releases/tag/2.10", "date": "2020-06-12", "body_markdown": "- The `sqlite-utils` command now supports UPDATE/INSERT/DELETE in addition to SELECT. #115", "published_at": "2020-06-12T17:44:32Z", "topics": "[\"cli\", \"click\", \"datasette\", \"datasette-io\", \"datasette-tool\", \"python\", \"sqlite\", \"sqlite-database\"]"} {"rowid": 140912432, "repo": "https://github.com/simonw/sqlite-utils", "release": "https://github.com/simonw/sqlite-utils/releases/tag/3.29", "date": "2022-08-28", "body_markdown": "- The `sqlite-utils query`, `memory` and `bulk` commands now all accept a new `--functions` option. This can be passed a string of Python code, and any callable objects defined in that code will be made available to SQL queries as custom SQL functions. See [Defining custom SQL functions](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-query-functions) for details. ([#471](https://github.com/simonw/sqlite-utils/issues/471))\r\n- `db[table].create(...)` method now accepts a new `transform=True` parameter. If the table already exists it will be transform to match the schema configuration options passed to the function. This may result in columns being added or dropped, column types being changed, column order being updated or not null and default values for columns being set. ([#467](https://github.com/simonw/sqlite-utils/issues/467))\r\n- Related to the above, the `sqlite-utils create-table` command now accepts a `--transform` option.\r\n- New introspection property: `table.default_values` returns a dictionary mapping each column name with a default value to the configured default value. ([#475](https://github.com/simonw/sqlite-utils/issues/475))\r\n- The `--load-extension` option can now be provided a path to a compiled SQLite extension module accompanied by the name of an entrypoint, separated by a colon - for example `--load-extension ./lines0:sqlite3_lines0_noread_init`. This feature is modelled on code first [contributed to Datasette](https://github.com/simonw/datasette/pull/1789) by Alex Garcia. ([#470](https://github.com/simonw/sqlite-utils/issues/470))\r\n- Functions registered using the [db.register_function()](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-register-function) method can now have a custom name specified using the new `db.register_function(fn, name=...)` parameter. ([#458](https://github.com/simonw/sqlite-utils/issues/458))\r\n- [sqlite-utils rows](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-rows) has a new `--order` option for specifying the sort order for the returned rows. ([#469](https://github.com/simonw/sqlite-utils/issues/469))\r\n- All of the CLI options that accept Python code blocks can now all be used to define functions that can access modules imported in that same block of code without needing to use the `global` keyword. ([#472](https://github.com/simonw/sqlite-utils/issues/472))\r\n- Fixed bug where `table.extract()` would not behave correctly for columns containing null values. Thanks, Forest Gregg. ([#423](https://github.com/simonw/sqlite-utils/issues/423))\r\n- New tutorial: [Cleaning data with sqlite-utils and Datasette](https://datasette.io/tutorials/clean-data) shows how to use `sqlite-utils` to import and clean an example CSV file.\r\n- Datasette and `sqlite-utils` now have a Discord community. [Join the Discord here](https://discord.gg/Ass7bCAMDw).", "published_at": "2022-08-28T03:50:29Z", "topics": "[\"cli\", \"click\", \"datasette\", \"datasette-io\", \"datasette-tool\", \"python\", \"sqlite\", \"sqlite-database\"]"} {"rowid": 140912432, "repo": "https://github.com/simonw/sqlite-utils", "release": "https://github.com/simonw/sqlite-utils/releases/tag/3.35.2", "date": "2023-11-04", "body_markdown": "- The `--load-extension=spatialite` option and [find_spatialite()](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-gis-find-spatialite) utility function now both work correctly on `arm64` Linux. Thanks, [Mike Coats](https://github.com/MikeCoats). ([#599](https://github.com/simonw/sqlite-utils/issues/599))\r\n- Fix for bug where `sqlite-utils insert` could cause your terminal cursor to disappear. Thanks, [Luke Plant](https://github.com/spookylukey). ([#433](https://github.com/simonw/sqlite-utils/issues/433))\r\n- `datetime.timedelta` values are now stored as `TEXT` columns. Thanks, [Harald Nezbeda](https://github.com/nezhar). ([#522](https://github.com/simonw/sqlite-utils/issues/522))\r\n- Test suite is now also run against Python 3.12.", "published_at": "2023-11-04T01:05:56Z", "topics": "[\"cli\", \"click\", \"datasette\", \"datasette-io\", \"datasette-tool\", \"python\", \"sqlite\", \"sqlite-database\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.63a0", "date": "2022-09-26", "body_markdown": "- The [prepare_jinja2_environment(env, datasette)](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-hook-prepare-jinja2-environment) plugin hook now accepts an optional `datasette` argument. Hook implementations can also now return an `async` function which will be awaited automatically. ([#1809](https://github.com/simonw/datasette/issues/1809))\r\n- `--load-extension` option now supports entrypoints. Thanks, Alex Garcia. ([#1789](https://github.com/simonw/datasette/pull/1789))\r\n- New tutorial: [Cleaning data with sqlite-utils and Datasette](https://datasette.io/tutorials/clean-data).\r\n- Facet size can now be set per-table with the new `facet_size` table metadata option. ([#1804](https://github.com/simonw/datasette/issues/1804))\r\n- `truncate_cells_html` setting now also affects long URLs in columns. ([#1805](https://github.com/simonw/datasette/issues/1805))\r\n- `Database(is_mutable=)` now defaults to `True`. ([#1808](https://github.com/simonw/datasette/issues/1808))\r\n- Non-JavaScript textarea now increases height to fit the SQL query. ([#1786](https://github.com/simonw/datasette/issues/1786))\r\n- More detailed command descriptions on the [CLI reference](https://docs.datasette.io/en/latest/cli-reference.html#cli-reference) page. ([#1787](https://github.com/simonw/datasette/issues/1787))\r\n- Datasette no longer enforces upper bounds on its depenedencies. ([#1800](https://github.com/simonw/datasette/issues/1800))\r\n- Facets are now displayed with better line-breaks in long values. Thanks, Daniel Rech. ([#1794](https://github.com/simonw/datasette/pull/1794))\r\n- The `settings.json` file used in [Configuration directory mode](https://docs.datasette.io/en/latest/settings.html#config-dir) is now validated on startup. ([#1816](https://github.com/simonw/datasette/issues/1816))", "published_at": "2022-09-26T21:56:30Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.63a1", "date": "2022-10-24", "body_markdown": "- SQL query is now re-displayed when terminated with a time limit error. ([#1819](https://github.com/simonw/datasette/issues/1819))\r\n- New documentation on [Running Datasette using OpenRC](https://docs.datasette.io/en/latest/deploying.html#deploying-openrc) - thanks, Adam Simpson. ([#1825](https://github.com/simonw/datasette/pull/1825))\r\n- The [inspect data](https://docs.datasette.io/en/latest/performance.html#performance-inspect) mechanism is now used to speed up server startup - thanks, Forest Gregg. ([#1834](https://github.com/simonw/datasette/issues/1834))\r\n- In [Configuration directory mode](https://docs.datasette.io/en/latest/settings.html#config-dir) databases with filenames ending in `.sqlite` or `.sqlite3` are now automatically added to the Datasette instance. ([#1646](https://github.com/simonw/datasette/issues/1646))\r\n- Breadcrumb navigation display now respects the current user's permissions. ([#1831](https://github.com/simonw/datasette/issues/1831))\r\n- Screenshots in the documentation are now maintained using [shot-scraper](https://shot-scraper.datasette.io/), as described in [Automating screenshots for the Datasette documentation using shot-scraper](https://simonwillison.net/2022/Oct/14/automating-screenshots/). ([#1844](https://github.com/simonw/datasette/issues/1844))\r\n- The [datasette.check_visibility()](https://docs.datasette.io/en/latest/internals.html#datasette-check-visibility) method now accepts an optional `permissions=` list, allowing it to take multiple permissions into account at once when deciding if something should be shown as public or private. This has been used to correctly display padlock icons in more places in the Datasette interface. ([#1829](https://github.com/simonw/datasette/issues/1829))", "published_at": "2022-10-24T03:11:47Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 197431109, "repo": "https://github.com/dogsheep/dogsheep-beta", "release": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.6", "date": "2020-09-05", "body_markdown": "- 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.", "published_at": "2020-09-05T16:26:06Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-plugin\", \"datasette-tool\", \"dogsheep\", \"search\"]"} {"rowid": 256834907, "repo": "https://github.com/dogsheep/dogsheep-photos", "release": "https://github.com/dogsheep/dogsheep-photos/releases/tag/0.4", "date": "2020-05-20", "body_markdown": "- 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 ", "published_at": "2020-05-20T04:24:28Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"sqlite\"]"} {"rowid": 197431109, "repo": "https://github.com/dogsheep/dogsheep-beta", "release": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.7a0", "date": "2020-09-09", "body_markdown": "- 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.", "published_at": "2020-09-09T00:46:06Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-plugin\", \"datasette-tool\", \"dogsheep\", \"search\"]"} {"rowid": 207052882, "repo": "https://github.com/dogsheep/github-to-sqlite", "release": "https://github.com/dogsheep/github-to-sqlite/releases/tag/2.8.1", "date": "2020-11-30", "body_markdown": "- README now links to example database tables for each command. #56\r\n- Added documentation for `github-to-sqlite releases`.", "published_at": "2020-11-30T04:18:21Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"github-api\", \"sqlite\"]"} {"rowid": 213286752, "repo": "https://github.com/dogsheep/pocket-to-sqlite", "release": "https://github.com/dogsheep/pocket-to-sqlite/releases/tag/0.2.3", "date": "2023-07-09", "body_markdown": "- Progress bar now includes a count of the total number of items to fetch.\r\n- Now packaged using `pyproject.toml`. [#12](https://github.com/dogsheep/pocket-to-sqlite/issues/12)", "published_at": "2023-07-09T01:15:03Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"pocket\", \"pocket-api\", \"sqlite\"]"} {"rowid": 197431109, "repo": "https://github.com/dogsheep/dogsheep-beta", "release": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.7", "date": "2020-09-17", "body_markdown": "- 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.", "published_at": "2020-09-17T22:57:09Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-plugin\", \"datasette-tool\", \"dogsheep\", \"search\"]"} {"rowid": 197431109, "repo": "https://github.com/dogsheep/dogsheep-beta", "release": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.1", "date": "2020-09-01", "body_markdown": "- Optimize the FTS table and vacuum the database. #4\r\n- First non-alpha release", "published_at": "2020-09-01T06:12:05Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-plugin\", \"datasette-tool\", \"dogsheep\", \"search\"]"} {"rowid": 140912432, "repo": "https://github.com/simonw/sqlite-utils", "release": "https://github.com/simonw/sqlite-utils/releases/tag/3.30", "date": "2022-10-25", "body_markdown": "- Now tested against Python 3.11. ([#502](https://github.com/simonw/sqlite-utils/issues/502))\r\n- New `table.search_sql(include_rank=True)` option, which adds a `rank` column to the generated SQL. Thanks, Jacob Chapman. ([#480](https://github.com/simonw/sqlite-utils/pull/480))\r\n- Progress bars now display for newline-delimited JSON files using the `--nl` option. Thanks, Mischa Untaga. ([#485](https://github.com/simonw/sqlite-utils/issues/485))\r\n- New `db.close()` method. ([#504](https://github.com/simonw/sqlite-utils/issues/504))\r\n- Conversion functions passed to [table.convert(...)](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-convert) can now return lists or dictionaries, which will be inserted into the database as JSON strings. ([#495](https://github.com/simonw/sqlite-utils/issues/495))\r\n- `sqlite-utils install` and `sqlite-utils uninstall` commands for installing packages into the same virtual environment as `sqlite-utils`, [described here](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-install). ([#483](https://github.com/simonw/sqlite-utils/issues/483))\r\n- New [sqlite_utils.utils.flatten()](https://sqlite-utils.datasette.io/en/stable/reference.html#reference-utils-flatten) utility function. ([#500](https://github.com/simonw/sqlite-utils/issues/500))\r\n- Documentation on [using Just](https://sqlite-utils.datasette.io/en/stable/contributing.html#contributing-just) to run tests, linters and build documentation.\r\n- Documentation now covers the [Release process](https://sqlite-utils.datasette.io/en/stable/contributing.html#release-process) for this package.", "published_at": "2022-10-25T22:34:48Z", "topics": "[\"cli\", \"click\", \"datasette\", \"datasette-io\", \"datasette-tool\", \"python\", \"sqlite\", \"sqlite-database\"]"} {"rowid": 197431109, "repo": "https://github.com/dogsheep/dogsheep-beta", "release": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.10", "date": "2020-12-16", "body_markdown": "- Now depends on [sqlite-utils](https://github.com/simonw/sqlite-utils) >= 3.0. #30\r\n- The user's original search term is now passed to the `display_sql` SQL query as the `:q` parameter. #29\r\n", "published_at": "2020-12-16T21:28:13Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-plugin\", \"datasette-tool\", \"dogsheep\", \"search\"]"} {"rowid": 140912432, "repo": "https://github.com/simonw/sqlite-utils", "release": "https://github.com/simonw/sqlite-utils/releases/tag/3.26.1", "date": "2022-05-02", "body_markdown": "- Now depends on [click-default-group-wheel](https://github.com/simonw/click-default-group-wheel), a pure Python wheel package. This means you can install and use this package with [Pyodide](https://pyodide.org/), which can run Python entirely in your browser using WebAssembly. ([#429](https://github.com/simonw/sqlite-utils/pull/429))\r\n\r\n Try that out using the [Pyodide REPL](https://pyodide.org/en/stable/console.html):\r\n\r\n ```pycon\r\n >>> import micropip\r\n >>> await micropip.install(\"sqlite-utils\")\r\n >>> import sqlite_utils\r\n >>> db = sqlite_utils.Database(memory=True)\r\n >>> list(db.query(\"select 3 * 5\"))\r\n [{'3 * 5': 15}]\r\n ```", "published_at": "2022-05-02T18:18:01Z", "topics": "[\"cli\", \"click\", \"datasette\", \"datasette-io\", \"datasette-tool\", \"python\", \"sqlite\", \"sqlite-database\"]"} {"rowid": 197431109, "repo": "https://github.com/dogsheep/dogsheep-beta", "release": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.1a2", "date": "2020-09-01", "body_markdown": "- Now creates an index on the `timestamp` column. #1", "published_at": "2020-09-01T04:50:01Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-plugin\", \"datasette-tool\", \"dogsheep\", \"search\"]"} {"rowid": 140912432, "repo": "https://github.com/simonw/sqlite-utils", "release": "https://github.com/simonw/sqlite-utils/releases/tag/2.15.1", "date": "2020-08-12", "body_markdown": "- Now available as a `sdist` package on PyPI in addition to a wheel. ([#133](https://github.com/simonw/sqlite-utils/issues/133))", "published_at": "2020-08-12T17:00:27Z", "topics": "[\"cli\", \"click\", \"datasette\", \"datasette-io\", \"datasette-tool\", \"python\", \"sqlite\", \"sqlite-database\"]"} {"rowid": 303218369, "repo": "https://github.com/dogsheep/evernote-to-sqlite", "release": "https://github.com/dogsheep/evernote-to-sqlite/releases/tag/0.2", "date": "2020-10-12", "body_markdown": "- Notes now use an ID derived from a hash of their contents. #3\r\n- Date columns are now in ISO format, and indexd. #4\r\n- Notes and resources table now have full-text search configured. #4\r\n- Improved how OCR is stored in the database, only storing the most confident matches. #6", "published_at": "2020-10-12T00:07:24Z", "topics": "[\"datasette-io\", \"datasette-tool\", \"dogsheep\", \"evernote\", \"sqlite\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.62a1", "date": "2022-07-18", "body_markdown": "- New plugin hook: [handle_exception()](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-handle-exception), for custom handling of exceptions caught by Datasette. ([#1770](https://github.com/simonw/datasette/issues/1770))\r\n- The [render_cell()](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-render-cell) plugin hook is now also passed a `row` argument, representing the `sqlite3.Row` object that is being rendered. ([#1300](https://github.com/simonw/datasette/issues/1300))\r\n- New `--nolock` option for ignoring file locks when opening read-only databases. ([#1744](https://github.com/simonw/datasette/issues/1744))\r\n- Documentation now uses the [Furo](https://github.com/pradyunsg/furo) Sphinx theme. ([#1746](https://github.com/simonw/datasette/issues/1746))\r\n- Datasette now has a [Discord community](https://discord.gg/ktd74dm5mw).\r\n- Database file downloads now implement conditional GET using ETags. ([#1739](https://github.com/simonw/datasette/issues/1739))\r\n- Examples in the documentation now include a copy-to-clipboard button. ([#1748](https://github.com/simonw/datasette/issues/1748))\r\n- HTML for facet results and suggested results has been extracted out into new templates `_facet_results.html` and `_suggested_facets.html`. Thanks, M. Nasimul Haque. ([#1759](https://github.com/simonw/datasette/pull/1759))", "published_at": "2022-07-18T01:09:05Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/1.0a6", "date": "2023-09-08", "body_markdown": "- New plugin hook: [actors_from_ids(datasette, actor_ids)](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-hook-actors-from-ids) and an internal method to accompany it, [await .actors_from_ids(actor_ids)](https://docs.datasette.io/en/latest/internals.html#datasette-actors-from-ids). This mechanism is intended to be used by plugins that may need to display the actor who was responsible for something managed by that plugin: they can now resolve the recorded IDs of actors into the full actor objects. ([#2181](https://github.com/simonw/datasette/issues/2181))\r\n- `DATASETTE_LOAD_PLUGINS` environment variable for [controlling which plugins](https://docs.datasette.io/en/latest/plugins.html#plugins-datasette-load-plugins) are loaded by Datasette. ([#2164](https://github.com/simonw/datasette/issues/2164))\r\n- Datasette now checks if the user has permission to view a table linked to by a foreign key before turning that foreign key into a clickable link. ([#2178](https://github.com/simonw/datasette/issues/2178))\r\n- The `execute-sql` permission now implies that the actor can also view the database and instance. ([#2169](https://github.com/simonw/datasette/issues/2169))\r\n- Documentation describing a pattern for building plugins that themselves [define further hooks](https://docs.datasette.io/en/latest/writing_plugins.html#writing-plugins-extra-hooks) for other plugins. ([#1765](https://github.com/simonw/datasette/issues/1765))\r\n- Datasette is now tested against the Python 3.12 preview. ([#2175](https://github.com/simonw/datasette/pull/2175))", "published_at": "2023-09-08T04:45:12Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 140912432, "repo": "https://github.com/simonw/sqlite-utils", "release": "https://github.com/simonw/sqlite-utils/releases/tag/3.32", "date": "2023-05-21", "body_markdown": "- New experimental `sqlite-utils tui` interface for interactively building command-line invocations, powered by [Trogon](https://github.com/Textualize/trogon). This requires an optional dependency, installed using `sqlite-utils install trogon`. There is a screenshot [in the documentation](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-tui). ([#545](https://github.com/simonw/sqlite-utils/issues/545))\r\n- `sqlite-utils analyze-tables` command ([documentation](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-analyze-tables)) now has a `--common-limit 20` option for changing the number of common/least-common values shown for each column. ([#544](https://github.com/simonw/sqlite-utils/issues/544))\r\n- `sqlite-utils analyze-tables --no-most` and `--no-least` options for disabling calculation of most-common and least-common values.\r\n- If a column contains only `null` values, `analyze-tables` will no longer attempt to calculate the most common and least common values for that column. ([#547](https://github.com/simonw/sqlite-utils/issues/547))\r\n- Calling `sqlite-utils analyze-tables` with non-existent columns in the `-c/--column` option now results in an error message. ([#548](https://github.com/simonw/sqlite-utils/issues/548))\r\n- The `table.analyze_column()` method ([documented here](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-analyze-column)) now accepts `most_common=False` and `least_common=False` options for disabling calculation of those values.", "published_at": "2023-05-21T18:55:42Z", "topics": "[\"cli\", \"click\", \"datasette\", \"datasette-io\", \"datasette-tool\", \"python\", \"sqlite\", \"sqlite-database\"]"} {"rowid": 207052882, "repo": "https://github.com/dogsheep/github-to-sqlite", "release": "https://github.com/dogsheep/github-to-sqlite/releases/tag/2.8", "date": "2020-11-30", "body_markdown": "- New command: `github-to-sqlite workflows`, for fetching the YAML configuration used by [GitHub Actions](https://github.com/features/actions) workflows and using it to populate new `workflows`, `jobs` and `steps` tables. #54\r\n- New command: `github-to-sqlite pull-requests` - thanks, @adamjonas! #48\r\n- `github-to-sqlite issues --issue` option can now be used multiple times.", "published_at": "2020-11-30T01:41:38Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"github-api\", \"sqlite\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.51a1", "date": "2020-10-30", "body_markdown": "- New colour scheme and improved visual design, courtesy of Natalie Downe. ([#1056](https://github.com/simonw/datasette/pull/1056))\r\n- scale-in animation for column action menu. ([#1039](https://github.com/simonw/datasette/issues/1039))\r\n- Wide tables now scroll horizontally. ([#998](https://github.com/simonw/datasette/issues/998))\r\n- Option to pass a list of templates to `.render_template()` is now documented. ([#1045](https://github.com/simonw/datasette/issues/1045))\r\n- New `datasette.urls.static_plugins()` method. ([#1033](https://github.com/simonw/datasette/issues/1033))\r\n- `BLOB` column values can now be downloaded directly from the Datasette UI. ([#1036](https://github.com/simonw/datasette/issues/1036))\r\n- `.csv` exports now link to direct `BLOB` downloads. ([#1034](https://github.com/simonw/datasette/issues/1034))\r\n- `datasette -o` option now opens the most relevant page. ([#976](https://github.com/simonw/datasette/issues/976))\r\n- `datasette --cors` option now enables access to `/database.db` downloads. ([#1057](https://github.com/simonw/datasette/issues/1057))\r\n- Database file downloads now implement cascading permissions, so you can download a database if you have `view-database-download` permission even if you do not have permission to access the Datasette instance. ([#1058](https://github.com/simonw/datasette/issues/1058))\r\n- New documentation on [Designing URLs for your plugin](https://docs.datasette.io/en/latest/writing_plugins.html#writing-plugins-designing-urls). ([#1053](https://github.com/simonw/datasette/issues/1053))\r\n- New navigation menu plus a [menu_links(datasette, actor)](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-hook-menu-links) plugin hook to customize it. ([#1064](https://github.com/simonw/datasette/issues/1064))\r\n- [table_actions(datasette, actor, database, table)](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-hook-table-actions) plugin hook for the new table actions menu. ([#1066](https://github.com/simonw/datasette/issues/1066))", "published_at": "2020-10-30T05:37:34Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 197431109, "repo": "https://github.com/dogsheep/dogsheep-beta", "release": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.8", "date": "2020-09-18", "body_markdown": "- New `template_debug` configuration setting. #25\r\n- Templates now autoescape by default, use `{{ display.foo|safe }}` if you know you want HTML not to be escaped.\r\n- Fixed bug where the wrong template fragment could be used for a row. #24\r\n- Sort order is now persisted when you execute a new search. #23 ", "published_at": "2020-09-18T22:41:33Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-plugin\", \"datasette-tool\", \"dogsheep\", \"search\"]"} {"rowid": 207052882, "repo": "https://github.com/dogsheep/github-to-sqlite", "release": "https://github.com/dogsheep/github-to-sqlite/releases/tag/0.6", "date": "2019-11-11", "body_markdown": "- New `releases` command for fetching releases for a repo, #11\r\n- Repository topics are now fetched by the `repos` command\r\n- `github-to-sqlite repos` now accepts multiple usernames\r\n- Command now works without `--auth` file (using anonymous API calls), #9", "published_at": "2019-11-11T05:34:06Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"github-api\", \"sqlite\"]"} {"rowid": 207052882, "repo": "https://github.com/dogsheep/github-to-sqlite", "release": "https://github.com/dogsheep/github-to-sqlite/releases/tag/2.4", "date": "2020-07-18", "body_markdown": "- New `github-to-sqlite tags github.db simonw/datasette` command for importing all tags for a repository. #43", "published_at": "2020-07-18T22:35:27Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"github-api\", \"sqlite\"]"} {"rowid": 207052882, "repo": "https://github.com/dogsheep/github-to-sqlite", "release": "https://github.com/dogsheep/github-to-sqlite/releases/tag/2.3", "date": "2020-07-09", "body_markdown": "- New `github-to-sqlite repos my.db -r simonw/datasette` option for importing just specific repositories. #42", "published_at": "2020-07-09T23:28:07Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"github-api\", \"sqlite\"]"} {"rowid": 207052882, "repo": "https://github.com/dogsheep/github-to-sqlite", "release": "https://github.com/dogsheep/github-to-sqlite/releases/tag/2.6", "date": "2020-09-17", "body_markdown": "- New `github-to-sqlite get /gists` command for making authenticated API calls against any API path. #50 ", "published_at": "2020-09-17T03:55:03Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"github-api\", \"sqlite\"]"} {"rowid": 207052882, "repo": "https://github.com/dogsheep/github-to-sqlite", "release": "https://github.com/dogsheep/github-to-sqlite/releases/tag/2.5", "date": "2020-08-18", "body_markdown": "- 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", "published_at": "2020-08-18T15:08:20Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"github-api\", \"sqlite\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.58", "date": "2021-07-15", "body_markdown": "- New `datasette --uds /tmp/datasette.sock` option for binding Datasette to a Unix domain socket, see [proxy documentation](https://docs.datasette.io/en/stable/deploying.html#deploying-proxy). ([#1388](https://github.com/simonw/datasette/issues/1388))\r\n- `\"searchmode\": \"raw\"` table metadata option for defaulting a table to executing SQLite full-text search syntax without first escaping it, see [Advanced SQLite search queries](https://docs.datasette.io/en/stable/full_text_search.html#full-text-search-advanced-queries). ([#1389](https://github.com/simonw/datasette/issues/1389))\r\n- New plugin hook: [get_metadata(datasette, key, database, table)](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-get-metadata), for returning custom metadata for an instance, database or table. Thanks, Brandon Roberts! ([#1384](https://github.com/simonw/datasette/issues/1384))\r\n- New plugin hook: [skip_csrf(datasette, scope)](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-skip-csrf), for opting out of CSRF protection based on the incoming request. ([#1377](https://github.com/simonw/datasette/issues/1377))\r\n- The [menu_links()](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-menu-links), [table_actions()](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-table-actions) and [database_actions()](https://docs.datasette.io/en/stable/plugin_hooks.html#plugin-hook-database-actions) plugin hooks all gained a new optional `request` argument providing access to the current request. ([#1371](https://github.com/simonw/datasette/issues/1371))\r\n- Major performance improvement for Datasette faceting. ([#1394](https://github.com/simonw/datasette/issues/1394))\r\n- Improved documentation for [Running Datasette behind a proxy](https://docs.datasette.io/en/stable/deploying.html#deploying-proxy) to recommend using `ProxyPreservehost On` with Apache. ([#1387](https://github.com/simonw/datasette/issues/1387))\r\n- `POST` requests to endpoints that do not support that HTTP verb now return a 405 error.\r\n- `db.path` can now be provided as a `pathlib.Path` object, useful when writing unit tests for plugins. Thanks, Chris Amico. ([#1365](https://github.com/simonw/datasette/issues/1365))", "published_at": "2021-07-15T00:37:57Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 197431109, "repo": "https://github.com/dogsheep/dogsheep-beta", "release": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.3", "date": "2020-09-02", "body_markdown": "- New `category` column plus default `categories` table. #7", "published_at": "2020-09-02T21:07:44Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-plugin\", \"datasette-tool\", \"dogsheep\", \"search\"]"} {"rowid": 207052882, "repo": "https://github.com/dogsheep/github-to-sqlite", "release": "https://github.com/dogsheep/github-to-sqlite/releases/tag/2.8.3", "date": "2021-12-01", "body_markdown": "- Minor documentation and inline help improvements.", "published_at": "2021-12-01T19:37:19Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"github-api\", \"sqlite\"]"} {"rowid": 611552758, "repo": "https://github.com/dogsheep/apple-notes-to-sqlite", "release": "https://github.com/dogsheep/apple-notes-to-sqlite/releases/tag/0.1", "date": "2023-03-09", "body_markdown": "- Initial working version. `apple-notes-to-sqlite notes.db` dumps your notes out to a SQLite database. [#2](https://github.com/dogsheep/apple-notes-to-sqlite/issues/2)\r\n- `apple-notes-to-sqlite --dump` outputs them to standard output as newline-delimited JSON. [#3](https://github.com/dogsheep/apple-notes-to-sqlite/issues/3)", "published_at": "2023-03-09T05:12:12Z", "topics": "[\"apple-notes\", \"datasette\", \"datasette-tool\", \"dogsheep\", \"sqlite\"]"} {"rowid": 303218369, "repo": "https://github.com/dogsheep/evernote-to-sqlite", "release": "https://github.com/dogsheep/evernote-to-sqlite/releases/tag/0.1", "date": "2020-10-11", "body_markdown": "- Initial release, with support for importing ENEX files.", "published_at": "2020-10-11T21:47:39Z", "topics": "[\"datasette-io\", \"datasette-tool\", \"dogsheep\", \"evernote\", \"sqlite\"]"} {"rowid": 197431109, "repo": "https://github.com/dogsheep/dogsheep-beta", "release": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.4a0", "date": "2020-09-03", "body_markdown": "- Incomplete preview of the `/-/beta` search interface. #3 #9\r\n\r\n", "published_at": "2020-09-03T03:54:23Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-plugin\", \"datasette-tool\", \"dogsheep\", \"search\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.51.1", "date": "2020-11-01", "body_markdown": "- Improvements to the new [Binary data](https://docs.datasette.io/en/stable/binary_data.html#binary) documentation page.", "published_at": "2020-11-01T03:34:36Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 140912432, "repo": "https://github.com/simonw/sqlite-utils", "release": "https://github.com/simonw/sqlite-utils/releases/tag/3.25.1", "date": "2022-03-11", "body_markdown": "- Improved display of type information and parameters in the [API reference documentation](https://sqlite-utils.datasette.io/en/stable/reference.html). [#413](https://github.com/simonw/sqlite-utils/issues/413)", "published_at": "2022-03-11T18:35:41Z", "topics": "[\"cli\", \"click\", \"datasette\", \"datasette-io\", \"datasette-tool\", \"python\", \"sqlite\", \"sqlite-database\"]"} {"rowid": 206156866, "repo": "https://github.com/dogsheep/twitter-to-sqlite", "release": "https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.15", "date": "2019-11-09", "body_markdown": "- Import command no longer fails on empty files - #29\r\n- Fixed bug in `followers` command - #30\r\n- `following` table now has indexes - #28", "published_at": "2019-11-09T20:13:07Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"sqlite\", \"twitter\", \"twitter-api\"]"} {"rowid": 197431109, "repo": "https://github.com/dogsheep/dogsheep-beta", "release": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.4.1", "date": "2020-09-03", "body_markdown": "- Fixed support for [advanced FTS query syntax](https://www.sqlite.org/fts5.html#full_text_query_syntax). #13", "published_at": "2020-09-03T21:41:52Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-plugin\", \"datasette-tool\", \"dogsheep\", \"search\"]"} {"rowid": 303218369, "repo": "https://github.com/dogsheep/evernote-to-sqlite", "release": "https://github.com/dogsheep/evernote-to-sqlite/releases/tag/0.3.2", "date": "2021-08-26", "body_markdown": "- Fixed error when encountering `` documents that were not well-formed XML. [#13](https://github.com/dogsheep/evernote-to-sqlite/issues/13)", "published_at": "2021-08-26T19:02:47Z", "topics": "[\"datasette-io\", \"datasette-tool\", \"dogsheep\", \"evernote\", \"sqlite\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.29.1", "date": "2019-07-14", "body_markdown": "- Fixed bug with static mounts using relative paths which could lead to traversal exploits (#555) - thanks Abdussamet Kocak!\r\n\r\nhttps://datasette.readthedocs.io/en/stable/changelog.html#v0-29-1", "published_at": "2019-07-14T01:43:44Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 197431109, "repo": "https://github.com/dogsheep/dogsheep-beta", "release": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.7.1", "date": "2020-09-17", "body_markdown": "- Fixed bug with sort orders displayed for the timeline view. #22", "published_at": "2020-09-17T23:13:46Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-plugin\", \"datasette-tool\", \"dogsheep\", \"search\"]"} {"rowid": 205429375, "repo": "https://github.com/dogsheep/swarm-to-sqlite", "release": "https://github.com/dogsheep/swarm-to-sqlite/releases/tag/0.3.3", "date": "2021-01-18", "body_markdown": "- Fixed bug where tool could crash with an error about missing columns. #11", "published_at": "2021-01-18T04:36:03Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"foursquare\", \"foursquare-api\", \"sqlite\", \"swarm\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.52.3", "date": "2020-12-03", "body_markdown": "- Fixed bug where static assets would 404 for Datasette installed on ARM Amazon Linux. ([#1124](https://github.com/simonw/datasette/issues/1124>))", "published_at": "2020-12-03T19:08:29Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 197431109, "repo": "https://github.com/dogsheep/dogsheep-beta", "release": "https://github.com/dogsheep/dogsheep-beta/releases/tag/0.10.2", "date": "2021-06-13", "body_markdown": "- Fixed bug where searches consisting only of whitespace caused a server error. [#33](https://github.com/dogsheep/dogsheep-beta/issues/33)", "published_at": "2021-06-13T14:38:09Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-plugin\", \"datasette-tool\", \"dogsheep\", \"search\"]"} {"rowid": 197882382, "repo": "https://github.com/dogsheep/healthkit-to-sqlite", "release": "https://github.com/dogsheep/healthkit-to-sqlite/releases/tag/1.0.1", "date": "2021-08-20", "body_markdown": "- Fixed bug where `activity_summary` table could fail to be built with an error. [#19](https://github.com/dogsheep/healthkit-to-sqlite/issues/19)", "published_at": "2021-08-20T00:56:17Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"healthkit\", \"sqlite\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.47.2", "date": "2020-08-12", "body_markdown": "- 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))", "published_at": "2020-08-12T20:55:28Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 205429375, "repo": "https://github.com/dogsheep/swarm-to-sqlite", "release": "https://github.com/dogsheep/swarm-to-sqlite/releases/tag/0.3.4", "date": "2023-04-11", "body_markdown": "- Fixed an error in the `checkins_detail` view. [#15](https://github.com/dogsheep/swarm-to-sqlite/issues/15)", "published_at": "2023-04-11T03:18:16Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"foursquare\", \"foursquare-api\", \"sqlite\", \"swarm\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.49.1", "date": "2020-09-15", "body_markdown": "- Fixed a bug with writable canned queries that use magic parameters but accept no non-magic arguments. (#967)\r\n", "published_at": "2020-09-15T20:21:16Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.64.2", "date": "2023-03-08", "body_markdown": "- Fixed a bug with `datasette publish cloudrun` where deploys all used the same Docker image tag. This was mostly inconsequential as the service is deployed as soon as the image has been pushed to the registry, but could result in the incorrect image being deployed if two different deploys for two separate services ran at exactly the same time. [#2036](https://github.com/simonw/datasette/issues/2036)\r\n", "published_at": "2023-03-08T20:46:27Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.60.1", "date": "2022-01-21", "body_markdown": "- Fixed a bug where installation on Python 3.6 stopped working due to a change to an underlying dependency. This release can now be installed on Python 3.6, but is the last release of Datasette that will support anything less than Python 3.7. ([#1609](https://github.com/simonw/datasette/issues/1609))\r\n", "published_at": "2022-01-21T02:12:54Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 197882382, "repo": "https://github.com/dogsheep/healthkit-to-sqlite", "release": "https://github.com/dogsheep/healthkit-to-sqlite/releases/tag/1.0", "date": "2020-10-17", "body_markdown": "- Fixed a bug where export files generated in languages other than English failed to import. #11\r\n- CI now uses GitHub Actions", "published_at": "2020-10-17T21:17:34Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"healthkit\", \"sqlite\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.31.2", "date": "2019-11-13", "body_markdown": "- Fixed a bug where datasette publish heroku applications failed to start (#633)\r\n- Fix for datasette publish with just --source_url - thanks, Stanley Zheng (#572)\r\n- Deployments to Heroku now use Python 3.8.0 (#632)\r\n\r\nhttps://datasette.readthedocs.io/en/latest/changelog.html#v0-31-2", "published_at": "2019-11-13T17:38:59Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.61.1", "date": "2022-03-23", "body_markdown": "- Fixed a bug where databases with a different route from their name (as used by the [datasette-hashed-urls plugin](https://datasette.io/plugins/datasette-hashed-urls)) returned errors when executing custom SQL queries. ([#1682](https://github.com/simonw/datasette/issues/1682))", "published_at": "2022-03-23T20:31:09Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.63.3", "date": "2022-12-18", "body_markdown": "- Fixed a bug where `datasette --root`, when running in Docker, would only output the URL to sign in as root when the server shut down, not when it started up. ([#1958](https://github.com/simonw/datasette/issues/1958))\r\n- You no longer need to ensure `await datasette.invoke_startup()` has been called in order for Datasette to start correctly serving requests - this is now handled automatically the first time the server receives a request. This fixes a bug experienced when Datasette is served directly by an ASGI application server such as Uvicorn or Gunicorn. It also fixes a bug with the [datasette-gunicorn](https://datasette.io/plugins/datasette-gunicorn) plugin. ([#1955](https://github.com/simonw/datasette/issues/1955))", "published_at": "2022-12-18T03:10:52Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 140912432, "repo": "https://github.com/simonw/sqlite-utils", "release": "https://github.com/simonw/sqlite-utils/releases/tag/3.35.1", "date": "2023-09-09", "body_markdown": "- Fixed a bug where [table.transform()](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-transform) would sometimes re-assign the `rowid` values for a table rather than keeping them consistent across the operation. ([#592](https://github.com/simonw/sqlite-utils/issues/592))", "published_at": "2023-09-09T00:50:42Z", "topics": "[\"cli\", \"click\", \"datasette\", \"datasette-io\", \"datasette-tool\", \"python\", \"sqlite\", \"sqlite-database\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.63.1", "date": "2022-11-11", "body_markdown": "- Fixed a bug where Datasette's table filter form would not redirect correctly when run behind a proxy using the [base_url](https://docs.datasette.io/en/stable/settings.html#setting-base-url) setting. ([#1883](https://github.com/simonw/datasette/issues/1883))\r\n- SQL query is now shown wrapped in a `