{"id": 912464443, "node_id": "MDU6SXNzdWU5MTI0NjQ0NDM=", "number": 1360, "title": "Security flaw, to be fixed in 0.56.1 and 0.57", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 2, "created_at": "2021-06-05T21:53:51Z", "updated_at": "2021-06-05T22:23:23Z", "closed_at": "2021-06-05T22:22:06Z", "author_association": "OWNER", "pull_request": null, "body": "See security advisory here for details: https://github.com/simonw/datasette/security/advisories/GHSA-xw7c-jx9m-xh5g - the `?_trace=1` debugging option was not correctly escaping its JSON output, resulting in a [reflected cross-site scripting](https://owasp.org/www-community/attacks/xss/#reflected-xss-attacks) vulnerability.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1360/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 912418094, "node_id": "MDU6SXNzdWU5MTI0MTgwOTQ=", "number": 1358, "title": "Release Datasette 0.57", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 3, "created_at": "2021-06-05T19:56:13Z", "updated_at": "2021-06-05T22:20:07Z", "closed_at": "2021-06-05T22:20:07Z", "author_association": "OWNER", "pull_request": null, "body": "Need release notes. Changes are here: https://github.com/simonw/datasette/compare/0.56...368aa5f1b16ca35f82d90ff747023b9a2bfa27c1\r\n\r\nPartial release notes already exist for the two alphas, https://github.com/simonw/datasette/releases/tag/0.57a0 and https://github.com/simonw/datasette/releases/tag/0.57a1", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1358/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 912419349, "node_id": "MDU6SXNzdWU5MTI0MTkzNDk=", "number": 1359, "title": "`?_trace=1` should only be available with a new `trace_debug` setting", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2021-06-05T19:59:27Z", "updated_at": "2021-06-05T20:18:46Z", "closed_at": "2021-06-05T20:18:46Z", "author_association": "OWNER", "pull_request": null, "body": "Just like template debug mode is controlled by this off-by-default setting: https://github.com/simonw/datasette/blob/368aa5f1b16ca35f82d90ff747023b9a2bfa27c1/datasette/app.py#L160-L164", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1359/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 912394511, "node_id": "MDExOlB1bGxSZXF1ZXN0NjYyNTU3MjQw", "number": 1357, "title": "Make custom pages compatible with base_url setting", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2021-06-05T18:54:39Z", "updated_at": "2021-06-05T18:59:54Z", "closed_at": "2021-06-05T18:59:54Z", "author_association": "OWNER", "pull_request": "simonw/datasette/pulls/1357", "body": "Refs #1238.", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1357/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null} {"id": 906356331, "node_id": "MDU6SXNzdWU5MDYzNTYzMzE=", "number": 263, "title": "`sqlite-utils indexes` command", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 6, "created_at": "2021-05-29T04:52:34Z", "updated_at": "2021-06-03T04:34:38Z", "closed_at": "2021-06-03T04:34:38Z", "author_association": "OWNER", "pull_request": null, "body": "While working on #260 I realized there's no command to show indexes in a database, even though there is one for showing tables and one for triggers.\r\n\r\nI should implement #261 first.", "repo": {"value": 140912432, "label": "sqlite-utils"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/sqlite-utils/issues/263/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 906345899, "node_id": "MDU6SXNzdWU5MDYzNDU4OTk=", "number": 261, "title": "`table.xindexes` using `PRAGMA index_xinfo(table)`", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 5, "created_at": "2021-05-29T04:23:48Z", "updated_at": "2021-06-03T03:54:14Z", "closed_at": "2021-06-03T03:51:32Z", "author_association": "OWNER", "pull_request": null, "body": "> `PRAGMA index_xinfo(table)` DOES return that data:\r\n> ```\r\n> (Pdb) [c[0] for c in fresh_db.execute(\"PRAGMA > index_xinfo('idx_dogs_age_name')\").description]\r\n> ['seqno', 'cid', 'name', 'desc', 'coll', 'key']\r\n> (Pdb) fresh_db.execute(\"PRAGMA index_xinfo('idx_dogs_age_name')\").fetchall()\r\n> [(0, 2, 'age', 1, 'BINARY', 1), (1, 0, 'name', 0, 'BINARY', 1), (2, -1, None, 0, 'BINARY', 0)]\r\n> ```\r\n> See https://sqlite.org/pragma.html#pragma_index_xinfo\r\n> \r\n> Example output: https://covid-19.datasettes.com/covid?sql=select+*+from+pragma_index_xinfo%28%27idx_ny_times_us_counties_date%27%29\r\n_Originally posted by @simonw in https://github.com/simonw/sqlite-utils/issues/260#issuecomment-850766552_", "repo": {"value": 140912432, "label": "sqlite-utils"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/sqlite-utils/issues/261/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 904537568, "node_id": "MDExOlB1bGxSZXF1ZXN0NjU1Njg0NDc3", "number": 1346, "title": "Re-display user's query with an error message if an error occurs", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 3, "created_at": "2021-05-28T02:04:20Z", "updated_at": "2021-06-02T03:46:21Z", "closed_at": "2021-06-02T03:46:21Z", "author_association": "OWNER", "pull_request": "simonw/datasette/pulls/1346", "body": "Refs #619", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1346/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null} {"id": 828811618, "node_id": "MDU6SXNzdWU4Mjg4MTE2MTg=", "number": 1257, "title": "Table names containing single quotes break things", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 2, "created_at": "2021-03-11T06:29:38Z", "updated_at": "2021-06-02T03:28:29Z", "closed_at": "2021-06-02T03:28:29Z", "author_association": "OWNER", "pull_request": null, "body": "e.g. I found a table called `Yesterday's ELRs by County`\r\n\r\nIt threw an error inside the `detect_fts()` function attempting to run this SQL query:\r\n\r\n```sql\r\n select name from sqlite_master\r\n where rootpage = 0\r\n and (\r\n sql like '%VIRTUAL TABLE%USING FTS%content=\"Yesterday's ELRs by County\"%'\r\n or sql like '%VIRTUAL TABLE%USING FTS%content=[Yesterday's ELRs by County]%'\r\n or (\r\n tbl_name = \"Yesterday's ELRs by County\"\r\n and sql like '%VIRTUAL TABLE%USING FTS%'\r\n )\r\n )\r\n```\r\nHere's the code at fault: https://github.com/simonw/datasette/blob/640ac7071b73111ba4423812cd683756e0e1936b/datasette/utils/__init__.py#L534-L548", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1257/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 800669347, "node_id": "MDU6SXNzdWU4MDA2NjkzNDc=", "number": 1216, "title": "/-/databases should reflect connection order, not alphabetical order", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2021-02-03T20:20:23Z", "updated_at": "2021-06-02T03:10:19Z", "closed_at": "2021-06-02T03:10:19Z", "author_association": "OWNER", "pull_request": null, "body": "The order in which databases are attached to Datasette matters - it affects the homepage, and it's beginning to influence how certain plugins work (see https://github.com/simonw/datasette-tiles/issues/8).\r\n\r\nTwo years ago in cccea85be6aaaeadb31f3b588ec7f732628815f5 I made `/-/databases` return things in alphabetical order, to fix a test failure in Python 3.5.\r\n\r\nPython 3.5 is no longer supported, so this is no longer necessary - and this behaviour should now be treated as a bug.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1216/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 323671577, "node_id": "MDU6SXNzdWUzMjM2NzE1Nzc=", "number": 263, "title": "Facets should not execute for ?shape=array|object", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 3, "created_at": "2018-05-16T15:26:13Z", "updated_at": "2021-06-02T02:54:34Z", "closed_at": "2021-06-02T02:54:34Z", "author_association": "OWNER", "pull_request": null, "body": "Split off from #255 - there's no point executing the facet SQL for the `?_shape=array` and `?_shape=object` API responses.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/263/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 906977719, "node_id": "MDU6SXNzdWU5MDY5Nzc3MTk=", "number": 1350, "title": "?_nofacets=1 query string argument for disabling facets and suggested facets", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 2, "created_at": "2021-05-31T02:22:29Z", "updated_at": "2021-06-01T16:19:38Z", "closed_at": "2021-05-31T02:39:18Z", "author_association": "OWNER", "pull_request": null, "body": "This is needed as an internal option for #1349. `datasette-graphql` can benefit from this too - maybe can even use it so that if you pass `?_shape=array` it gets automatically added, fixing #263.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1350/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 908446997, "node_id": "MDU6SXNzdWU5MDg0NDY5OTc=", "number": 1353, "title": "?_nocount=1 for opting out of table counts", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 2, "created_at": "2021-06-01T15:53:27Z", "updated_at": "2021-06-01T16:18:54Z", "closed_at": "2021-06-01T16:17:04Z", "author_association": "OWNER", "pull_request": null, "body": "Running a trace against a CSV streaming export with the new `_trace=1` feature from #1351 shows that the following code is executing a `select count(*) from table` for every page of results returned: https://github.com/simonw/datasette/blob/d1d06ace49606da790a765689b4fbffa4c6deecb/datasette/views/table.py#L700-L705\r\n\r\nThis is inefficient - a new `?_nocount=1` option would let us disable this count in the same way as #1349: https://github.com/simonw/datasette/blob/d1d06ace49606da790a765689b4fbffa4c6deecb/datasette/views/base.py#L264-L276\r\n\r\n", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1353/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 908465747, "node_id": "MDU6SXNzdWU5MDg0NjU3NDc=", "number": 1354, "title": "Update help in tests for latest Click", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2021-06-01T16:14:31Z", "updated_at": "2021-06-01T16:17:04Z", "closed_at": "2021-06-01T16:17:04Z", "author_association": "OWNER", "pull_request": null, "body": "Now that Uvicorn 0.14 is out with an unpinned Click dependency - https://github.com/encode/uvicorn/pull/1033 - our test suite runs against Click 8.0 - which subtly changes the output of `--help` causing test failures: https://github.com/simonw/datasette/runs/2720383031?check_suite_focus=true\r\n```\r\n def test_help_includes(name, filename):\r\n expected = (docs_path / filename).read_text()\r\n runner = CliRunner()\r\n result = runner.invoke(cli, name.split() + [\"--help\"], terminal_width=88)\r\n actual = f\"$ datasette {name} --help\\n\\n{result.output}\"\r\n # actual has \"Usage: cli package [OPTIONS] FILES\"\r\n # because it doesn't know that cli will be aliased to datasette\r\n expected = expected.replace(\"Usage: datasette\", \"Usage: cli\")\r\n> assert expected == actual\r\nE AssertionError: assert '$ datasette ...e and exit.\\n' == '$ datasette ...e and exit.\\n'\r\nE Skipping 848 identical leading characters in diff, use -v to show\r\nE nt_id xxx\r\nE + \r\nE --version-note TEXT Additional note to show on /-/versions\r\nE --secret TEXT Secret used for signing secure values, such as signed\r\nE cookies\r\nE + \r\nE --title TEXT Title for metadata\r\n```", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1354/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 904071938, "node_id": "MDU6SXNzdWU5MDQwNzE5Mzg=", "number": 1345, "title": "?_nocol= does not interact well with default facets", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 7, "created_at": "2021-05-27T18:39:55Z", "updated_at": "2021-05-31T02:40:44Z", "closed_at": "2021-05-31T02:31:21Z", "author_association": "OWNER", "pull_request": null, "body": "Clicking \"Hide this column\" on `fips` on https://covid-19.datasettes.com/covid/ny_times_us_counties shows this error:\r\n\r\nhttps://covid-19.datasettes.com/covid/ny_times_us_counties?_nocol=fips\r\n\r\n> ## Invalid SQL\r\n> no such column: fips\r\n\r\nThe reason is that https://covid-19.datasettes.com/-/metadata sets up the following:\r\n\r\n```json\r\n \"ny_times_us_counties\": {\r\n \"sort_desc\": \"date\",\r\n \"facets\": [\r\n \"state\",\r\n \"county\",\r\n \"fips\"\r\n ],\r\n```\r\nIt's setting `fips` as a default facet, which breaks if you attempt to remove the column using `?_nocol`.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1345/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 838148087, "node_id": "MDU6SXNzdWU4MzgxNDgwODc=", "number": 250, "title": "Handle byte order marks (BOMs) in CSV files", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 3, "created_at": "2021-03-22T22:13:18Z", "updated_at": "2021-05-29T05:34:21Z", "closed_at": "2021-05-29T05:34:21Z", "author_association": "OWNER", "pull_request": null, "body": "I often find `sqlite-utils insert ... --csv` creates a first column with a weird character at the start of it - which it turns out is the UTF-8 BOM. Fix that.", "repo": {"value": 140912432, "label": "sqlite-utils"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/sqlite-utils/issues/250/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 906355849, "node_id": "MDExOlB1bGxSZXF1ZXN0NjU3MzczNzI2", "number": 262, "title": "Ability to add descending order indexes", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2021-05-29T04:51:04Z", "updated_at": "2021-05-29T05:01:42Z", "closed_at": "2021-05-29T05:01:39Z", "author_association": "OWNER", "pull_request": "simonw/sqlite-utils/pulls/262", "body": "Refs #260", "repo": {"value": 140912432, "label": "sqlite-utils"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/sqlite-utils/issues/262/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null} {"id": 906330187, "node_id": "MDU6SXNzdWU5MDYzMzAxODc=", "number": 260, "title": "Support creating descending order indexes", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 12, "created_at": "2021-05-29T03:42:59Z", "updated_at": "2021-05-29T05:01:39Z", "closed_at": "2021-05-29T05:01:39Z", "author_association": "OWNER", "pull_request": null, "body": "SQLite lets you create indexes in reverse order, which can have a surprisingly big impact on performance, see https://github.com/simonw/covid-19-datasette/issues/27\r\n\r\nI tried doing this using `sqlite-utils` like so, but it's didn't work:\r\n\r\n```python\r\ndb[\"ny_times_us_counties\"].create_index([\"date desc\"])\r\n```", "repo": {"value": 140912432, "label": "sqlite-utils"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/sqlite-utils/issues/260/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 858501079, "node_id": "MDU6SXNzdWU4NTg1MDEwNzk=", "number": 255, "title": "transform --help should tell you the available types", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2021-04-15T05:24:48Z", "updated_at": "2021-05-29T03:55:52Z", "closed_at": "2021-05-29T03:55:52Z", "author_association": "OWNER", "pull_request": null, "body": "```\r\nUsage: sqlite-utils transform [OPTIONS] PATH TABLE\r\n\r\n Transform a table beyond the capabilities of ALTER TABLE\r\n\r\nOptions:\r\n --type ... Change column type to X\r\n```\r\nThis should specify that the possible types are 'INTEGER', 'TEXT', 'FLOAT', 'BLOB'.", "repo": {"value": 140912432, "label": "sqlite-utils"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/sqlite-utils/issues/255/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 903978133, "node_id": "MDU6SXNzdWU5MDM5NzgxMzM=", "number": 1343, "title": "Figure out how to publish alpha/beta releases to Docker Hub", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 4, "created_at": "2021-05-27T16:42:17Z", "updated_at": "2021-05-27T16:46:37Z", "closed_at": "2021-05-27T16:45:41Z", "author_association": "OWNER", "pull_request": null, "body": "> It looks like all I need to do to ship an alpha version to Docker Hub is NOT point the `latest` tag at it after it goes live: https://github.com/simonw/datasette/blob/1a8972f9c012cd22b088c6b70661a9c3d3847853/.github/workflows/publish.yml#L75-L77\r\n\r\n_Originally posted by @simonw in https://github.com/simonw/datasette/issues/1319#issuecomment-849780481_", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1343/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 898904402, "node_id": "MDU6SXNzdWU4OTg5MDQ0MDI=", "number": 1337, "title": "\"More\" link for facets that shows _facet_size=max results", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 7, "created_at": "2021-05-23T00:08:51Z", "updated_at": "2021-05-27T16:14:14Z", "closed_at": "2021-05-27T16:01:03Z", "author_association": "OWNER", "pull_request": null, "body": "_Original title: \"More\" link for facets that shows the full set of results_\r\n\r\nThe simplest way to do this will be to have it link to a generated SQL query.\r\n\r\n_Originally posted by @simonw in https://github.com/simonw/datasette/issues/1332#issuecomment-846479062_", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1337/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 903902495, "node_id": "MDU6SXNzdWU5MDM5MDI0OTU=", "number": 1342, "title": "Improve `path_with_replaced_args()` and friends and document them", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 3, "created_at": "2021-05-27T15:18:28Z", "updated_at": "2021-05-27T15:23:02Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "> In order to cleanly implement this I need to expose the `path_with_replaced_args` utility function to Datasette's template engine. This is the first time this will become an exposed (and hence should-by-documented) API and I don't like its shape much.\r\n\r\n_Originally posted by @simonw in https://github.com/simonw/datasette/issues/1337#issuecomment-849721280_", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1342/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null} {"id": 903200328, "node_id": "MDU6SXNzdWU5MDMyMDAzMjg=", "number": 1341, "title": "\"Show all columns\" cog menu item should show if ?_col= is used", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2021-05-27T04:28:17Z", "updated_at": "2021-05-27T04:31:16Z", "closed_at": "2021-05-27T04:31:16Z", "author_association": "OWNER", "pull_request": null, "body": "On https://latest.datasette.io/fixtures/sortable?_col=sortable the \"Show all columns\" item (from #615) is not shown (it should be):\r\n\r\n\"fixtures__sortable__201_rows\"\r\n", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1341/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 517451234, "node_id": "MDU6SXNzdWU1MTc0NTEyMzQ=", "number": 615, "title": "?_col= and ?_nocol= support for toggling columns on table view", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 16, "created_at": "2019-11-04T22:55:41Z", "updated_at": "2021-05-27T04:26:10Z", "closed_at": "2021-05-27T04:17:44Z", "author_association": "OWNER", "pull_request": null, "body": "Split off from #292 (I guess this is a re-opening of #312).", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/615/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 326800219, "node_id": "MDU6SXNzdWUzMjY4MDAyMTk=", "number": 292, "title": "Mechanism for customizing the SQL used to select specific columns in the table view", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 15, "created_at": "2018-05-27T09:05:52Z", "updated_at": "2021-05-27T04:25:01Z", "closed_at": "2021-05-27T04:25:01Z", "author_association": "OWNER", "pull_request": null, "body": "Some columns don't make a lot of sense in their default representation - binary blobs such as SpatiaLite geometries for example, or lengthy columns that really should be truncated somehow.\r\n\r\nWe may also find that there are tables where we don't want to show all of the columns - so a mechanism to select a subset of columns would be nice.\r\n\r\nI think there are two features here:\r\n\r\n* the ability to request a subset of columns on the table view\r\n* the ability to override the SQL for a specific column and/or add extra columns - `AsGeoJSON(Geometry)` for example\r\n\r\nBoth features should be available via both querystring arguments and in `metadata.json`\r\n\r\nThe querystring argument for custom SQL should only work if `allow_sql` config is turned on.\r\n\r\nRefs #276", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/292/reactions\", \"total_count\": 2, \"+1\": 2, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 899851083, "node_id": "MDExOlB1bGxSZXF1ZXN0NjUxNDkyODg4", "number": 1339, "title": "?_col=/?_nocol= to show/hide columns on the table page", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2021-05-24T17:15:20Z", "updated_at": "2021-05-27T04:17:44Z", "closed_at": "2021-05-27T04:17:43Z", "author_association": "OWNER", "pull_request": "simonw/datasette/pulls/1339", "body": "See #615. Still to do:\r\n\r\n- [x] Allow combination of `?_col=` and `?_nocol=` (`_nocol` wins)\r\n- [x] Deduplicate same column if passed in `?_col=` multiple times\r\n- [x] Validate that user did not try to remove a primary key\r\n- [x] Add tests\r\n- [x] Ensure this works correctly for SQL views\r\n- [x] Add documentation\r\n", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1339/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null} {"id": 901009787, "node_id": "MDU6SXNzdWU5MDEwMDk3ODc=", "number": 1340, "title": "Research: Cell action menu (like column action but for individual cells)", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2021-05-25T15:49:16Z", "updated_at": "2021-05-26T18:59:58Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "Had an idea today that it might be useful to select an individual cell and say things like \"show me all other rows with the same value\" - maybe even a set of other menu options against cells as well.\r\n\r\nMocked up a show-on-hover ellipses demo using the CSS inspector:\r\n\r\n![idea](https://user-images.githubusercontent.com/9599/119528316-f0744480-bd35-11eb-8eb4-1deea6d60cce.gif)\r\n", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1340/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null} {"id": 899169307, "node_id": "MDU6SXNzdWU4OTkxNjkzMDc=", "number": 1338, "title": "Fix jinja2 warnings", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2021-05-24T01:38:23Z", "updated_at": "2021-05-24T01:41:55Z", "closed_at": "2021-05-24T01:41:55Z", "author_association": "OWNER", "pull_request": null, "body": "Lots of these in the test suite now, after the Jinja upgrade in #1331:\r\n```\r\ntests/test_plugins.py::test_hook_render_cell_link_from_json\r\n datasette/tests/plugins/my_plugin_2.py:45: DeprecationWarning: 'jinja2.escape' is deprecated and will be removed in Jinja 3.1. Import 'markupsafe.escape' instead.\r\n label=jinja2.escape(data[\"label\"] or \"\") or \" \",\r\n\r\ntests/test_plugins.py::test_hook_render_cell_link_from_json\r\n datasette/tests/plugins/my_plugin_2.py:41: DeprecationWarning: 'jinja2.Markup' is deprecated and will be removed in Jinja 3.1. Import 'markupsafe.Markup' instead.\r\n return jinja2.Markup(\r\n```", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1338/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 642296989, "node_id": "MDU6SXNzdWU2NDIyOTY5ODk=", "number": 856, "title": "Consider pagination of canned queries", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 3, "created_at": "2020-06-20T03:15:59Z", "updated_at": "2021-05-21T14:22:41Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "The new `canned_queries()` plugin hook from #852 combined with plugins like https://github.com/simonw/datasette-saved-queries could mean that some installations end up with hundreds or even thousands of canned queries. I should consider pagination or some other way of ensuring that this doesn't cause performance problems for Datasette.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/856/reactions\", \"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null} {"id": 897212458, "node_id": "MDU6SXNzdWU4OTcyMTI0NTg=", "number": 63, "title": "Ability to fetch commits from branches other than the default", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2021-05-20T17:58:08Z", "updated_at": "2021-05-20T17:58:08Z", "closed_at": null, "author_association": "MEMBER", "pull_request": null, "body": "This tool is currently almost entirely ignorant of the concept of branches. One example: you can't retrieve commits from any branch other than the default (usually main).", "repo": {"value": 207052882, "label": "github-to-sqlite"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/dogsheep/github-to-sqlite/issues/63/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null} {"id": 894948100, "node_id": "MDU6SXNzdWU4OTQ5NDgxMDA=", "number": 259, "title": "Suggest the --alter option if a new column cannot be added", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2021-05-19T03:17:38Z", "updated_at": "2021-05-19T03:27:33Z", "closed_at": "2021-05-19T03:26:26Z", "author_association": "OWNER", "pull_request": null, "body": "Refs #256.", "repo": {"value": 140912432, "label": "sqlite-utils"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/sqlite-utils/issues/259/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 812228314, "node_id": "MDU6SXNzdWU4MTIyMjgzMTQ=", "number": 1236, "title": "Ability to increase size of the SQL editor window", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 9, "created_at": "2021-02-19T18:09:27Z", "updated_at": "2021-05-18T03:28:25Z", "closed_at": "2021-02-22T21:05:21Z", "author_association": "OWNER", "pull_request": null, "body": "", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1236/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 842862708, "node_id": "MDU6SXNzdWU4NDI4NjI3MDg=", "number": 1280, "title": "Ability to run CI against multiple SQLite versions", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 2, "created_at": "2021-03-28T23:54:50Z", "updated_at": "2021-05-10T19:07:46Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "Issue #1276 happened because I didn't run tests against a SQLite version prior to 3.16.0 (released 2017-01-02).\r\n\r\nGlitch is a deployment target and runs SQLite 3.11.0 from 2016-02-15.\r\n\r\nIf CI ran against that version of SQLite this bug could have been avoided.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1280/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null} {"id": 496415321, "node_id": "MDU6SXNzdWU0OTY0MTUzMjE=", "number": 1, "title": "Figure out some interesting example SQL queries", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 9, "created_at": "2019-09-20T15:28:07Z", "updated_at": "2021-05-03T03:46:23Z", "closed_at": null, "author_association": "MEMBER", "pull_request": null, "body": "My knowledge of genetics has left me short here. I'd love to be able to provide some interesting example SELECT queries - maybe one that spots if you are [likely to have red hair?](https://www.snpedia.com/index.php/Rs1805007)", "repo": {"value": 209590345, "label": "genome-to-sqlite"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/dogsheep/genome-to-sqlite/issues/1/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null} {"id": 871304967, "node_id": "MDU6SXNzdWU4NzEzMDQ5Njc=", "number": 1315, "title": "settings.json should be picked up by \"datasette publish cloudrun\"", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2021-04-29T18:16:41Z", "updated_at": "2021-04-29T18:16:41Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1315/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null} {"id": 866668415, "node_id": "MDU6SXNzdWU4NjY2Njg0MTU=", "number": 1308, "title": "Columns named \"link\" display in bold", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 3, "created_at": "2021-04-24T05:58:11Z", "updated_at": "2021-04-24T06:07:49Z", "closed_at": "2021-04-24T06:07:49Z", "author_association": "OWNER", "pull_request": null, "body": "Reported in office hours today.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1308/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 856895291, "node_id": "MDU6SXNzdWU4NTY4OTUyOTE=", "number": 1299, "title": "Design better empty states", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2021-04-13T12:06:12Z", "updated_at": "2021-04-13T12:06:12Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "Inspiration here: https://emptystat.es/", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1299/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null} {"id": 520667773, "node_id": "MDU6SXNzdWU1MjA2Njc3NzM=", "number": 620, "title": "Mechanism for indicating foreign key relationships in the table and query page URLs", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 6, "created_at": "2019-11-10T22:26:27Z", "updated_at": "2021-04-05T03:57:22Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "Datasette currently only inflates foreign keys (into names hyperlinks) if it detects them as foreign key constraints in the underlying database.\r\n\r\nIt would be useful if you could specify additional \"foreign keys\" using both `metadata.json` and the querystring - similar time how you can pass `?_fts_table=x` https://datasette.readthedocs.io/en/stable/full_text_search.html#configuring-full-text-search-for-a-table-or-view", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/620/reactions\", \"total_count\": 1, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 1}", "draft": null, "state_reason": null} {"id": 672421411, "node_id": "MDU6SXNzdWU2NzI0MjE0MTE=", "number": 916, "title": "Support reverse pagination (previous page, has-previous-items)", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 7, "created_at": "2020-08-04T00:32:06Z", "updated_at": "2021-04-03T23:43:11Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "I need this for `datasette-graphql` for full compatibility with the way Relay likes to paginate - using cursors for paginating backwards as well as for paginating forwards.\r\n\r\n> This may be the kick I need to get Datasette pagination to work in reverse too.\r\n_Originally posted by @simonw in https://github.com/simonw/datasette-graphql/issues/2#issuecomment-668305853_", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/916/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null} {"id": 849396758, "node_id": "MDU6SXNzdWU4NDkzOTY3NTg=", "number": 1287, "title": "Upgrade to Python 3.9.4", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 5, "created_at": "2021-04-02T18:43:15Z", "updated_at": "2021-04-03T22:38:39Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "Has some security fixes https://pythoninsider.blogspot.com/2021/04/python-393-and-389-are-now-available.html", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1287/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null} {"id": 849568079, "node_id": "MDExOlB1bGxSZXF1ZXN0NjA4MzIzMDI4", "number": 1290, "title": "Use pytest-xdist to speed up tests", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2021-04-03T03:34:36Z", "updated_at": "2021-04-03T03:42:29Z", "closed_at": "2021-04-03T03:42:28Z", "author_association": "OWNER", "pull_request": "simonw/datasette/pulls/1290", "body": "Closes #1289, refs #1212.", "repo": {"value": 107914493, "label": "datasette"}, "type": "pull", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1290/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": 0, "state_reason": null} {"id": 849543502, "node_id": "MDU6SXNzdWU4NDk1NDM1MDI=", "number": 1289, "title": "Speed up tests with pytest-xdist", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 3, "created_at": "2021-04-03T00:47:39Z", "updated_at": "2021-04-03T03:42:28Z", "closed_at": "2021-04-03T03:42:28Z", "author_association": "OWNER", "pull_request": null, "body": "I think I can get this working for almost every test, then use the pattern in https://github.com/pytest-dev/pytest-xdist/issues/385#issuecomment-444545641 to opt specific tests out of being run in parallel.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1289/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 817544251, "node_id": "MDU6SXNzdWU4MTc1NDQyNTE=", "number": 1245, "title": "Sticky table column headers would be useful, especially on the query page", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 1, "created_at": "2021-02-26T17:42:51Z", "updated_at": "2021-04-02T20:53:35Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "Suggestion from office hours.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1245/reactions\", \"total_count\": 2, \"+1\": 2, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": null} {"id": 576722115, "node_id": "MDU6SXNzdWU1NzY3MjIxMTU=", "number": 696, "title": "Single failing unit test when run inside the Docker image", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 3268330, "label": "Datasette 1.0"}, "comments": 2, "created_at": "2020-03-06T06:16:36Z", "updated_at": "2021-03-29T17:04:19Z", "closed_at": "2021-03-07T07:41:18Z", "author_association": "OWNER", "pull_request": null, "body": "```\r\ndocker run -it -v `pwd`:/mnt datasetteproject/datasette:latest /bin/bash\r\nroot@0e1928cfdf79:/# cd /mnt\r\nroot@0e1928cfdf79:/mnt# pip install -e .[test]\r\nroot@0e1928cfdf79:/mnt# pytest\r\n```\r\nI get one failure!\r\n\r\nIt was for `test_searchable[/fixtures/searchable.json?_search=te*+AND+do*&_searchmode=raw-expected_rows3]`\r\n```\r\n def test_searchable(app_client, path, expected_rows):\r\n response = app_client.get(path)\r\n> assert expected_rows == response.json[\"rows\"]\r\nE AssertionError: assert [[1, 'barry c...sel', 'puma']] == []\r\nE Left contains 2 more items, first extra item: [1, 'barry cat', 'terry dog', 'panther']\r\nE Full diff:\r\nE + []\r\nE - [[1, 'barry cat', 'terry dog', 'panther'],\r\nE - [2, 'terry dog', 'sara weasel', 'puma']]\r\n```\r\n\r\n_Originally posted by @simonw in https://github.com/simonw/datasette/issues/695#issuecomment-595614469_", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/696/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 842881221, "node_id": "MDU6SXNzdWU4NDI4ODEyMjE=", "number": 1281, "title": "Latest Datasette tags missing from Docker Hub", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 7, "created_at": "2021-03-29T00:58:30Z", "updated_at": "2021-03-29T01:41:48Z", "closed_at": "2021-03-29T01:41:48Z", "author_association": "OWNER", "pull_request": null, "body": "Spotted this while testing https://github.com/simonw/datasette/issues/1249#issuecomment-808998719_\r\n\r\nhttps://hub.docker.com/r/datasetteproject/datasette/tags?page=1&ordering=last_updated isn't showing the tags for any version more recent than 0.54.1 - we are up to 0.56 now.\r\n\r\nBut the `:latest` tag is for the new 0.56 release.", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1281/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 763207948, "node_id": "MDU6SXNzdWU3NjMyMDc5NDg=", "number": 1141, "title": "Default styling for bullet point lists", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": null, "comments": 0, "created_at": "2020-12-12T02:49:33Z", "updated_at": "2021-03-29T00:14:05Z", "closed_at": "2021-03-29T00:14:05Z", "author_association": "OWNER", "pull_request": null, "body": "I just noticed that https://datasette.io/content/recent_releases (which uses `datasette-render-markdown`) is missing its bullet points:\r\n\r\n\"content__recent_releases__399_rows\"\r\n", "repo": {"value": 107914493, "label": "datasette"}, "type": "issue", "active_lock_reason": null, "performed_via_github_app": null, "reactions": "{\"url\": \"https://api.github.com/repos/simonw/datasette/issues/1141/reactions\", \"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "draft": null, "state_reason": "completed"} {"id": 741862364, "node_id": "MDU6SXNzdWU3NDE4NjIzNjQ=", "number": 1090, "title": "Custom widgets for canned query forms", "user": {"value": 9599, "label": "simonw"}, "state": "open", "locked": 0, "assignee": null, "milestone": null, "comments": 3, "created_at": "2020-11-12T19:21:07Z", "updated_at": "2021-03-27T16:25:25Z", "closed_at": null, "author_association": "OWNER", "pull_request": null, "body": "This is an idea that was cut from the first version of writable canned queries:\r\n\r\n> I really want the option to use a `