{"sha": "34d77d780f68b778fd9d6ebbaf69f250436f055f", "message": "gcloud run is now GA, s/beta// (#660)\n\nThanks, @glasnt", "author_date": "2020-01-21T23:28:11Z", "committer_date": "2020-01-21T23:28:11Z", "raw_author": {"value": "f9a18a704545f33349d7b28b24faf7063846ae0a", "label": "Katie McLaughlin"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 813732, "label": "glasnt"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "d95048031edb02bbc9892879507f55a4f29c5459", "message": "Split pypi and docker travis tasks (#480)\n\nThanks @glasnt!", "author_date": "2019-07-07T20:03:19Z", "committer_date": "2019-07-07T20:03:19Z", "raw_author": {"value": "f9a18a704545f33349d7b28b24faf7063846ae0a", "label": "Katie McLaughlin"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 813732, "label": "glasnt"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "e03aed00026cc2e59c09ca41f69a247e1a85cc89", "message": "Detect server start/stop more reliably.\n\nThis is useful, especially in testing, since your test\nhosts might not reliabliy start the server within two\nseconds, so we do a definite check before progressing.\n\nBy the same token, after `kill $server_pid` wait for\nthe pid to be gone from the process list.\n\nSince now the script can end prematurely, I also added\na cleanup function to make sure the temporary certs are\nremoved in any case.\n\nn.b. this could also be done with the use of `trap 'fn'\nERR` but that felt like a bit too much magic for this\nshort a script.", "author_date": "2022-12-18T09:40:06Z", "committer_date": "2022-12-18T16:01:51Z", "raw_author": {"value": "f333c00958a658720cd93e305aac71711b88e52b", "label": "Jan Lehnardt"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 11321, "label": "janl"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "ae4593316ccf5e42ad26f27033193834a7e696c8", "message": "Add insert --truncate option\n\nDeletes all rows in the table (if it exists) before inserting new rows.\nSQLite doesn't implement a TRUNCATE TABLE statement but does optimize an\nunqualified DELETE FROM.\n\nThis can be handy if you want to refresh the entire contents of a table\nbut a) don't have a PK (so can't use --replace), b) don't want the table\nto disappear (even briefly) for other connections, and c) have to handle\nrecords that used to exist being deleted.\n\nIdeally the replacement of rows would appear instantaneous to other\nconnections by putting the DELETE + INSERT in a transaction, but this is\nvery difficult without breaking other code as the current transaction\nhandling is inconsistent and non-systematic. There exists the\npossibility for the DELETE to succeed but the INSERT to fail, leaving an\nempty table. This is not much worse, however, than the current\npossibility of one chunked INSERT succeeding and being committed while\nthe next chunked INSERT fails, leaving a partially complete operation.", "author_date": "2020-07-06T21:18:23Z", "committer_date": "2020-07-08T17:26:20Z", "raw_author": {"value": "f2f4d10a554519ea00fb44a5f6377123c59e1f22", "label": "Thomas Sibley"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 140912432, "label": "sqlite-utils"}, "author": {"value": 79913, "label": "tsibley"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "446d47fdb005b3776bc06ad8d1f44b01fc2e938b", "message": "make html title more readable in query template (#180)\n\ntiny tweak to make this easier to visually parse\u2014I think it matches your style in other templates", "author_date": "2018-04-03T15:24:04Z", "committer_date": "2018-04-03T15:24:04Z", "raw_author": {"value": "daa0836007170071f748b575d34c4432f4f43926", "label": "Ryan Pitts"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 56477, "label": "ryanpitts"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "d555baf508de71a5e3dc9a9aed2c13f6f202956d", "message": "Suppress rendering of binary data - thanks @russss (#442)\n\nBinary columns (including spatialite geographies) get shown as ugly\r\nbinary strings in the HTML by default. Nobody wants to see that mess.\r\n\r\nShow the size of the column in bytes instead. If you want to decode\r\nthe binary data, you can use a plugin to do it.", "author_date": "2019-05-03T16:44:48Z", "committer_date": "2019-05-03T16:44:48Z", "raw_author": {"value": "cd9d55c7c0a7cc0ee69155676fd5e9fc6e1b884b", "label": "Russ Garrett"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 45057, "label": "russss"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "bf229c9bd88179c8ec16bd65fd4fb28ab4241c2e", "message": "Pass view_name to extra_body_script hook (#443)\n\nAt the moment it's not easy to tell whether the hook is being called\r\nin (for example) the row or table view, as in both cases the\r\n`database` and `table` parameters are provided.\r\n\r\nThis passes the `view_name` added in #441 to the `extra_body_script`\r\nhook.", "author_date": "2019-05-03T13:12:19Z", "committer_date": "2019-05-03T13:12:19Z", "raw_author": {"value": "cd9d55c7c0a7cc0ee69155676fd5e9fc6e1b884b", "label": "Russ Garrett"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 45057, "label": "russss"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "470cf0b05d4fda0d2563f81c7e32af13fe346ccc", "message": "Add a max-line-length setting for flake8 (#444)\n\nThis stops my automatic editor linting from flagging lines which are too\r\nlong. It's been lingering in my checkout for ages.\r\n\r\n160 is an arbitrary large number - we could alter it if we have any\r\nopinions (but I find the line length limit to be my least favourite part\r\nof PEP8).", "author_date": "2019-05-03T13:11:27Z", "committer_date": "2019-05-03T13:11:27Z", "raw_author": {"value": "cd9d55c7c0a7cc0ee69155676fd5e9fc6e1b884b", "label": "Russ Garrett"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 45057, "label": "russss"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "cf406c075433882b656e340870adf7757976fa4c", "message": "New plugin hook: register_output_renderer hook (#441)\n\nThanks @russss!\r\n\r\n* Add register_output_renderer hook\r\n\r\nThis changeset refactors out the JSON renderer and then adds a hook and\r\ndispatcher system to allow custom output renderers to be registered.\r\n\r\nThe CSV output renderer is untouched because supporting streaming\r\nrenderers through this system would be significantly more complex, and\r\nprobably not worthwhile.\r\n\r\nWe can't simply allow hooks to be called at request time because we need\r\na list of supported file extensions when the request is being routed in\r\norder to resolve ambiguous database/table names. So, renderers need to\r\nbe registered at startup.\r\n\r\nI've tried to make this API independent of Sanic's request/response\r\nobjects so that this can remain stable during the switch to ASGI. I'm\r\nusing dictionaries to keep it simple and to make adding additional\r\noptions in the future easy.\r\n\r\nFixes #440", "author_date": "2019-05-01T23:01:56Z", "committer_date": "2019-05-01T23:01:56Z", "raw_author": {"value": "cd9d55c7c0a7cc0ee69155676fd5e9fc6e1b884b", "label": "Russ Garrett"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 45057, "label": "russss"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "58fec99ab0a31bcf25968f2aa05d37de8139b83c", "message": "Allow app names for `datasette publish heroku`\n\nLets you supply the `-n` parameter for Heroku deploys, which also lets\nyou update existing Heroku deployments.", "author_date": "2018-07-14T13:10:49Z", "committer_date": "2018-07-14T14:04:42Z", "raw_author": {"value": "cd9d55c7c0a7cc0ee69155676fd5e9fc6e1b884b", "label": "Russ Garrett"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 45057, "label": "russss"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "58b5a37dbbf13868a46bcbb284509434e66eca25", "message": "Refactor inspect logic", "author_date": "2018-05-21T08:02:34Z", "committer_date": "2018-05-22T14:03:06Z", "raw_author": {"value": "cd9d55c7c0a7cc0ee69155676fd5e9fc6e1b884b", "label": "Russ Garrett"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 45057, "label": "russss"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "136a70d88741e2a5892c3de437064a9d14494d66", "message": "Add column name classes to