{"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 s, make PK bold", "author_date": "2018-04-17T08:29:48Z", "committer_date": "2018-04-18T01:13:02Z", "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": "0f782dd8dfd7c53a9c20bbd2cb8734bb806d928b", "message": "Additional test asserts", "author_date": "2018-04-16T20:22:04Z", "committer_date": "2018-04-18T01:13:02Z", "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": "4586aa506a054d07e674cde8143a3008e6bc5d78", "message": "Don't duplicate simple primary keys in the link column\n\nWhen there's a simple (single-column) primary key, it looks weird to\nduplicate it in the link column.\n\nThis change removes the second PK column and treats the link column as\nif it were the PK column from a header/sorting perspective.", "author_date": "2018-04-15T21:49:01Z", "committer_date": "2018-04-18T01:13:02Z", "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": "b231d4243d748facf1897e7756c2b578bb448edc", "message": "Correct escaping for HTML display of row links", "author_date": "2018-04-15T21:48:30Z", "committer_date": "2018-04-18T01:13:02Z", "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": "efbb4e83374a2c795e436c72fa79f70da72309b8", "message": "Return HTTP 405 on InvalidUsage rather than 500\n\nThis also stops it filling up the logs. This happens for HEAD requests\nat the moment - which perhaps should be handled better, but that's a\ndifferent issue.", "author_date": "2018-04-14T16:11:16Z", "committer_date": "2018-04-14T18:00:38Z", "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": "f2b940d6026677f6859d46a4f16fa402745d261d", "message": "Link foreign keys which don't have labels\n\nThis renders unlabeled FKs as simple links. I can't see why this would\ncause any major problems.\n\nAlso includes bonus fixes for two minor issues:\n\n* In foreign key link hrefs the primary key was escaped using HTML\n escaping rather than URL escaping. This broke some non-integer PKs.\n* Print tracebacks to console when handling 500 errors.", "author_date": "2018-04-14T13:17:20Z", "committer_date": "2018-04-14T14:59:59Z", "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": "1cc5161089e559c8b16049b20f7a5b3a43290c21", "message": "Fix sqlite error when loading rows with no incoming FKs\n\nThis fixes `ERROR: conn=, sql\n= 'select ', params = {'id': '1'}` caused by an invalid query when\nloading incoming FKs.\n\nThe error was ignored due to async but it still got printed to the\nconsole.", "author_date": "2018-04-14T12:06:00Z", "committer_date": "2018-04-14T14:24:24Z", "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": "ec6abc81e433c9bac1b9f085111785fc227e9e34", "message": "Initial units support\n\nAdd support for specifying units for a column in metadata.json and\nrendering them on display using\n[pint](https://pint.readthedocs.io/en/latest/).\n\nref #203", "author_date": "2018-04-13T21:17:59Z", "committer_date": "2018-04-14T03:32:53Z", "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": "d08a13314081ae2ce0313a17d3c07c1a7f2d94d5", "message": "Hide Spatialite system tables\n\nThey were getting on my nerves.", "author_date": "2018-04-11T21:20:25Z", "committer_date": "2018-04-12T21:34:47Z", "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": "df19a48a3b72a51feb4203c44903451cc9e6c1bf", "message": "Implemented new Natalie design", "author_date": "2020-10-27T18:40:08Z", "committer_date": "2020-10-27T19:39:55Z", "raw_author": {"value": "cb0d330fa68b6a0d1b11370a9dbda0d2b8f4d3aa", "label": "Natalie Downe"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 72973, "label": "natbat"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "6dff22eff8a52253a6c2bdf3e32f082fbf81b921", "message": "Visited link colours", "author_date": "2020-10-27T18:39:35Z", "committer_date": "2020-10-27T19:39:55Z", "raw_author": {"value": "cb0d330fa68b6a0d1b11370a9dbda0d2b8f4d3aa", "label": "Natalie Downe"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 72973, "label": "natbat"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "7d69f1ac02536d9a831d57ce096b96d07e812613", "message": "New header and footer", "author_date": "2020-08-27T21:59:34Z", "committer_date": "2020-10-27T19:39:55Z", "raw_author": {"value": "cb0d330fa68b6a0d1b11370a9dbda0d2b8f4d3aa", "label": "Natalie Downe"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 72973, "label": "natbat"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "931bfc66613aa3e22f8314df5c0d0758baf31f38", "message": "Handle spaces in DB names (#590)\n\nCloses #503 - thanks, @rixx", "author_date": "2019-11-04T23:16:30Z", "committer_date": "2019-11-04T23:16:30Z", "raw_author": {"value": "b90d9715d7c0881515e9d6aa98923ed89d445945", "label": "Tobias Kunze"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 2657547, "label": "rixx"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "ee330222f4c3ee66c2fe41ebc76fed56b9cb9a00", "message": "Offer to format readonly SQL (#602)\n\nFollowing discussion in #601, this PR adds a \"Format SQL\" button to\r\nread-only SQL (if the SQL actually differs from the formatting result).\r\n\r\nIt also removes a console error on readonly SQL queries.\r\n\r\nThanks, @rixx!", "author_date": "2019-11-04T02:39:55Z", "committer_date": "2019-11-04T02:39:55Z", "raw_author": {"value": "b90d9715d7c0881515e9d6aa98923ed89d445945", "label": "Tobias Kunze"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 2657547, "label": "rixx"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "12cec411cae73ba7211429da12cd32c551fe17b1", "message": "Display metadata footer on custom SQL queries (#589)\n\nCloses #408 - thanks, @rixx!", "author_date": "2019-10-14T03:53:21Z", "committer_date": "2019-10-14T03:53:21Z", "raw_author": {"value": "b90d9715d7c0881515e9d6aa98923ed89d445945", "label": "Tobias Kunze"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 2657547, "label": "rixx"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "908fc3999e06f3ccd3bb8ad0539490bbc7809748", "message": "Sort databases on homepage by argument order - #591\n\nCloses #585 - thanks, @rixx!", "author_date": "2019-10-14T03:52:33Z", "committer_date": "2019-10-14T03:52:33Z", "raw_author": {"value": "b90d9715d7c0881515e9d6aa98923ed89d445945", "label": "Tobias Kunze"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 2657547, "label": "rixx"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "af2e6a5cf186a7200d76cb67ac30fa59cc24d84e", "message": "Button to format SQL, closes #136\n\nSQL code will be formatted on page load, and can additionally\r\nbe formatted by clicking the \"Format SQL\" button.\r\n\r\nThanks, @rixx!", "author_date": "2019-10-14T03:46:12Z", "committer_date": "2019-10-14T03:46:12Z", "raw_author": {"value": "b90d9715d7c0881515e9d6aa98923ed89d445945", "label": "Tobias Kunze"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 2657547, "label": "rixx"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "bd30c696e18927207358ee9d63174a5c41c8297e", "message": "Build Dockerfile with recent Sqlite + Spatialite (#280)\n\nCloses #278\r\n\r\n```bash\r\n $ docker run --rm -it datasette spatialite\r\n SpatiaLite version ..: 4.4.0-RC0\tSupported Extensions:\r\n - 'VirtualShape'\t[direct Shapefile access]\r\n - 'VirtualDbf'\t\t[direct DBF access]\r\n - 'VirtualXL'\t\t[direct XLS access]\r\n - 'VirtualText'\t\t[direct CSV/TXT access]\r\n - 'VirtualNetwork'\t[Dijkstra shortest path]\r\n - 'RTree'\t\t[Spatial Index - R*Tree]\r\n - 'MbrCache'\t\t[Spatial Index - MBR cache]\r\n - 'VirtualSpatialIndex'\t[R*Tree metahandler]\r\n - 'VirtualElementary'\t[ElemGeoms metahandler]\r\n - 'VirtualKNN'\t[K-Nearest Neighbors metahandler]\r\n - 'VirtualXPath'\t[XML Path Language - XPath]\r\n - 'VirtualFDO'\t\t[FDO-OGR interoperability]\r\n - 'VirtualGPKG'\t[OGC GeoPackage interoperability]\r\n - 'VirtualBBox'\t\t[BoundingBox tables]\r\n - 'SpatiaLite'\t\t[Spatial SQL - OGC]\r\n PROJ.4 version ......: Rel. 4.9.3, 15 August 2016\r\n GEOS version ........: 3.5.1-CAPI-1.9.1 r4246\r\n TARGET CPU ..........: x86_64-linux-gnu\r\n the SPATIAL_REF_SYS table already contains some row(s)\r\n SQLite version ......: 3.23.1\r\n Enter \".help\" for instructions\r\n SQLite version 3.23.1 2018-04-10 17:39:29\r\n Enter \".help\" for instructions\r\n Enter SQL statements terminated with a \";\"\r\n spatialite>\r\n```\r\n\r\n```bash\r\n$ docker run --rm -it datasette python -c \"import sqlite3; print(sqlite3.sqlite_version)\"\r\n3.23.1\r\n```\r\n\r\nAlso updates the query used to check for FTS5 as the old version wasn't\r\ndetecting FTS5 for some reason.", "author_date": "2018-05-23T17:43:34Z", "committer_date": "2018-05-23T17:43:34Z", "raw_author": {"value": "a901819e7fab7b80a873df43d5123bb3252681f8", "label": "Ravi Kotecha"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 565628, "label": "r4vi"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "405e092d5916e70df10f82d15e9c052aa9ee8d80", "message": "Option to add triggers when enabling FTS (#57)\n\n--create-triggers CLI option and create_triggers=True in the Python library\r\n\r\n* Add an option to create triggers for fts table.\r\n* Add cli option for the create-update-trigger.\r\n* Add tests for the create-update-trigger option.\r\n* Change FTS table escaping to square brackets.", "author_date": "2019-09-02T23:42:28Z", "committer_date": "2019-09-02T23:42:28Z", "raw_author": {"value": "a83a9ad7fdcc8d400257ebb4c5d09638aa09f73b", "label": "Amjith Ramanujam"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 140912432, "label": "sqlite-utils"}, "author": {"value": 49260, "label": "amjith"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "a113c28ea1924d83e6789ae5e0805312e55b4490", "message": "Add version number support with Versioneer\n\nRepo:\nhttps://github.com/warner/python-versioneer\n\nVersioneer Licence:\nPublic Domain (CC0-1.0)\n\nCloses #273", "author_date": "2018-05-22T15:33:29Z", "committer_date": "2018-05-22T19:35:21Z", "raw_author": {"value": "a1a72b19e432a3145fdb845aab2927c00d8a8426", "label": "Robert Gieseke"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 198537, "label": "rgieseke"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "8b4c600d98b85655b3a1454ebf64f858b5fe54c8", "message": "Add spatialite, switch to debian and local build (#114)", "author_date": "2017-11-17T03:50:51Z", "committer_date": "2017-11-17T03:50:51Z", "raw_author": {"value": "959507cc7596b555bf4292e84f335b02cca843f8", "label": "Ariel N\u00fa\u00f1ez"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 54999, "label": "ingenieroariel"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "66c87cee0c7344c7877373c60b180c766c206101", "message": "Mark codemirror files as vendored (#367)\n\nThis should stop GitHub from incorrectly stating that Datasette is 46% JavaScript.", "author_date": "2019-05-03T21:11:19Z", "committer_date": "2019-05-03T21:11:19Z", "raw_author": {"value": "93b11f15fd4dc15002baf3d9160dc6eb928bd883", "label": "Jaap Roes"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 48517, "label": "jaap3"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "f853d5592ec7f901a50381de22a26a9ab098f885", "message": "\"python3 -m pip\" is clearer (thanks @jaap3) (#368)", "author_date": "2019-05-03T18:18:42Z", "committer_date": "2019-05-03T18:18:42Z", "raw_author": {"value": "93b11f15fd4dc15002baf3d9160dc6eb928bd883", "label": "Jaap Roes"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 48517, "label": "jaap3"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "75a21fc2a136ccfc9da7bbf521cf288e63c9707f", "message": "datasette publish cloudrun (#434) - thanks, @rprimet\n\nNew publish subcommand that publishes using the\r\nnew Google Cloud Run platform.\r\n\r\n datasette publish cloudrun database.db", "author_date": "2019-05-03T13:59:01Z", "committer_date": "2019-05-03T13:59:01Z", "raw_author": {"value": "8ff51bbea01fdafe1fb3502111343b563f7d5a1b", "label": "Romain Primet"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 10352819, "label": "rprimet"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "a971718d2a5e1b61b5e5c27b0ef6c4ec65616e35", "message": "Fix a typo (#232)", "author_date": "2018-04-21T00:19:07Z", "committer_date": "2018-04-21T00:19:07Z", "raw_author": {"value": "8795af7c0eb348f1248a81917921e4a7d768bee3", "label": "lsb"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 45281, "label": "lsb"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "8252daa4c14d73b4b69e3f2db4576bb39d73c070", "message": "SQL syntax highlighting with Codemirror (#89)", "author_date": "2017-11-15T02:03:00Z", "committer_date": "2017-11-15T02:03:00Z", "raw_author": {"value": "842b8095c01bad0cc95c5ee2e93d83bf3945daa0", "label": "Tom Dyson"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 15543, "label": "tomdyson"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "70d2858067d3c4da0e17c1d39e03de89190e94b6", "message": "Doc typo fix (#479)", "author_date": "2019-05-20T16:42:28Z", "committer_date": "2019-05-20T16:42:28Z", "raw_author": {"value": "798007d3f9547f7bcb9228088222d35f30b5b716", "label": "Thomas Wood"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 98555, "label": "IgnoredAmbience"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "27cb29365c9f5f6f1492968d1268497193ed75a2", "message": "Fix numerous typos (#561)\n\nThanks, @minho42!", "author_date": "2019-07-26T10:25:44Z", "committer_date": "2019-07-26T10:25:44Z", "raw_author": {"value": "710d89efa471054d77ad1b7e2b26e2e78e1153e7", "label": "Min ho Kim"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 15278512, "label": "minho42"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "848dec4deb0d3c140a4e0394cac45fbb2593349b", "message": "Fix for datasette publish with just --source_url (#631)\n\nCloses #572", "author_date": "2019-11-13T04:28:42Z", "committer_date": "2019-11-13T04:28:42Z", "raw_author": {"value": "6c3a98f05c13cf31297e605e4d584d20fc12ab6b", "label": "Stanley Zheng"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 3683993, "label": "qwo"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "ed78922ae38b51513319b60ac39990b7c2aca810", "message": "Tiny typo in customization docs (#390)\n\nThanks, @jaywgraves", "author_date": "2018-12-16T21:32:55Z", "committer_date": "2018-12-16T21:32:55Z", "raw_author": {"value": "6410ac01839c113476668eeff88d60a0a2c6eb7a", "label": "Jay Graves"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 418191, "label": "jaywgraves"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "1bcd54a834a2f9730d21095df855f6708c85c200", "message": "Fix small doc typo - thanks @jaywgraves (#365)", "author_date": "2018-09-19T17:15:42Z", "committer_date": "2018-09-19T17:15:42Z", "raw_author": {"value": "6410ac01839c113476668eeff88d60a0a2c6eb7a", "label": "Jay Graves"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 418191, "label": "jaywgraves"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "aa911122feab13f8e65875c98edb00fd3832b7b8", "message": "Fix typo in install step: should be install -e (#500)", "author_date": "2019-06-11T18:48:40Z", "committer_date": "2019-06-11T18:48:40Z", "raw_author": {"value": "6067f58a7236b3d01e4166f795a161c7469a447c", "label": "Tom MacWright"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 32314, "label": "tmcw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "9f8d9fe262866ff3463f8e61214dcc6897bd5a9c", "message": "setup: add tests to package exclusion (#458)", "author_date": "2019-05-10T01:54:50Z", "committer_date": "2019-05-10T01:54:50Z", "raw_author": {"value": "5e571aa122bb7440d7e40e22fd627b3fbbf12c38", "label": "Veit Heller"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 7725188, "label": "hellerve"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "f4c0830529a9513a83437a9e1550bbe27ebc5c64", "message": "Always pop as_format off args dict (#603)\n\nCloses #563. Thanks, @chris48s", "author_date": "2019-10-21T02:03:08Z", "committer_date": "2019-10-21T02:03:08Z", "raw_author": {"value": "5a0a3d8ffa3a5fa7036ede67cc44274222c2f074", "label": "chris48s"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 6025893, "label": "chris48s"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "9e8c36793bfbb17c2f67371cc7f9aa8b9202fdc4", "message": "Update spatialite.rst (#413)\n\na line of sql added to create the idx_ in the python recipe", "author_date": "2019-03-15T05:06:45Z", "committer_date": "2019-03-15T05:06:45Z", "raw_author": {"value": "41e868c44ebf155cd4e69182c407f1d278d635ce", "label": "joelondon"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 28597217, "label": "joelondon"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "3a56a2cd7eea5d477d5d936b01098be5cba0d98e", "message": "Add metadata, if it exists, to heroku temp dir (#178)", "author_date": "2018-01-14T21:05:16Z", "committer_date": "2018-01-14T21:05:16Z", "raw_author": {"value": "38fee63c62808d1ea42ad2bb2db074f9301d2840", "label": "Tony Hirst"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 82988, "label": "psychemedia"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "74ecf8a7cc45cabf369e510c7214f5ed85c8c6d8", "message": "Fix static mounts using relative paths and prevent traversal exploits (#554)\n\nThanks, @abdusco! Closes #555", "author_date": "2019-07-11T16:13:19Z", "committer_date": "2019-07-11T16:13:19Z", "raw_author": {"value": "3684ad6084bc36bc5a059f0d6eb929bcf9854536", "label": "Abdus"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 3243482, "label": "abdusco"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "9ca860e54fe480d0a365c0c1d8d085926d12be1e", "message": "Add support for running datasette as a module (#556)\n\npython -m datasette\r\n\r\nThanks, @abdusco", "author_date": "2019-07-11T16:07:44Z", "committer_date": "2019-07-11T16:07:44Z", "raw_author": {"value": "3684ad6084bc36bc5a059f0d6eb929bcf9854536", "label": "Abdus"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 3243482, "label": "abdusco"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "86755503d26b4a83c2ec59f08ec1b8de791fd954", "message": "Initial add simple prod ready Dockerfile refs #57 (#94)", "author_date": "2017-11-15T03:08:04Z", "committer_date": "2017-11-15T03:08:04Z", "raw_author": {"value": "2d9fb90ab683bec9ad9389c88bb10f454886e986", "label": "Andrew Cutler"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 247192, "label": "macropin"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "28a52fcffb869f5e83ca2fad53738dc25eec425d", "message": "Set theme jekyll-theme-architect", "author_date": "2018-05-24T16:56:21Z", "committer_date": "2018-05-24T16:56:21Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "3d9baf3c2f2f745e6949973f18480092f189116c", "message": "Set theme jekyll-theme-leap-day", "author_date": "2018-05-24T16:55:19Z", "committer_date": "2018-05-24T16:55:19Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "dd4491dd8112d70d96d73f8f1d12b58cb42fe1bd", "message": "Update number of expected tables", "author_date": "2018-04-14T15:03:41Z", "committer_date": "2018-04-14T15:16:54Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "f96e55bce55d26c4d5b198edc536e1b8e9bbea43", "message": "Fix pytest version conflict\n\nhttps://travis-ci.org/simonw/datasette/jobs/305929426\r\n\r\n pkg_resources.VersionConflict: (pytest 3.2.1 (/home/travis/virtualenv/python3.5.3/lib/python3.5/site-packages), \r\n Requirement.parse('pytest==3.2.3'))", "author_date": "2017-11-22T20:15:29Z", "committer_date": "2017-11-22T20:17:51Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "1b04662585ea1539014bfbd616a8112b650d5699", "message": "Table views now show expanded foreign key references, if possible\n\nIf a table has foreign key columns, and those foreign key tables have\nlabel_columns, the TableView will now query those other tables for the\ncorresponding values and display those values as links in the corresponding\ntable cells.\n\nlabel_columns are currently detected by the inspect() function, which looks\nfor any table that has just two columns - an ID column and one other - and\nsets the label_column to be that second non-ID column.", "author_date": "2017-11-18T03:09:32Z", "committer_date": "2017-11-18T03:15:49Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "6a007f632258e6cfd3c5e9e229683deb0efd87be", "message": "Row pages show incoming foreign key relationships", "author_date": "2017-11-17T18:15:44Z", "committer_date": "2017-11-18T03:15:49Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "7feb746efe8c5ed80f477475acc546370bae89e4", "message": "Fixed bug where 0 values were showing up blank", "author_date": "2017-11-17T18:14:01Z", "committer_date": "2017-11-18T03:15:49Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "0b702f3679a2ffd4e3efb5c34b9fe30221172ccb", "message": "Fixed weird edge-case with foreign key detection\n\nIt turns out it is possible for a SQLite table to define a foreign key\nrelationship to a table that does not actually exist\n\nWe should still be able to handle these databases.", "author_date": "2017-11-17T16:18:26Z", "committer_date": "2017-11-17T16:18:26Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "45e502aace6cc1198cc5f9a04d61b4a1860a012b", "message": "Added unit tests for inspect() foreign key detection\n\nUsed them to fix a bug with it.\n\nRefs #85", "author_date": "2017-11-17T16:08:11Z", "committer_date": "2017-11-17T16:08:11Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "e16ca1169cc49fbb5b0325564d248becad3a4b7f", "message": "Refactored table column/row display logic\n\nSimplified the template and made the way for upcoming foreign key work.\n\nRefs #85\n\nAlso fixed   bug on database page - closes #113", "author_date": "2017-11-17T15:39:36Z", "committer_date": "2017-11-17T15:39:36Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "084350b0f1343d988928cae63cfedbeb6205e25e", "message": "Switched to gather_request=False for Sanic tests\n\nGets rid of those ugly _, response = lines.", "author_date": "2017-11-17T14:53:37Z", "committer_date": "2017-11-17T14:53:37Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "f3445e2d13e2c38bfbf75f35c2aa3e50df0040f1", "message": "Install python3-dev rothar than python-dev", "author_date": "2017-11-17T14:18:49Z", "committer_date": "2017-11-17T14:18:49Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "1a6cfcc10f9abcc743b45437996c7264cc2a57b2", "message": "Added a .dockerignore\n\nFigured this would be useful while testing out 03572ae3557", "author_date": "2017-11-17T14:18:23Z", "committer_date": "2017-11-17T14:18:23Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "03572ae35573c2ea802a540624ce116f540ba1ac", "message": "Allow --load-extension to be set via environment variable\n\nI tesed this by first building and running a container using the new\nDockerfile from #114:\n\n docker build .\n docker run -it -p 8001:8001 6c9ca7e29181 /bin/sh\n\nThen I ran this inside the container itself:\n\n apt update && apt-get install wget -y \\\n && wget http://www.gaia-gis.it/spatialite-2.3.1/test-2.3.sqlite.gz \\\n && gunzip test-2.3.sqlite.gz \\\n && mv test-2.3.sqlite test23.sqlite \\\n && datasette -h 0.0.0.0 test23.sqlite\n\nI visited this URL to confirm I got an error due to spatialite not being\nloaded:\n\nhttp://localhost:8001/test23-c88bc35?sql=select+ST_AsText%28Geometry%29+from+HighWays+limit+1\n\nThen I checked that loading it with `--load-extension` worked correctly:\n\n datasette -h 0.0.0.0 test23.sqlite \\\n --load-extension=/usr/lib/x86_64-linux-gnu/mod_spatialite.so\n\nThen, finally, I tested it with the new environment variable option:\n\n SQLITE_EXTENSIONS=/usr/lib/x86_64-linux-gnu/mod_spatialite.so \\\n datasette -h 0.0.0.0 test23.sqlite\n\nRunning it with an invalid environment variable option shows an error:\n\n $ SQLITE_EXTENSIONS=/usr/lib/x86_64-linux-gnu/blah.so datasette \\\n -h 0.0.0.0 test23.sqlite\n Usage: datasette -h [OPTIONS] [FILES]...\n\n Error: Invalid value for \"--load-extension\": Path \"/usr/lib/x86_64-linux-gnu/blah.so\" does not exist.\n\nCloses #112", "author_date": "2017-11-17T14:13:35Z", "committer_date": "2017-11-17T14:13:35Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "b7c4165346ee8b6a6fbd72d6ba2275a24a8a8ae3", "message": "Added --load-extension argument to datasette serve\n\nAllows loading of SQLite extensions. Refs #110.", "author_date": "2017-11-16T16:46:04Z", "committer_date": "2017-11-16T16:48:49Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "9e27b2a0ba45d92e198fcbac8641da41a62236b8", "message": "Add example of named parameter UI to the release notes", "author_date": "2017-11-16T16:09:07Z", "committer_date": "2017-11-16T16:46:25Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "a9138f044a4d73256c2244243d4e2908d77d218e", "message": "Added date to most recent changelog entry", "author_date": "2017-11-16T15:40:43Z", "committer_date": "2017-11-16T15:40:43Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "51bdd67691bd69082ae7690af8b905f06050ee80", "message": "Changelog for 0.12 release", "author_date": "2017-11-16T15:37:46Z", "committer_date": "2017-11-16T15:37:46Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "01e0c3fa18cd0dd7970e208790ffd683a420c924", "message": "Fixed   bug\n\n  was showing for all None values in table cells, thanks to the\nautoescaping change introduced in 82261a638bd35c9", "author_date": "2017-11-16T15:29:52Z", "committer_date": "2017-11-16T15:29:52Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "228bce83a37b4bee633f674b802aee13fe5b2f44", "message": "Added __version__, bumped it to 0.12\n\nCloses #108", "author_date": "2017-11-16T15:20:54Z", "committer_date": "2017-11-16T15:20:54Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "e6ca88588395a9b8266c0e14121668990d34ff67", "message": "Added initial docs, including a changelog\n\nDocs initialized using this helpful guide:\n\nhttp://docs.readthedocs.io/en/latest/getting_started.html\n\nI used https://pypi.python.org/pypi/gitchangelog to kick-start the changelog.\n\nCloses #99\n\nRefs #109", "author_date": "2017-11-16T15:11:00Z", "committer_date": "2017-11-16T15:11:00Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "9199945a1bcec4852e1cb866eb3642614dd32a48", "message": "Fixed 500 on views page\n\nBug introduced in a4af532a31ece7095d710a1f5abb39ea93fe003f\n\nRefs 85", "author_date": "2017-11-16T14:46:49Z", "committer_date": "2017-11-16T14:46:49Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "82261a638bd35c9d69a9582a898cf4dab374f76c", "message": "Turn on auto-escaping in Jinja\n\nWe had XSS holes! Since we don't do cookies or authentication\nthey shouldn't cause any actual harm, but still really not good.\n\nhttps://github.com/pallets/jinja/issues/528", "author_date": "2017-11-16T01:59:42Z", "committer_date": "2017-11-16T01:59:42Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "a4af532a31ece7095d710a1f5abb39ea93fe003f", "message": "Include foreign key info in inspect() output\n\nRefs #85", "author_date": "2017-11-16T01:34:32Z", "committer_date": "2017-11-16T01:34:32Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "5d8084a28578da2aefa79ad81df9d82e2c265666", "message": "Added a UI for editing named parameters\n\nFixes #96", "author_date": "2017-11-16T01:32:48Z", "committer_date": "2017-11-16T01:32:48Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "9f47b6e4d80f0f393cf0167a6f48280de6847d1d", "message": "Pin to specific Jinja version\n\nCloses #100", "author_date": "2017-11-16T00:14:07Z", "committer_date": "2017-11-16T00:14:07Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "f45ca30f91b92ac68adaba893bf034f13ec61ced", "message": "Fixed bug with datasette package --metadata\n\nCloses #84", "author_date": "2017-11-15T05:18:29Z", "committer_date": "2017-11-15T05:18:29Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "ea183b2ae3d557a370628e236fe606717c704e2a", "message": "Default to 127.0.0.1 not 0.0.0.0\n\nCloses #98", "author_date": "2017-11-15T05:08:46Z", "committer_date": "2017-11-15T05:08:46Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "7fe1e8b4827aa1d7e72825da563effdf44ae7233", "message": "Added extra metadata options to publish and package commands\n\nYou can now run these commands like so:\n\n datasette now publish mydb.db \\\n --title=\"My Title\" \\\n --source=\"Source\" \\\n --source_url=\"http://www.example.com/\" \\\n --license=\"CC0\" \\\n --license_url=\"https://creativecommons.org/publicdomain/zero/1.0/\"\n\nThis will write those values into the metadata.json that is packaged with the\napp. If you also pass --metadata= that file will be updated with the extra\nvalues before being written into the Docker image.\n\nCloses #92", "author_date": "2017-11-15T05:02:11Z", "committer_date": "2017-11-15T05:02:11Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "9cb69cbd45ed8fd93190c47060c19abec80bc4ef", "message": "New ?_sql_time_limit_ms=10 argument to database and table page\n\nAllows callers to opt for a lower time limit.\n\nCloses #95", "author_date": "2017-11-15T02:55:10Z", "committer_date": "2017-11-15T02:55:10Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "0b8c1b0a6da9cb8ac0d28cc90dd783de87554036", "message": "Test for sql_time_limit_ms + sqlite_functions mechanism\n\nAdded a unit test for the sql_time_limit_ms option.\n\nTo test this, I needed to add a custom SQLite sleep() function. I've added a\nsimple mechanism to the Datasette class for registering custom functions.\n\nI also had to modify the sqlite_timelimit() function. It makes use of a magic\nvalue, N, which is the number of SQLite virtual machine instructions that\nshould execute in between calls to my termination decision function.\n\nThe value of N was not finely grained enough for my test to work - so I've\nadded logic that says that if the time limit is less than 50ms, N is set to 1.\nThis got the tests working.\n\nRefs #95", "author_date": "2017-11-15T02:41:03Z", "committer_date": "2017-11-15T02:43:34Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "4f7281af8ce421d2f8c57ba43108261ba89d2cd6", "message": "Apply a default height to CodeMirror\n\nMakes it a bit more obvious that it's an editable textarea even\nif the SQL in it is only one line long.", "author_date": "2017-11-15T02:04:04Z", "committer_date": "2017-11-15T02:04:04Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "cbb59e3801868e1c284ad50b66343cd4358e516c", "message": "Handle tables with names that start with digits", "author_date": "2017-11-14T18:13:37Z", "committer_date": "2017-11-15T02:03:21Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "b0f3d4e375655f0764f3137dbcede324f9bbc0cb", "message": "Version 0.11", "author_date": "2017-11-14T01:48:22Z", "committer_date": "2017-11-14T01:48:22Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "fc7c04fe0b2f9daf8875ccaa9625ec80d8eeafe2", "message": "Added 'datasette publish now --force' option\n\nThis calls now with --force - which is useful as it means you get a fresh copy of\ndatasette even if now has already cached that docker layer.", "author_date": "2017-11-14T01:48:03Z", "committer_date": "2017-11-14T01:48:03Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "00527e5c629d9dae56d6228891b40105ff0e34c6", "message": "Enable --cors by default in containers", "author_date": "2017-11-14T01:23:22Z", "committer_date": "2017-11-14T01:23:22Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "5928c11ee798a232aa4096706cd47e639d1c9fc2", "message": "Version 0.10", "author_date": "2017-11-14T00:45:23Z", "committer_date": "2017-11-14T00:45:23Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "50e817801f90d07468ea394ef562d55d8940d124", "message": "Fixed #83\n\nTurns out we had a redirect bug as well.", "author_date": "2017-11-14T00:44:08Z", "committer_date": "2017-11-14T00:44:43Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "44a199a0625b695492b2a8605030dc61191f39cb", "message": "Stop using sqlite WITH RECURSIVE in our tests\n\nThe version of Python 3 running in Travis CI doesn't support this.", "author_date": "2017-11-13T22:15:21Z", "committer_date": "2017-11-13T22:15:21Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "d75f423b6fcfc074b7c6f8f7679da8876f181edd", "message": "Release 0.9", "author_date": "2017-11-13T22:00:39Z", "committer_date": "2017-11-13T22:00:53Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "1e698787a4dd6df0432021a6814c446c8b69bba2", "message": "Added --sql_time_limit_ms and --extra-options\n\nThe serve command now accepts --sql_time_limit_ms for customizing the SQL time\nlimit.\n\nThe publish and package commands now accept --extra-options which can be used\nto specify additional options to be passed to the datasite serve command when\nit executes inside the rusulting Docker containers.", "author_date": "2017-11-13T21:58:34Z", "committer_date": "2017-11-13T22:00:53Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "fe279ab7b4ae99dab295d5cf4d39ad06d782997e", "message": "v0.8 - added PyPI metadata, ready to ship", "author_date": "2017-11-13T21:17:34Z", "committer_date": "2017-11-13T21:17:34Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "847f3e0c92b5ac17200b2090bedcc5443bb08e4b", "message": "Implemented offset/limit pagination for views\n\nCloses #70", "author_date": "2017-11-13T21:10:55Z", "committer_date": "2017-11-13T21:10:55Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "7dac1c05cd40f89a5af34763e4d5614c750575c2", "message": "Improved pagination\n\nCloses #78", "author_date": "2017-11-13T20:34:56Z", "committer_date": "2017-11-13T20:34:56Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "d76412668f8c12572eb7de57ccb72f1e50306177", "message": "Removed rogue middot", "author_date": "2017-11-13T20:34:39Z", "committer_date": "2017-11-13T20:34:39Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "79216bac12668eb90ccad65086d4f129476a3969", "message": "Added some breathing room to the footer", "author_date": "2017-11-13T19:38:20Z", "committer_date": "2017-11-13T19:38:20Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "8252e71da461c425e625e1c3e4ee0bd92ea4cbf0", "message": "Limit on max rows returned, controlled by --max_returned_rows option\n\nIf someone executes 'select * from table' against a table with a million rows\nin it, we could run into problems: just serializing that much data as JSON is\nlikely to lock up the server.\n\nSolution: we now have a hard limit on the maximum number of rows that can be\nreturned by a query. If that limit is exceeded, the server will return a\n`\"truncated\": true` field in the JSON.\n\nThis limit can be optionally controlled by the new `--max_returned_rows`\noption. Setting that option to 0 disables the limit entirely.\n\nCloses #69", "author_date": "2017-11-13T19:33:01Z", "committer_date": "2017-11-13T19:33:01Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "6b3b05b6db0d2a7b7cec8b8dbb4ddc5e12a376b2", "message": "Released 0.7", "author_date": "2017-11-13T18:42:30Z", "committer_date": "2017-11-13T18:42:30Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "e838bd743d31358b362875854a0ac5e78047727f", "message": "Added README and improved help for 'datasette serve'", "author_date": "2017-11-13T18:41:53Z", "committer_date": "2017-11-13T18:41:59Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}} {"sha": "20d41c8e8e84ab3e8bdb5cca9bd9799da09794ad", "message": "publish now takes a required publisher argument - only current option is 'now'\n\nCloses #76", "author_date": "2017-11-13T18:40:51Z", "committer_date": "2017-11-13T18:40:51Z", "raw_author": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 9599, "label": "simonw"}, "committer": {"value": 9599, "label": "simonw"}}