{"rowid": 140912432, "repo": "https://github.com/simonw/sqlite-utils", "release": "https://github.com/simonw/sqlite-utils/releases/tag/3.1.1", "date": "2021-01-01", "body_markdown": "- Fixed failing test caused by `optimize` sometimes creating larger database files. ([#209](https://github.com/simonw/sqlite-utils/issues/209))\r\n- Documentation now lives on \r\n- README now includes `brew install sqlite-utils` installation method.", "published_at": "2021-01-01T23:57:07Z", "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.59.3", "date": "2021-11-20", "body_markdown": "- Fixed numerous bugs when running Datasette [behind a proxy](https://docs.datasette.io/en/stable/deploying.html#deploying-proxy) with a prefix URL path using the [base_url](https://docs.datasette.io/en/stable/settings.html#setting-base-url) setting. A live demo of this mode is now available at [datasette-apache-proxy-demo.datasette.io/prefix/](https://datasette-apache-proxy-demo.datasette.io/prefix/). ([#1519](https://github.com/simonw/datasette/issues/1519), [#838](https://github.com/simonw/datasette/issues/838))\r\n- `?column__arraycontains=` and `?column__arraynotcontains=` table parameters now also work against SQL views. ([#448](https://github.com/simonw/datasette/issues/448))\r\n- `?_facet_array=column` no longer returns incorrect counts if columns contain the same value more than once.", "published_at": "2021-11-20T23:41:33Z", "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.57.1", "date": "2021-06-08", "body_markdown": "- Fixed visual display glitch with global navigation menu. ([#1367](https://github.com/simonw/datasette/issues/1367))\r\n- No longer truncates the list of table columns displayed on the `/database` page. ([#1364](https://github.com/simonw/datasette/issues/1364))", "published_at": "2021-06-08T16:28:31Z", "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.52.2", "date": "2020-12-03", "body_markdown": "- Generated columns from SQLite 3.31.0 or higher are now correctly displayed. ([#1116](https://github.com/simonw/datasette/issues/1116))\r\n- Error message if you attempt to open a SpatiaLite database now suggests using `--load-extension=spatialite` if it detects that the extension is available in a common location. ([#1115](https://github.com/simonw/datasette/issues/1115))\r\n- `OPTIONS` requests against the `/database` page no longer raise a 500 error. ([#1100](https://github.com/simonw/datasette/issues/1100))\r\n- Databases larger than 32MB that are published to Cloud Run can now be downloaded. ([#749](https://github.com/simonw/datasette/issues/749))\r\n- Fix for misaligned cog icon on table and database pages. Thanks, Abdussamet Ko\u00e7ak. ([#1121](https://github.com/simonw/datasette/issues/1121))", "published_at": "2020-12-03T00:58:43Z", "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.22", "date": "2022-01-11", "body_markdown": "- New [CLI reference](https://sqlite-utils.datasette.io/en/stable/cli-reference.html#cli-reference) documentation page, listing the output of `--help` for every one of the CLI commands. ([#383](https://github.com/simonw/sqlite-utils/issues/383))\r\n- `sqlite-utils rows` now has `--limit` and `--offset` options for paginating through data. ([#381](https://github.com/simonw/sqlite-utils/issues/381))\r\n- `sqlite-utils rows` now has `--where` and `-p` options for filtering the table using a `WHERE` query, see [Returning all rows in a table](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-rows). ([#382](https://github.com/simonw/sqlite-utils/issues/382))", "published_at": "2022-01-11T23:49:28Z", "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.12", "date": "2021-06-25", "body_markdown": "- New [db.query(sql, params)](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-query) method, which executes a SQL query and returns the results as an iterator over Python dictionaries. ([#290](https://github.com/simonw/sqlite-utils/issues/290))\r\n- This project now uses `flake8` and has started to use `mypy`. ([#291](https://github.com/simonw/sqlite-utils/issues/291))\r\n- New documentation on [contributing](https://sqlite-utils.datasette.io/en/stable/contributing.html#contributing) to this project. ([#292](https://github.com/simonw/sqlite-utils/issues/292))", "published_at": "2021-06-25T18:00:18Z", "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.51a2", "date": "2020-10-30", "body_markdown": "- New [load_template(template, request, datasette)](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-hook-load-template) plugin hook. ([#1042](https://github.com/simonw/datasette/issues/1042))\r\n- New [debug-menu](https://docs.datasette.io/en/latest/authentication.html#permissions-debug-menu) permission. ([#1068](https://github.com/simonw/datasette/issues/1068))", "published_at": "2020-10-30T17:57:53Z", "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.28", "date": "2022-07-15", "body_markdown": "- New [table.duplicate(new_name)](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-duplicate) method for creating a copy of a table with a matching schema and row contents. Thanks, [David](https://github.com/davidleejy). ([#449](https://github.com/simonw/sqlite-utils/issues/449))\r\n- New `sqlite-utils duplicate data.db table_name new_name` CLI command for [Duplicating tables](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-duplicate-table). ([#454](https://github.com/simonw/sqlite-utils/issues/454))\r\n- `sqlite_utils.utils.rows_from_file()` is now a [documented API](https://sqlite-utils.datasette.io/en/stable/reference.html#reference-utils-rows-from-file). It can be used to read a sequence of dictionaries from a file-like object containing CSV, TSV, JSON or newline-delimited JSON. It can be passed an explicit format or can attempt to detect the format automatically. ([#443](https://github.com/simonw/sqlite-utils/issues/443))\r\n- `sqlite_utils.utils.TypeTracker` is now a documented API for detecting the likely column types for a sequence of string rows, see [Detecting column types using TypeTracker](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-typetracker). ([#445](https://github.com/simonw/sqlite-utils/issues/445))\r\n- `sqlite_utils.utils.chunks()` is now a documented API for [splitting an iterator into chunks](https://sqlite-utils.datasette.io/en/stable/reference.html#reference-utils-chunks). ([#451](https://github.com/simonw/sqlite-utils/issues/451))\r\n- `sqlite-utils enable-fts` now has a `--replace` option for replacing the existing FTS configuration for a table. ([#450](https://github.com/simonw/sqlite-utils/issues/450))\r\n- The `create-index`, `add-column` and `duplicate` commands all now take a `--ignore` option for ignoring errors should the database not be in the right state for them to operate. ([#450](https://github.com/simonw/sqlite-utils/issues/450))", "published_at": "2022-07-15T23:02:45Z", "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.22", "date": "2020-10-16", "body_markdown": "- New `--encoding` option for processing CSV and TSV files that use a non-utf-8 encoding, for both the `insert` and `update` commands. ([#182](https://github.com/simonw/sqlite-utils/issues/182))\r\n- The `--load-extension` option is now available to many more commands. ([#137](https://github.com/simonw/sqlite-utils/issues/137))\r\n- `--load-extension=spatialite` can be used to load SpatiaLite from common installation locations, if it is available. ([#136](https://github.com/simonw/sqlite-utils/issues/136))\r\n- Tests now also run against Python 3.9. ([#184](https://github.com/simonw/sqlite-utils/issues/184))\r\n- Passing `pk=[\"id\"]` now has the same effect as passing `pk=\"id\"`. ([#181](https://github.com/simonw/sqlite-utils/issues/181))", "published_at": "2020-10-16T19:31:45Z", "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.11", "date": "2020-07-08", "body_markdown": "- New `--truncate` option to `sqlite-utils insert`, and `truncate=True` argument to `.insert_all()`. Thanks, Thomas Sibley. ([#118](https://github.com/simonw/sqlite-utils/pull/118))\r\n- The `sqlite-utils query` command now runs updates in a transaction. Thanks, Thomas Sibley. ([#120](https://github.com/simonw/sqlite-utils/pull/120))", "published_at": "2020-07-08T17:36:45Z", "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.15", "date": "2020-08-10", "body_markdown": "- New `db.enable_wal()` and `db.disable_wal()` methods for enabling and disabling [Write-Ahead Logging](https://www.sqlite.org/wal.html) for a database file - see [WAL mode](https://sqlite-utils.readthedocs.io/en/stable//python-api.html#python-api-wal) in the Python API documentation.\r\n- Also `sqlite-utils enable-wal file.db` and `sqlite-utils disable-wal file.db` commands for doing the same thing on the command-line, see [WAL mode (CLI)](https://sqlite-utils.readthedocs.io/en/stable/cli.html#cli-wal). ([#132](https://github.com/simonw/sqlite-utils/issues/132))", "published_at": "2020-08-10T19:07:27Z", "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.26", "date": "2022-04-13", "body_markdown": "- New `errors=r.IGNORE/r.SET_NULL` parameter for the `r.parsedatetime()` and `r.parsedate()` [convert recipes](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-convert-recipes). ([#416](https://github.com/simonw/sqlite-utils/issues/416))\r\n- Fixed a bug where `--multi` could not be used in combination with `--dry-run` for the [convert](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-convert) command. ([#415](https://github.com/simonw/sqlite-utils/issues/415))\r\n- New documentation: [Using a convert() function to execute initialization](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-convert-complex). ([#420](https://github.com/simonw/sqlite-utils/issues/420))\r\n- More robust detection for whether or not `deterministic=True` is supported. ([#425](https://github.com/simonw/sqlite-utils/issues/425))", "published_at": "2022-04-13T22:53:36Z", "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.25", "date": "2022-03-02", "body_markdown": "- New `hash_id_columns=` parameter for creating a primary key that's a hash of the content of specific columns - see [Setting an ID based on the hash of the row contents](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-hash) for details. ([#343](https://github.com/simonw/sqlite-utils/issues/343))\r\n- New [db.sqlite_version](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-sqlite-version) property, returning a tuple of integers representing the version of SQLite, for example `(3, 38, 0)`.\r\n- Fixed a bug where [register_function(deterministic=True)](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-register-function) caused errors on versions of SQLite prior to 3.8.3. ([#408](https://github.com/simonw/sqlite-utils/issues/408))\r\n- New documented [hash_record(record, keys=...)](https://sqlite-utils.datasette.io/en/stable/reference.html#reference-utils-hash-record) function.", "published_at": "2022-03-02T06:35:18Z", "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.19", "date": "2020-09-20", "body_markdown": "- New `sqlite-utils add-foreign-keys` command for [Adding multiple foreign keys at once](https://sqlite-utils.readthedocs.io/en/stable/cli.html#cli-add-foreign-keys). ([#157](https://github.com/simonw/sqlite-utils/issues/157))\r\n- New `table.enable_fts(..., replace=True)` argument for replacing an existing FTS table with a new configuration. ([#160](https://github.com/simonw/sqlite-utils/issues/160))\r\n- New `table.add_foreign_key(..., ignore=True)` argument for ignoring a foreign key if it already exists. ([#112](https://github.com/simonw/sqlite-utils/issues/112))", "published_at": "2020-09-20T22:24:04Z", "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.9", "date": "2020-05-11", "body_markdown": "- New `sqlite-utils drop-table` command, see [Dropping tables](https://sqlite-utils.readthedocs.io/en/2.9/cli.html#cli-drop-table). ([#111](https://github.com/simonw/sqlite-utils/issues/111))\r\n- New `sqlite-utils drop-view` command, see [Dropping views](https://sqlite-utils.readthedocs.io/en/2.9/cli.html#cli-drop-view).\r\n- Python `decimal.Decimal` objects are now stored as `FLOAT`. ([#110](https://github.com/simonw/sqlite-utils/issues/110))", "published_at": "2020-05-11T01:57:11Z", "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.8", "date": "2021-06-03", "body_markdown": "- New `sqlite-utils indexes` command to list indexes in a database, see [Listing indexes](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-indexes). ([#263](https://github.com/simonw/sqlite-utils/issues/263))\r\n- `table.xindexes` introspection property returning more details about that table's indexes, see [.xindexes](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-introspection-xindexes). ([#261](https://github.com/simonw/sqlite-utils/issues/261))", "published_at": "2021-06-03T05:17:33Z", "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.11", "date": "2021-06-20", "body_markdown": "- New `sqlite-utils memory data.csv --schema` option, for outputting the schema of the in-memory database generated from one or more files. See [--schema, --dump and --save](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-memory-schema-dump-save). ([#288](https://github.com/simonw/sqlite-utils/issues/288))\r\n- Added [installation instructions](https://sqlite-utils.datasette.io/en/stable/installation.html#installation). ([#286](https://github.com/simonw/sqlite-utils/issues/286))", "published_at": "2021-06-20T18:53:09Z", "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.9", "date": "2021-06-12", "body_markdown": "- New `sqlite-utils schema` command showing the full SQL schema for a database, see [Showing the schema (CLI)](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-schema). ([#268](https://github.com/simonw/sqlite-utils/issues/268))\r\n- `db.schema` introspection property exposing the same feature to the Python library, see [Showing the schema (Python library)](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-schema).", "published_at": "2021-06-12T02:08:03Z", "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.7", "date": "2021-05-29", "body_markdown": "- New `table.pks_and_rows_where()` method returning `(primary_key, row_dictionary)` tuples - see [Listing rows with their primary keys](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-pks-and-rows-where). ([#240](https://github.com/simonw/sqlite-utils/issues/240))\r\n- Fixed bug with *table.add_foreign_key()* against columns containing spaces. ([#238](https://github.com/simonw/sqlite-utils/issues/238))\r\n- `table_or_view.drop(ignore=True)` option for avoiding errors if the table or view does not exist. ([#237](https://github.com/simonw/sqlite-utils/issues/237))\r\n- `sqlite-utils drop-view --ignore` and `sqlite-utils drop-table --ignore` options. ([#237](https://github.com/simonw/sqlite-utils/issues/237))\r\n- Fixed a bug with inserts of nested JSON containing non-ascii strings - thanks, Dylan Wu. ([#257](https://github.com/simonw/sqlite-utils/issues/257))\r\n- Suggest `--alter` if an error occurs caused by a missing column. ([#259](https://github.com/simonw/sqlite-utils/issues/259))\r\n- Support creating indexes with columns in descending order, see [API documentation](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-create-index) and [CLI documentation](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-create-index). ([#260](https://github.com/simonw/sqlite-utils/issues/260))\r\n- Correctly handle CSV files that start with a UTF-8 BOM. ([#250](https://github.com/simonw/sqlite-utils/issues/250))", "published_at": "2021-05-29T05:49:59Z", "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.50a0", "date": "2020-10-01", "body_markdown": "- New column action menu - table columns now show a cog icon which provides a contextual menu for that column. ([#981](https://github.com/simonw/datasette/issues/981))\r\n- New `datasette -o` option which opens your browser as soon as Datasette starts up. ([#970](https://github.com/simonw/datasette/issues/970)\r\n- `sqlite3.enable_callback_tracebacks(True)` so errors in custom SQL functions will now display tracebacks. ([#891](https://github.com/simonw/datasette/issues/891))\r\n- Fixed two rendering bugs with column headers in portrait mobile view. ([#978](https://github.com/simonw/datasette/issues/978), [#980](https://github.com/simonw/datasette/issues/980))", "published_at": "2020-10-01T23:35:54Z", "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.1", "date": "2020-12-13", "body_markdown": "- New command: `sqlite-utils analyze-tables my.db` outputs useful information about the table columns in the database, such as the number of distinct values and how many rows are null. See [Analyzing tables](https://sqlite-utils.readthedocs.io/en/stable/cli.html#cli-analyze-tables) for documentation. ([#207](https://github.com/simonw/sqlite-utils/issues/207))\r\n- New `table.analyze_column(column)` Python method used by the `analyze-tables` command - see [Analyzing a column](https://sqlite-utils.readthedocs.io/en/stable/python-api.html#python-api-analyze-column).\r\n- The `table.update()` method now correctly handles values that should be stored as JSON. Thanks, Andreas Madsack. ([#204](https://github.com/simonw/sqlite-utils/pull/204))", "published_at": "2020-12-13T07:31:40Z", "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.60a0", "date": "2021-12-17", "body_markdown": "- New plugin hook: [filters_from_request(request, database, table, datasette)](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-hook-filters-from-request), which runs on the table page and can be used to support new custom query string parameters that modify the SQL query. ([#473](https://github.com/simonw/datasette/issues/473))\r\n- The number of unique values in a facet is now always displayed. Previously it was only displayed if the user specified `?_facet_size=max`. ([#1556](https://github.com/simonw/datasette/issues/1556))\r\n- Fixed bug where `?_facet_array=tags&_facet=tags` would only display one of the two selected facets. ([#625](https://github.com/simonw/datasette/issues/625))\r\n- Facets of type `date` or `array` can now be configured in `metadata.json`, see [Facets in metadata.json](https://docs.datasette.io/en/latest/facets.html#facets-metadata). Thanks, David Larlet. ([#1552](https://github.com/simonw/datasette/issues/1552))\r\n- New `?_nosuggest=1` parameter for table views, which disables facet suggestion. ([#1557](https://github.com/simonw/datasette/issues/1557))\r\n- Label columns detected for foreign keys are now case-insensitive, so `Name` or `TITLE` will be detected in the same way as `name` or `title`. ([#1544](https://github.com/simonw/datasette/issues/1544))\r\n- The query string variables exposed by `request.args` will now include blank strings for arguments such as `foo` in `?foo=&bar=1` rather than ignoring those parameters entirely. ([#1551](https://github.com/simonw/datasette/issues/1551))", "published_at": "2021-12-17T19:15:38Z", "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.58a1", "date": "2021-06-24", "body_markdown": "- New plugin hook: [skip_csrf(datasette, scope)](https://docs.datasette.io/en/latest//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- `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-06-24T16:29:09Z", "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.15.1", "date": "2021-08-10", "body_markdown": "- Python library now includes type annotations on almost all of the methods, plus detailed docstrings describing each one. ([#311](https://github.com/simonw/sqlite-utils/issues/311))\r\n- New [API Reference](https://sqlite-utils.datasette.io/en/stable/reference.html) documentation page, powered by those docstrings.\r\n- Fixed bug where `.add_foreign_keys()` failed to raise an error if called against a `View`. ([#313](https://github.com/simonw/sqlite-utils/issues/313))\r\n- Fixed bug where `.delete_where()` returned a `[]` instead of returning `self` if called against a non-existant table. ([#315](https://github.com/simonw/sqlite-utils/issues/315))", "published_at": "2021-08-10T23:55:38Z", "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.61a0", "date": "2022-03-20", "body_markdown": "- Removed hashed URL mode from Datasette. The new `datasette-hashed-urls` plugin can be used to achieve the same result, see [datasette-hashed-urls](https://docs.datasette.io/en/latest/performance.html#performance-hashed-urls) for details. ([#1661](https://github.com/simonw/datasette/issues/1661))\r\n- Databases can now have a custom path within the Datasette instance that is indpendent of the database name, using the `db.route` property. ([#1668](https://github.com/simonw/datasette/issues/1668))\r\n- URLs within Datasette now use a different encoding scheme for tables or databases that include \"special\" characters outside of the range of `a-zA-Z0-9_-`. This scheme is explained here: [Tilde encoding](https://docs.datasette.io/en/latest/internals.html#internals-tilde-encoding). ([#1657](https://github.com/simonw/datasette/issues/1657))\r\n- Table and row HTML pages now include a `` element and return a `Link: URL; rel=\"alternate\"; type=\"application/json+datasette\"` HTTP header pointing to the JSON version of those pages. ([#1533](https://github.com/simonw/datasette/issues/1533))\r\n- `Access-Control-Expose-Headers: Link` is now added to the CORS headers, allowing remote JavaScript to access that header.\r\n- Canned queries are now shown at the top of the database page, directly below the SQL editor. Previously they were shown at the bottom, below the list of tables. ([#1612](https://github.com/simonw/datasette/issues/1612))\r\n- Datasette now has a default favicon. ([#1603](https://github.com/simonw/datasette/issues/1603))\r\n- `sqlite_stat` tables are now hidden by default. ([#1587](https://github.com/simonw/datasette/issues/1587))\r\n- SpatiaLite tables `data_licenses`, `KNN` and `KNN2` are now hidden by default. ([#1601](https://github.com/simonw/datasette/issues/1601))\r\n- Python 3.6 is no longer supported. ([#1577](https://github.com/simonw/datasette/issues/1577))\r\n- Tests now run against Python 3.11-dev. ([#1621](https://github.com/simonw/datasette/issues/1621))\r\n- Fixed bug where [custom pages](https://docs.datasette.io/en/latest/custom_templates.html#custom-pages) did not work on Windows. Thanks, Robert Christie. ([#1545](https://github.com/simonw/datasette/issues/1545))\r\n- SQL query tracing mechanism now works for queries executed in `asyncio` sub-tasks, such as those created by `asyncio.gather()`. ([#1576](https://github.com/simonw/datasette/issues/1576))\r\n- [datasette.tracer](https://docs.datasette.io/en/latest/internals.html#internals-tracer) mechanism is now documented.\r\n- Common Datasette symbols can now be imported directly from the top-level `datasette` package, see [Import shortcuts](https://docs.datasette.io/en/latest/internals.html#internals-shortcuts). Those symbols are `Response`, `Forbidden`, `NotFound`, `hookimpl`, `actor_matches_allow`. ([#957](https://github.com/simonw/datasette/issues/957))\r\n- `/-/versions` page now returns additional details for libraries used by SpatiaLite. ([#1607](https://github.com/simonw/datasette/issues/1607))\r\n- Documentation now links to the [Datasette Tutorials](https://datasette.io/tutorials).\r\n- Datasette will now also look for SpatiaLite in `/opt/homebrew` - thanks, Dan Peterson. ([#1649](https://github.com/simonw/datasette/pull/1649))\r\n- Datasette is now covered by a [Code of Conduct](https://github.com/simonw/datasette/blob/main/CODE_OF_CONDUCT.md). ([#1654](https://github.com/simonw/datasette/issues/1654))", "published_at": "2022-03-20T01:16:41Z", "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.52.4", "date": "2020-12-05", "body_markdown": "- Show [pysqlite3](https://github.com/coleifer/pysqlite3) version on `/-/versions`, if installed. ([#1125](https://github.com/simonw/datasette/issues/1125))\r\n- Errors output by Datasette (e.g. for invalid SQL queries) now go to `stderr`, not `stdout`. ([#1131](https://github.com/simonw/datasette/issues/1131))\r\n- Fix for a startup error on windows caused by unnecessary `from os import EX_CANTCREAT` - thanks, Abdussamet Ko\u00e7ak. ([#1094](https://github.com/simonw/datasette/issues/1094))", "published_at": "2020-12-05T19:42:57Z", "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.24", "date": "2022-02-16", "body_markdown": "- SpatiaLite helpers for the `sqlite-utils` command-line tool - thanks, Chris Amico. ([#398](https://github.com/simonw/sqlite-utils/issues/398))\r\n - [sqlite-utils create-database](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-create-database) `--init-spatialite` option for initializing SpatiaLite on a newly created database.\r\n - [sqlite-utils add-geometry-column](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-spatialite) command for adding geometry columns.\r\n - [sqlite-utils create-spatial-index](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-spatialite-indexes) command for adding spatial indexes.\r\n- `db[table].create(..., if_not_exists=True)` option for [creating a table](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-explicit-create) only if it does not already exist. ([#397](https://github.com/simonw/sqlite-utils/issues/397))\r\n- `Database(memory_name=\"my_shared_database\")` parameter for creating a [named in-memory database](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-connect) that can be shared between multiple connections. ([#405](https://github.com/simonw/sqlite-utils/issues/405))\r\n- Documentation now describes [how to add a primary key to a rowid table](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-transform-table-add-primary-key-to-rowid) using `sqlite-utils transform`. ([#403](https://github.com/simonw/sqlite-utils/issues/403))", "published_at": "2022-02-16T01:41:50Z", "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.14", "date": "2020-08-01", "body_markdown": "- The [insert-files command](https://sqlite-utils.readthedocs.io/en/stable/cli.html#cli-insert-files) can now read from standard input: `cat dog.jpg | sqlite-utils insert-files dogs.db pics - --name=dog.jpg`. ([#127](https://github.com/simonw/sqlite-utils/issues/127))\r\n- You can now specify a full-text search tokenizer using the new `tokenize=` parameter to [enable_fts()](https://sqlite-utils.readthedocs.io/en/stable/python-api.html#python-api-fts). This means you can enable Porter stemming on a table by running `db[\"articles\"].enable_fts([\"headline\", \"body\"], tokenize=\"porter\")`. ([#130](https://github.com/simonw/sqlite-utils/issues/130))\r\n- You can also set a custom tokenizer using the [sqlite-utils enable-fts](https://sqlite-utils.readthedocs.io/en/stable/cli.html#cli-fts) CLI command, via the new `--tokenize` option.", "published_at": "2020-08-01T21:00:31Z", "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.58a0", "date": "2021-06-10", "body_markdown": "- The [menu_links()](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-hook-menu-links), [table_actions()](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-hook-table-actions) and [database_actions()](https://docs.datasette.io/en/latest/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))", "published_at": "2021-06-10T04:52:45Z", "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.59a1", "date": "2021-08-09", "body_markdown": "- The [render_cell()](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-hook-render-cell) plugin hook can now return an awaitable function. This means the hook can execute SQL queries. ([#1425](https://github.com/simonw/datasette/issues/1425))", "published_at": "2021-08-09T01:14:06Z", "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.17", "date": "2021-08-24", "body_markdown": "- The [sqlite-utils memory](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-memory) command has a new `--analyze` option, which runs the equivalent of the [analyze-tables](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-analyze-tables) command directly against the in-memory database created from the incoming CSV or JSON data. ([#320](https://github.com/simonw/sqlite-utils/issues/320))\r\n- [sqlite-utils insert-files](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-insert-files) now has the ability to insert file contents in to `TEXT` columns in addition to the default `BLOB`. Pass the `--text` option or use `content_text` as a column specifier. ([#319](https://github.com/simonw/sqlite-utils/issues/319))", "published_at": "2021-08-24T23:42:22Z", "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.19", "date": "2021-11-21", "body_markdown": "- The [table.lookup() method](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-lookup-tables) now accepts keyword arguments that match those on the underlying `table.insert()` method: `foreign_keys=`, `column_order=`, `not_null=`, `defaults=`, `extracts=`, `conversions=` and `columns=`. You can also now pass `pk=` to specify a different column name to use for the primary key. ([#342](https://github.com/simonw/sqlite-utils/issues/342))", "published_at": "2021-11-21T04:42:24Z", "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.47.3", "date": "2020-08-15", "body_markdown": "- 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))", "published_at": "2020-08-15T21:03:58Z", "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.3", "date": "2021-01-18", "body_markdown": "- The `table.m2m()` method now accepts an optional `alter=True` argument to specify that any missing columns should be added to the referenced table. See [Working with many-to-many relationships](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-m2m). ([#222](https://github.com/simonw/sqlite-utils/issues/222))", "published_at": "2021-01-18T04:29: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/3.16", "date": "2021-08-18", "body_markdown": "- Type signatures added to more methods, including `table.resolve_foreign_keys()`, `db.create_table_sql()`, `db.create_table()` and `table.create()`. ([#314](https://github.com/simonw/sqlite-utils/issues/314))\r\n- New `db.quote_fts(value)` method, see [Quoting characters for use in search](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-quote-fts) - thanks, Mark Neumann. ([#246](https://github.com/simonw/sqlite-utils/issues/246))\r\n- `table.search()` now accepts an optional `quote=True` parameter. ([#296](https://github.com/simonw/sqlite-utils/issues/296))\r\n- CLI command `sqlite-utils search` now accepts a `--quote` option. ([#296](https://github.com/simonw/sqlite-utils/issues/296))\r\n- Fixed bug where `--no-headers` and `--tsv` options to [sqlite-utils insert](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-insert-csv-tsv) could not be used together. ([#295](https://github.com/simonw/sqlite-utils/issues/295))\r\n- Various small improvements to [API reference](https://sqlite-utils.datasette.io/en/stable/reference.html#reference) documentation.", "published_at": "2021-08-18T22:37:55Z", "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.49a1", "date": "2020-09-14", "body_markdown": "- Upgraded [CodeMirror](https://codemirror.net/) to 5.57.0. ([#948](https://github.com/simonw/datasette/issues/948))\r\n- Upgraded code style to Black 20.8b1. ([#958](https://github.com/simonw/datasette/issues/958))\r\n- New `datasette --pdb` option. ([#962](https://github.com/simonw/datasette/issues/962))\r\n- `datasette --get` exit code now reflects the internal HTTP status code. ([#947](https://github.com/simonw/datasette/issues/947))\r\n- Fixed bug where selected facets were not correctly persisted in hidden form fields on the table page. ([#963](https://github.com/simonw/datasette/issues/963))\r\n- New mechanism for defining page templates with custom path parameters. ([#944](https://github.com/simonw/datasette/issues/944))", "published_at": "2020-09-14T02:48:19Z", "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.49", "date": "2020-09-14", "body_markdown": "- Writable canned queries now expose a JSON API, see [JSON API for writable canned queries](https://docs.datasette.io/en/stable/sql_queries.html#canned-queries-json-api). ([#880](https://github.com/simonw/datasette/issues/880))\r\n- New mechanism for defining page templates with custom path parameters - a template file called `pages/about/{slug}.html` will be used to render any requests to `/about/something`. See [Path parameters for pages](https://docs.datasette.io/en/stable/custom_templates.html#custom-pages-parameters). ([#944](https://github.com/simonw/datasette/issues/944))\r\n- `register_output_renderer()` render functions can now return a `Response`. ([#953](https://github.com/simonw/datasette/issues/953))\r\n- New `--upgrade` option for `datasette install`. ([#945](https://github.com/simonw/datasette/issues/945))\r\n- New `datasette --pdb` option. ([#962](https://github.com/simonw/datasette/issues/962))\r\n- `datasette --get` exit code now reflects the internal HTTP status code. ([#947](https://github.com/simonw/datasette/issues/947))\r\n- New `raise_404()` template function for returning 404 errors. ([#964](https://github.com/simonw/datasette/issues/964))\r\n- `datasette publish heroku` now deploys using Python 3.8.5\r\n- Upgraded [CodeMirror](https://codemirror.net/) to 5.57.0. ([#948](https://github.com/simonw/datasette/issues/948))\r\n- Upgraded code style to Black 20.8b1. ([#958](https://github.com/simonw/datasette/issues/958))\r\n- Fixed bug where selected facets were not correctly persisted in hidden form fields on the table page. ([#963](https://github.com/simonw/datasette/issues/963))\r\n- Renamed the default error template from `500.html` to `error.html`.\r\n- Custom error pages are now documented, see [Custom error pages](https://docs.datasette.io/en/stable/custom_templates.html#custom-pages-errors). ([#965](https://github.com/simonw/datasette/issues/965))", "published_at": "2020-09-14T21:40:11Z", "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.59a0", "date": "2021-08-07", "body_markdown": "- [register_routes(datasette)](https://docs.datasette.io/en/latest/plugin_hooks.html#plugin-register-routes) plugin hook now accepts an optional `datasette` argument. ([#1404](https://github.com/simonw/datasette/issues/1404))\r\n- New `hide_sql` canned query option for defaulting to hiding the SQL quey used by a canned query, see [Additional canned query options](https://docs.datasette.io/en/latest/sql_queries.html#canned-queries-options). ([#1422](https://github.com/simonw/datasette/issues/1422))\r\n- New `--cpu` option for [datasette publish cloudrun](https://docs.datasette.io/en/latest/publish.html#publish-cloud-run). ([#1420](https://github.com/simonw/datasette/issues/1420))\r\n- If [Rich](https://github.com/willmcgugan/rich) is installed in the same virtual environment as Datasette, it will be used to provide enhanced display of error tracebacks on the console. ([#1416](https://github.com/simonw/datasette/issues/1416))\r\n- `datasette.utils` [parse_metadata(content)](https://docs.datasette.io/en/latest/internals.html#internals-utils-parse-metadata) function, used by the new [datasette-remote-metadata plugin](https://datasette.io/plugins/datasette-remote-metadata), is now a documented API. ([#1405](https://github.com/simonw/datasette/issues/1405))", "published_at": "2021-08-07T05:42:25Z", "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.17.1", "date": "2021-09-22", "body_markdown": "- [sqlite-utils memory](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-memory) now works if files passed to it share the same file name. ([#325](https://github.com/simonw/sqlite-utils/issues/325))\r\n- [sqlite-utils query](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-query) now returns `[]` in JSON mode if no rows are returned. ([#328](https://github.com/simonw/sqlite-utils/issues/328))", "published_at": "2021-09-22T20:51:04Z", "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.16", "date": "2020-08-21", "body_markdown": "- `--load-extension` option for `sqlite-utils query` for loading SQLite extensions. ([#134](https://github.com/simonw/sqlite-utils/issues/134))\r\n- New `sqlite_utils.utils.find_spatialite()` function for finding SpatiaLite in common locations. ([#135](https://github.com/simonw/sqlite-utils/issues/135))", "published_at": "2020-08-21T21:05:51Z", "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.16.1", "date": "2020-08-28", "body_markdown": "- `insert_all(..., alter=True)` now works for columns introduced after the first 100 records. Thanks, Simon Wiles! ([#139](https://github.com/simonw/sqlite-utils/issues/139))\r\n- Continuous Integration is now powered by GitHub Actions. ([#143](https://github.com/simonw/sqlite-utils/issues/143))", "published_at": "2020-08-28T22:47:02Z", "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.49a0", "date": "2020-08-28", "body_markdown": "- `register_output_renderer()` render functions can now return a `Response`. ([#953](https://github.com/simonw/datasette/issues/953))\r\n- New `--upgrade` option for `datasette install`. ([#945](https://github.com/simonw/datasette/issues/945))\r\n- `datasette publish heroku` now deploys using Python 3.8.5", "published_at": "2020-08-28T23:18:09Z", "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.4", "date": "2021-02-06", "body_markdown": "- `sqlite-utils insert --csv` now accepts optional `--delimiter` and `--quotechar` options. See [Alternative delimiters and quote characters](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-insert-csv-tsv-delimiter). ([#223](https://github.com/simonw/sqlite-utils/issues/223))", "published_at": "2021-02-06T01:38:26Z", "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.15", "date": "2021-08-09", "body_markdown": "- `sqlite-utils insert --flatten` option for [flattening nested JSON objects](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-inserting-data-flatten) to create tables with column names like `topkey_nestedkey`. ([#310](https://github.com/simonw/sqlite-utils/issues/310))\r\n- Fixed several spelling mistakes in the documentation, spotted [using codespell](https://til.simonwillison.net/python/codespell).\r\n- Errors that occur while using the `sqlite-utils` CLI tool now show the responsible SQL and query parameters, if possible. ([#309](https://github.com/simonw/sqlite-utils/issues/309))", "published_at": "2021-08-09T22:43:16Z", "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.5", "date": "2021-02-14", "body_markdown": "- `sqlite-utils insert --sniff` option for detecting the delimiter and quote character used by a CSV file, see [Alternative delimiters and quote characters](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-insert-csv-tsv-delimiter). ([#230](https://github.com/simonw/sqlite-utils/issues/230))\r\n- The `table.rows_where()`, `table.search()` and `table.search_sql()` methods all now take optional `offset=` and `limit=` arguments. ([#231](https://github.com/simonw/sqlite-utils/issues/231))\r\n- New `--no-headers` option for `sqlite-utils insert --csv` to handle CSV files that are missing the header row, see [CSV files without a header row](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-insert-csv-tsv-no-header). ([#228](https://github.com/simonw/sqlite-utils/issues/228))\r\n- Fixed bug where inserting data with extra columns in subsequent chunks would throw an error. Thanks [@nieuwenhoven](https://github.com/nieuwenhoven) for the fix. ([#234](https://github.com/simonw/sqlite-utils/issues/234))\r\n- Fixed bug importing CSV files with columns containing more than 128KB of data. ([#229](https://github.com/simonw/sqlite-utils/issues/229))\r\n- Test suite now runs in CI against Ubuntu, macOS and Windows. Thanks [@nieuwenhoven](https://github.com/nieuwenhoven) for the Windows test fixes. ([#232](https://github.com/simonw/sqlite-utils/issues/232))", "published_at": "2021-02-14T22:44:21Z", "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.20", "date": "2022-01-06", "body_markdown": "- `sqlite-utils insert ... --lines` to insert the lines from a file into a table with a single `line` column, see [Inserting unstructured data with --lines and --text](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-insert-unstructured).\r\n- `sqlite-utils insert ... --text` to insert the contents of the file into a table with a single `text` column and a single row.\r\n- `sqlite-utils insert ... --convert` allows a Python function to be provided that will be used to convert each row that is being inserted into the database. See [Applying conversions while inserting data](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-insert-convert), including details on special behavior when combined with `--lines` and `--text`. ([#356](https://github.com/simonw/sqlite-utils/issues/356))\r\n- `sqlite-utils convert` now accepts a code value of `-` to read code from standard input. ([#353](https://github.com/simonw/sqlite-utils/issues/353))\r\n- `sqlite-utils convert` also now accepts code that defines a named `convert(value)` function, see [Converting data in columns](https://sqlite-utils.datasette.io/en/stable/cli.html#cli-convert).\r\n- `db.supports_strict` property showing if the database connection supports [SQLite strict tables](https://www.sqlite.org/stricttables.html).\r\n- `table.strict` property (see [.strict](https://sqlite-utils.datasette.io/en/stable/python-api.html#python-api-introspection-strict)) indicating if the table uses strict mode. ([#344](https://github.com/simonw/sqlite-utils/issues/344))\r\n- Fixed bug where `sqlite-utils upsert ... --detect-types` ignored the `--detect-types` option. ([#362](https://github.com/simonw/sqlite-utils/issues/362))", "published_at": "2022-01-06T06:57:09Z", "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.13", "date": "2021-07-24", "body_markdown": "- `sqlite-utils schema my.db table1 table2` command now accepts optional table names. ([#299](https://github.com/simonw/sqlite-utils/issues/299))\r\n- `sqlite-utils memory --help` now describes the `--schema` option.", "published_at": "2021-07-24T22:17:47Z", "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.21", "date": "2020-09-24", "body_markdown": "- `table.extract()` and `sqlite-utils extract` now apply much, much faster - one example operation reduced from twelve minutes to just four seconds! ([#172](https://github.com/simonw/sqlite-utils/issues/172))\r\n- `sqlite-utils extract` no longer shows a progress bar, because it's fast enough not to need one.\r\n- New `column_order=` option for `table.transform()` which can be used to alter the order of columns in a table. ([#175](https://github.com/simonw/sqlite-utils/issues/175))\r\n- `sqlite-utils transform --column-order=` option (with a `-o` shortcut) for changing column order. ([#176](https://github.com/simonw/sqlite-utils/issues/176))\r\n- The `table.transform(drop_foreign_keys=)` parameter and the `sqlite-utils transform --drop-foreign-key` option have changed. They now accept just the name of the column rather than requiring all three of the column, other table and other column. This is technically a backwards-incompatible change but I chose not to bump the major version number because the transform feature is so new. ([#177](https://github.com/simonw/sqlite-utils/issues/177))\r\n- The table `.disable_fts()`, `.rebuild_fts()`, `.delete()`, `.delete_where()` and `.add_missing_columns()` methods all now `return self`, which means they can be chained together with other table operations.", "published_at": "2020-09-24T16:45:44Z", "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.23", "date": "2020-10-28", "body_markdown": "- `table.m2m(other_table, records)` method now takes any iterable, not just a list or tuple. Thanks, Adam Wolf. ([#189](https://github.com/simonw/sqlite-utils/pull/189))\r\n- `sqlite-utils insert` now displays a progress bar for CSV or TSV imports. ([#173](https://github.com/simonw/sqlite-utils/issues/173))\r\n- New `@db.register_function(deterministic=True)` option for registering deterministic SQLite functions in Python 3.8 or higher. ([#191](https://github.com/simonw/sqlite-utils/issues/191))", "published_at": "2020-10-28T21:38:54Z", "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.18", "date": "2020-09-08", "body_markdown": "- `table.rebuild_fts()` method for rebuilding a FTS index, see [Rebuilding a full-text search table](https://sqlite-utils.readthedocs.io/en/stable/python-api.html#python-api-fts-rebuild). ([#155](https://github.com/simonw/sqlite-utils/issues/155))\r\n- `sqlite-utils rebuild-fts data.db` command for rebuilding FTS indexes across all tables, or just specific tables. ([#155](https://github.com/simonw/sqlite-utils/issues/155))\r\n- `table.optimize()` method no longer deletes junk rows from the `*_fts_docsize` table. This was added in 2.17 but it turns out running `table.rebuild_fts()` is a better solution to this problem.\r\n- Fixed a bug where rows with additional columns that are inserted after the first batch of records could cause an error due to breaking SQLite's maximum number of parameters. Thanks, Simon Wiles. ([#145](https://github.com/simonw/sqlite-utils/issues/145))", "published_at": "2020-09-08T23:39:21Z", "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.58.1", "date": "2021-07-16", "body_markdown": "- Fix for an intermittent race condition caused by the `refresh_schemas()` internal function. ([#1231](https://github.com/simonw/datasette/issues/1231))", "published_at": "2021-07-16T19:51:15Z", "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.13", "date": "2019-10-30", "body_markdown": "- New `mentions-timeline` command (#26)", "published_at": "2019-10-30T02:22:30Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"sqlite\", \"twitter\", \"twitter-api\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.64.3", "date": "2023-04-27", "body_markdown": "- Added `pip` and `setuptools` as explicit dependencies. This fixes a bug where Datasette could not be installed using [Rye](https://github.com/mitsuhiko/rye). ([#2065](https://github.com/simonw/datasette/issues/2065))", "published_at": "2023-04-27T15:00:27Z", "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.4a1", "date": "2020-09-03", "body_markdown": "- Added `received` category. #10\r\n- New `is_public` column. #11", "published_at": "2020-09-03T18:03:50Z", "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.9a0", "date": "2020-09-20", "body_markdown": "- Added by date, as part of developing a timeline view. #16", "published_at": "2020-09-20T23:37:48Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-plugin\", \"datasette-tool\", \"dogsheep\", \"search\"]"} {"rowid": 206156866, "repo": "https://github.com/dogsheep/twitter-to-sqlite", "release": "https://github.com/dogsheep/twitter-to-sqlite/releases/tag/0.21.2", "date": "2020-07-18", "body_markdown": "- Added changelog badge", "published_at": "2020-07-18T22:43:20Z", "topics": "[\"datasette\", \"datasette-io\", \"datasette-tool\", \"dogsheep\", \"sqlite\", \"twitter\", \"twitter-api\"]"} {"rowid": 107914493, "repo": "https://github.com/simonw/datasette", "release": "https://github.com/simonw/datasette/releases/tag/0.59.2", "date": "2021-11-14", "body_markdown": "- Column names with a leading underscore now work correctly when used as a facet. ([#1506](https://github.com/simonw/datasette/issues/1506))\r\n- Applying `?_nocol=` to a column no longer removes that column from the filtering interface. ([#1503](https://github.com/simonw/datasette/issues/1503))\r\n- Official Datasette Docker container now uses Debian Bullseye as the base image. ([#1497](https://github.com/simonw/datasette/issues/1497))\r\n- Datasette is four years old today! Here's the [original release announcement](https://simonwillison.net/2017/Nov/13/datasette/) from 2017.", "published_at": "2021-11-14T05:43:09Z", "topics": "[\"asgi\", \"automatic-api\", \"csv\", \"datasets\", \"datasette\", \"datasette-io\", \"docker\", \"json\", \"python\", \"sql\", \"sqlite\"]"} {"rowid": 303218369, "repo": "https://github.com/dogsheep/evernote-to-sqlite", "release": "https://github.com/dogsheep/evernote-to-sqlite/releases/tag/0.3", "date": "2021-02-11", "body_markdown": "- Correctly handle entities in XHTML notes. [#9](https://github.com/dogsheep/evernote-to-sqlite/issues/9)\r\n- Fixed a bug importing ENEX files on Windows. Thanks, [dskrad](https://github.com/dskrad). [#11](https://github.com/dogsheep/evernote-to-sqlite/issues/11)\r\n", "published_at": "2021-02-11T22:16:20Z", "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.5", "date": "2020-09-04", "body_markdown": "- Custom template displays can now render a point on a map. #12", "published_at": "2020-09-04T01:46:16Z", "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.64", "date": "2023-01-09", "body_markdown": "- Datasette now **strongly recommends against allowing arbitrary SQL queries if you are using SpatiaLite**. SpatiaLite includes SQL functions that could cause the Datasette server to crash. See [SpatiaLite](https://docs.datasette.io/en/stable/spatialite.html#spatialite) for more details.\r\n- New [default_allow_sql](https://docs.datasette.io/en/stable/settings.html#setting-default-allow-sql) setting, providing an easier way to disable all arbitrary SQL execution by end users: `datasette --setting default_allow_sql off`. See also [Controlling the ability to execute arbitrary SQL](https://docs.datasette.io/en/stable/authentication.html#authentication-permissions-execute-sql). ([#1409](https://github.com/simonw/datasette/issues/1409))\r\n- [Building a location to time zone API with SpatiaLite](https://datasette.io/tutorials/spatialite) is a new Datasette tutorial showing how to safely use SpatiaLite to create a location to time zone API.\r\n- New documentation about [how to debug problems loading SQLite extensions](https://docs.datasette.io/en/stable/installation.html#installation-extensions). The error message shown when an extension cannot be loaded has also been improved. ([#1979](https://github.com/simonw/datasette/issues/1979))\r\n- Fixed an accessibility issue: the `