{"id": 421548881, "node_id": "MDU6SXNzdWU0MjE1NDg4ODE=", "number": 418, "title": "Hashed URLs should be optional", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 5, "created_at": "2019-03-15T14:34:12Z", "updated_at": "2019-05-16T15:12:26Z", "closed_at": "2019-05-16T15:12:26Z", "author_association": "OWNER", "pull_request": null, "body": "The cute performance hack where a hash of the DB contents is included in the URL makes a lot less sense when serving files that frequently change. It's also difficult to explain to people.\r\n\r\nIt should be optional and default to \"off\".\r\n\r\nNeeded for #417 and #419", "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/418/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": 421551434, "node_id": "MDU6SXNzdWU0MjE1NTE0MzQ=", "number": 419, "title": "Default to opening files in mutable mode, special option for immutable files", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 10, "created_at": "2019-03-15T14:39:27Z", "updated_at": "2019-05-16T15:14:32Z", "closed_at": "2019-05-16T15:14:31Z", "author_association": "OWNER", "pull_request": null, "body": "One of the original ideas behind Datasette was that serving immutable data makes everything way easier. Two examples: You don't have to worry about SQLite concurrency and you can bundle the database inside a Docker container and deploy it to immutable hosting. See [The interesting ideas in Datasette](https://simonwillison.net/2018/Oct/4/datasette-ideas/) for more on this.\r\n\r\nI'm beginning to see a much stronger case for being able to serve mutable data as well.\r\n\r\nSQLite is actually perfectly capable of handling reads against a database that is also being written to, even if the writes are coming from another process. https://www.sqlite.org/wal.htm\r\n\r\nThere are all kinds of interesting use-cases which Datasette is currently unsuitable for due to its insistence on immutable databases. Some examples:\r\n\r\n* Continually run Datasette against a SQLite database updated by another process, e.g. Firefox bookmarks\r\n* Projects where a cron runs every X minutes and writes new entries gathered from other sources to SQLite\r\n* Tail a log file, write those log updates to a SQLite file, view recent log entries in Datasette\r\n\r\nThis is also relevant to #417, Datasette Library.", "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/419/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": 421971339, "node_id": "MDU6SXNzdWU0MjE5NzEzMzk=", "number": 420, "title": "Fix all the places that currently use .inspect() data", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 13, "created_at": "2019-03-17T20:54:37Z", "updated_at": "2019-05-19T19:58:31Z", "closed_at": "2019-05-02T01:13:46Z", "author_association": "OWNER", "pull_request": null, "body": "See #419: if Datasette is going to work against mutable SQLite files it can no longer assume that the `.inspect()` method will have cached the correct schema for all tables in all attached databases.\r\n\r\nSo everywhere in the code at the moment that relies on `.inspect()` data needs to be modified to use live introspection of the schema instead.\r\n\r\nFrom [a comment later on](https://github.com/simonw/datasette/issues/420#issuecomment-474398127): here are the uses I need to fix as a checklist:\r\n\r\n- [x] `table_exists()`\r\n- [x] `info[\"file\"]` in `.execute()`\r\n- [x] `resolve_db_name()`\r\n- [x] `.database_url(database)`\r\n- [x] `DatabaseDownload` file path\r\n- [x] `sortable_columns_for_table()` uses it to find the columns in a table\r\n- [x] `expandable_columns()` uses it to find foreign keys\r\n- [x] `expand_foreign_keys()` uses it to find foreign keys\r\n- [x] `display_columns_and_rows()` uses it to find primary keys and foreign keys... but also has access to a cursor.description which it uses to list the columns\r\n- [x] `TableView.data` uses it to lookup columns and primary keys and the table_rows_count (used if the thing isn't a view) and probably a few more things, this method is huge!\r\n- [x] `RowView.data` uses it for primary keys\r\n- [x] `foreign_key_tables()` uses it for foreign keys\n- [x] `DatabaseView` list of tables\r\n- [x] `IndexView`\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/420/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": 421985685, "node_id": "MDU6SXNzdWU0MjE5ODU2ODU=", "number": 421, "title": "Documentation for ?_hash=1 and Datasette's hashed URL caching", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 2, "created_at": "2019-03-17T23:08:36Z", "updated_at": "2019-05-19T05:32:37Z", "closed_at": "2019-05-19T05:31:27Z", "author_association": "OWNER", "pull_request": null, "body": "Follow on from #418 - the Datasette documentation needs an entire section (probably a new page) describing exactly how the hash-in-URL caching mechanism works.", "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/421/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": 435531034, "node_id": "MDU6SXNzdWU0MzU1MzEwMzQ=", "number": 435, "title": "Tracing support for seeing what SQL queries were executed", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 4, "created_at": "2019-04-21T17:37:37Z", "updated_at": "2019-05-11T20:32:21Z", "closed_at": "2019-05-11T19:07:42Z", "author_association": "OWNER", "pull_request": null, "body": "Features like faceting, foreign key expansions and now the inspect-less index view mean Datasette can end up executing a surprisingly large number of SQL queries to render a single page.\r\n\r\nPast experience with projects like [tikbar](https://github.com/simonw/tikibar) have shown that being able to see what actually went into rendering a page can be critical for optimizing performance and generally understanding how everything works.\r\n\r\nSupport a tracing mode (probably via a `?_trace=1` querystring) which adds information about what is actually going on to both the HTML and the JSON.", "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/435/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": 440313209, "node_id": "MDU6SXNzdWU0NDAzMTMyMDk=", "number": 451, "title": "Update README", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 1, "created_at": "2019-05-04T11:26:07Z", "updated_at": "2019-05-19T22:23:43Z", "closed_at": "2019-05-19T22:23:43Z", "author_association": "OWNER", "pull_request": null, "body": "The README is quite out of date now. It includes out-dated copies of help files, promotes the old Zeit Now integration and duplicates a lot of material from the docs.", "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/451/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": 441858747, "node_id": "MDU6SXNzdWU0NDE4NTg3NDc=", "number": 455, "title": "Hidden tables shown on the index page", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 1, "created_at": "2019-05-08T18:02:13Z", "updated_at": "2019-05-14T15:49:29Z", "closed_at": "2019-05-14T15:48:08Z", "author_association": "OWNER", "pull_request": null, "body": "Minor bug in master right now.\r\n\r\nhttps://csvconf.now.sh/\r\n\r\n\"csv_conf_v4__csvconf\"\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/455/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": 443020810, "node_id": "MDU6SXNzdWU0NDMwMjA4MTA=", "number": 460, "title": "Design changes to homepage to support mutable files", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 5, "created_at": "2019-05-11T17:58:05Z", "updated_at": "2019-05-16T03:34:09Z", "closed_at": "2019-05-16T03:24:16Z", "author_association": "OWNER", "pull_request": null, "body": "Needed for #419 - since we can now start up Datasette with a whole bunch of large connected databases that are mutable we can no longer guarantee a quick count of rows across all of the tables.\r\n\r\nNew proposed homepage tweaks:\r\n\r\n\"Datasette__blah__commits__events__fixtures__fixtures_modifyme__modme__nerds__out__russian-ads__salaries__sf-trees__sortable__this-db-will-change\"\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/460/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": 443020048, "node_id": "MDU6SXNzdWU0NDMwMjAwNDg=", "number": 459, "title": "Fix the \"datasette now publish ... --alias=x\" option", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 3, "created_at": "2019-05-11T17:48:40Z", "updated_at": "2019-05-11T20:22:08Z", "closed_at": "2019-05-11T20:22:08Z", "author_association": "OWNER", "pull_request": null, "body": "Now have deprecated the mechanism we were using for this - running `now alias` without any parameters - in favour of something new:\r\n\r\nhttps://zeit.co/blog/automatic-aliasing", "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/459/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": 443023308, "node_id": "MDU6SXNzdWU0NDMwMjMzMDg=", "number": 462, "title": "Replace most of `.inspect()` (and `datasette inspect`) with table counting", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 4, "created_at": "2019-05-11T18:26:06Z", "updated_at": "2019-05-16T14:31:05Z", "closed_at": "2019-05-16T14:31:05Z", "author_association": "OWNER", "pull_request": null, "body": "This is the last part of #419 - with the move to supporting mutable databases by default, the inspect-data mechanism currently in use no-longer makes much sense.\r\n\r\nThe one optimization I think it's worth keeping for databases opened in immutable mode is the cached table counts. I think `datasette inspect` should cut down to only counting the rows in the tables - the other things done by inspect (figuring out columns, foreign key relationships, FTS etc) should all be fast enough that they can be reliably performed at runtime even against large databases.\r\n\r\nIf performing them at run-time has performance issues, I would rather cache those results internally within Datasette after they are first calculated than continue to support them in the `datasette inspect` command - to keep things simpler.", "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/462/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": 443034003, "node_id": "MDU6SXNzdWU0NDMwMzQwMDM=", "number": 463, "title": "Write release notes for 0.28", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 1, "created_at": "2019-05-11T20:36:56Z", "updated_at": "2019-05-19T21:24:44Z", "closed_at": "2019-05-19T21:24:20Z", "author_association": "OWNER", "pull_request": null, "body": "So much new stuff!\r\n\r\nhttps://github.com/simonw/datasette/compare/0.27...master", "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/463/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": 443034218, "node_id": "MDU6SXNzdWU0NDMwMzQyMTg=", "number": 464, "title": "Add Glitch to Getting Started docs section", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 1, "created_at": "2019-05-11T20:39:39Z", "updated_at": "2019-05-16T05:04:35Z", "closed_at": "2019-05-16T05:03:46Z", "author_association": "OWNER", "pull_request": null, "body": "Glitch is by far the easiest way to start trying out Datasette. Add a section to https://datasette.readthedocs.io/en/latest/getting_started.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/464/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": 443040665, "node_id": "MDU6SXNzdWU0NDMwNDA2NjU=", "number": 466, "title": "Move \"no such module: VirtualSpatialIndex\" code elsewhere", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 2, "created_at": "2019-05-11T22:09:00Z", "updated_at": "2022-01-20T21:29:41Z", "closed_at": "2019-05-11T22:57:22Z", "author_association": "OWNER", "pull_request": null, "body": "We currently show a useful warning (from #331) when the user tries to open a spatialite database without first loading the module:\r\n\r\nhttps://github.com/simonw/datasette/blob/c692cd291111050483a32bea1ee08e994a0b781b/datasette/app.py#L547-L554\r\n\r\nThis code is part of `.inspect()` which is going away - see #462 - so I need to find somewhere else for it to live.", "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/466/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": 444711254, "node_id": "MDU6SXNzdWU0NDQ3MTEyNTQ=", "number": 467, "title": "Index page row counts only for DBs with < 30 tables (10ms count limit per table)", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 2, "created_at": "2019-05-16T01:21:36Z", "updated_at": "2019-05-16T03:03:45Z", "closed_at": "2019-05-16T03:03:45Z", "author_association": "OWNER", "pull_request": null, "body": "Split out from #460.\r\n\r\nIf a database is mutable, calculating row counts gets expensive. I'm only going to calculate row counts for the index page if it has less than X tables (both hidden and non-hidden) AND each table can be counted in less than 10ms.\r\n\r\nIf any count takes longer than 10ms I'll cancel the counting entirely. We currently show an inaccurate count if this happens, which is just confusing.", "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/467/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": 444997937, "node_id": "MDU6SXNzdWU0NDQ5OTc5Mzc=", "number": 470, "title": "/-/databases showing currently attached database details", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 1, "created_at": "2019-05-16T14:45:18Z", "updated_at": "2019-05-19T19:28:44Z", "closed_at": "2019-05-16T14:50:26Z", "author_association": "OWNER", "pull_request": null, "body": "Split from #419. Mainly useful to see what is connected as mutable v.s. immutable.\r\n\r\nAlso helps fill the gap left by `/-/inspect` until #465 ", "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/470/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": 445855789, "node_id": "MDU6SXNzdWU0NDU4NTU3ODk=", "number": 474, "title": "Do not allow downloads of mutable databases", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 1, "created_at": "2019-05-19T19:35:32Z", "updated_at": "2019-05-19T20:41:17Z", "closed_at": "2019-05-19T20:41:16Z", "author_association": "OWNER", "pull_request": null, "body": "If the file changes during download it will probably result in a corrupt download. Safer not to allow downloads at all of mutable databases.", "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/474/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": 445855910, "node_id": "MDU6SXNzdWU0NDU4NTU5MTA=", "number": 475, "title": "Documentation for about and about_url metadata", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 0, "created_at": "2019-05-19T19:36:59Z", "updated_at": "2019-05-19T20:13:36Z", "closed_at": "2019-05-19T20:13:36Z", "author_association": "OWNER", "pull_request": null, "body": "Added in https://github.com/simonw/datasette/commit/bf6b0f918de4aeee7c1036ac975ce2fb23237da7 without docs.", "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/475/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": 445858491, "node_id": "MDU6SXNzdWU0NDU4NTg0OTE=", "number": 476, "title": "Remove \"datasette skeleton\"", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 0, "created_at": "2019-05-19T20:04:11Z", "updated_at": "2019-05-19T20:06:06Z", "closed_at": "2019-05-19T20:06:06Z", "author_association": "OWNER", "pull_request": null, "body": "It doesn't work any more, and it's not a particularly useful feature - I've hardly used it since I added it.", "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/476/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": 445862501, "node_id": "MDU6SXNzdWU0NDU4NjI1MDE=", "number": 477, "title": "Documentation for ArrayFacet (facet by JSON array)", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 0, "created_at": "2019-05-19T20:47:27Z", "updated_at": "2019-05-29T21:39:12Z", "closed_at": "2019-05-19T21:19:43Z", "author_association": "OWNER", "pull_request": null, "body": "This is missing from https://datasette.readthedocs.io/en/0.27.1/facets.html right now", "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/477/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": 445003029, "node_id": "MDU6SXNzdWU0NDUwMDMwMjk=", "number": 471, "title": "?_hash=1 and --config hash_urls:1 should only work for immutable databases", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 1, "created_at": "2019-05-16T14:54:25Z", "updated_at": "2019-05-16T15:11:03Z", "closed_at": "2019-05-16T15:11:03Z", "author_association": "OWNER", "pull_request": null, "body": "Split from #419.", "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/471/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": 445230077, "node_id": "MDU6SXNzdWU0NDUyMzAwNzc=", "number": 472, "title": "Rename \"publish now\" to \"publish nowv1\"", "user": {"value": 9599, "label": "simonw"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 1, "created_at": "2019-05-17T01:58:52Z", "updated_at": "2019-05-19T18:07:39Z", "closed_at": "2019-05-19T18:07:39Z", "author_association": "OWNER", "pull_request": null, "body": "This will help clarify that you need a nowv1 account use it.", "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/472/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": 377266351, "node_id": "MDU6SXNzdWUzNzcyNjYzNTE=", "number": 373, "title": "Views should be shown on root/index page along with tables", "user": {"value": 416374, "label": "gfrmin"}, "state": "closed", "locked": 0, "assignee": null, "milestone": {"value": 4305096, "label": "0.28"}, "comments": 1, "created_at": "2018-11-05T06:28:41Z", "updated_at": "2019-05-16T00:29:22Z", "closed_at": "2019-05-16T00:29:22Z", "author_association": "CONTRIBUTOR", "pull_request": null, "body": "At the moment the number of views is given on a datasette \"homepage\", but not links to any views themselves", "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/373/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"}