{"sha": "80ada4dbb3b7a19e6a0480570f38758d17b87f8b", "message": "Added 'datasette --version' support\n\nUsing http://click.pocoo.org/5/api/#click.version_option", "author_date": "2017-11-19T05:59:16Z", "committer_date": "2017-11-19T05:59:16Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "f59c840e7db8870afcdeba7a53bdea07bb674334", "message": "Show row count for custom SQL queries", "author_date": "2017-11-19T15:54:50Z", "committer_date": "2017-11-19T15:54:50Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "eed6a0fe36120948f8bbc0596185300eadc3d2f4", "message": "Implemented ?_search=XXX + UI if a FTS table is detected\n\nCloses #131", "author_date": "2017-11-19T16:59:26Z", "committer_date": "2017-11-19T16:59:26Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "ddc808f387be62cf776b815bb0eda77616c412ae", "message": "Added --build=master option to datasette publish and package\n\nThe `datasette publish` and `datasette package` commands both now accept an\noptional `--build` argument. If provided, this can be used to specify a branch\npublished to GitHub that should be built into the container.\n\nThis makes it easier to test code that has not yet been officially released to\nPyPI, e.g.:\n\n datasette publish now mydb.db --branch=master", "author_date": "2017-11-19T18:20:17Z", "committer_date": "2017-11-19T18:20:17Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "386fb11d42767039bb2b389ce98996673d780a42", "message": "?_filter_column=col&_filter_op=op&_filter_value=value redirect\n\nPart of implementing the filters UI (refs #86) - the following:\n\n /trees/Trees?_filter_column=SiteOrder&_filter_op=gt&_filter_value=2\n\nNow redirects to this;\n\n /trees/Trees?SiteOrder__gt=2", "author_date": "2017-11-19T20:25:29Z", "committer_date": "2017-11-19T20:25:29Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "a5881e105a02830d26f07e98177248d5910893da", "message": "?_filter_column=col&_filter_op=isnull__1 redirect\n\nif filter_op contains a __ the value is set to the right hand side.\n\ne.g.\n\n ?_filter_column=col&_filter_op=isnull__1&_filter_value=x\n\nRedirects to:\n\n ?col__isnull=1\n\nRefs #86", "author_date": "2017-11-19T20:33:30Z", "committer_date": "2017-11-19T20:33:30Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "523c6f9e3a2cb9a9b5627ee2951147110e91d499", "message": "Fixed bug with FTS against tables with hyphens in the name", "author_date": "2017-11-20T05:59:53Z", "committer_date": "2017-11-20T05:59:53Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "b4e6211a9729b5df340c6e210177ee86098b8480", "message": "Refactored filter logic and added human descriptions - refs #86", "author_date": "2017-11-20T06:03:24Z", "committer_date": "2017-11-20T06:03:24Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "771b0ee34789750fdec176c3129eeaa6a6523041", "message": "Initial implementation of ?_group_count=column\n\nURL shortcut for counting rows grouped by one or more columns.\n\n?_group_count=column1&_group_count=column2 works as well.\n\nSQL generated looks like this:\n\n select \"qSpecies\", count(*) as \"count\"\n from Street_Tree_List\n group by \"qSpecies\"\n order by \"count\" desc limit 100\n\nOr for two columns like this:\n\n select \"qSpecies\", \"qSiteInfo\", count(*) as \"count\"\n from Street_Tree_List\n group by \"qSpecies\", \"qSiteInfo\"\n order by \"count\" desc limit 100\n\nRefs #44\n\nStill todo: clean up code a bunch (it currently fakes being a 'view'), get\nforeign key expansion working.", "author_date": "2017-11-20T06:04:13Z", "committer_date": "2017-11-20T06:04:13Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "0331666e346c68b86de4aa19fbb37f3a408d37ca", "message": "?_search=x now works directly against fts virtual table\n\nCloses #135", "author_date": "2017-11-20T06:18:07Z", "committer_date": "2017-11-20T06:18:07Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "a9b9d427915adc133814a022e554f042d5d82d4d", "message": "Mark FTS-related tables as 'hidden' in inspect()\n\nRefs #129", "author_date": "2017-11-20T16:57:41Z", "committer_date": "2017-11-21T20:55:59Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "fb505de11c882fa7f2522160509172561b5b8270", "message": "Back-ported format strings for compatibility with Py 3.5\n\nAlso fixed a encoding error where Heroku --json return needs to be treated as UTF8", "author_date": "2017-11-22T17:42:29Z", "committer_date": "2017-11-22T17:42:29Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "1c8638c30ae9b1e59dd045cf6d0b20e6dc630e5b", "message": "Hide FTS-created tables on index pages\n\nCloses #129", "author_date": "2017-11-22T20:12:15Z", "committer_date": "2017-11-22T20:18:57Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "c8e7c85fd3db46081d61d6071ab1140e8291325e", "message": "Updated test_database_page test", "author_date": "2017-11-22T20:25:51Z", "committer_date": "2017-11-22T20:25:51Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "53534b6e9d3956cdb6aa9c062d2beffdd89fa7d9", "message": "Even more complicated redirect scheme\n\nThis:\n\n ?_filter_column_1=name&_filter_op_1=contains&_filter_value_1=hello\n &_filter_column_2=age&_filter_op_2=gte&_filter_value_2=12\n\nNow redirects to this:\n\n ?name__contains=hello&age__gte=12\n\nThis is needed for the filter editing interface, refs #86", "author_date": "2017-11-23T04:03:46Z", "committer_date": "2017-11-23T04:03:46Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "0071b5d6f5c97b9896dbcfc8f95ca0db8652a18a", "message": "Added UI for editing table filters\n\nRefs #86", "author_date": "2017-11-23T04:33:55Z", "committer_date": "2017-11-23T04:33:55Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "82c20ea36eb86fc68a48f219e96305477864d589", "message": "Added '- pick a column -' as first option", "author_date": "2017-11-23T04:39:53Z", "committer_date": "2017-11-23T04:39:53Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "72e328dccf6def3328290a1a6cd7e7ab22ab0de2", "message": "Removed rogue print statement", "author_date": "2017-11-23T04:40:15Z", "committer_date": "2017-11-23T04:40:15Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "38dc1ef73b13e5ae9f05ca5e7c86fa3eb639e628", "message": "Show linked foreign key in table cells", "author_date": "2017-11-23T04:43:27Z", "committer_date": "2017-11-23T04:43:27Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "2f97834d0e47fdcd160bab6a3eb1ffd2f836771d", "message": "NBSP before ID display", "author_date": "2017-11-23T04:45:04Z", "committer_date": "2017-11-23T04:45:04Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "a74e455cede3070db4138500ba0d3f354d58c436", "message": "Custom styled select boxes for filters\n\nRefs #86", "author_date": "2017-11-23T15:58:55Z", "committer_date": "2017-11-23T15:58:55Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "22b91dd95be59148c02991a1bb56df6d82f45b6f", "message": "Further tweaks to select/input filter styling\n\nRefs #86 - thanks for the help, @natbat!", "author_date": "2017-11-23T20:05:51Z", "committer_date": "2017-11-23T20:05:51Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "ef3eacf622e69723d48ab1ad597645770a7361db", "message": "Select option for removing filters", "author_date": "2017-11-23T20:32:54Z", "committer_date": "2017-11-23T20:32:54Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "77088876813fea833b6fc3eb588ecc9b02f0a7d7", "message": "Tweaked styling of submit buttons and search box", "author_date": "2017-11-23T20:39:26Z", "committer_date": "2017-11-23T20:39:26Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "a30c5b220c15360d575e94b0e67f3255e120b916", "message": "Fixed bug on rows page, added unit test\n\nRows page for rows that linked to the same table in more\nthan one columns were display incorrectly. Fixed that and added a test.\n\nAlso introduced /db/table/row-pk.json?_extras=foreign_key_tables\n\nThis is used by the new unit test, but is the first example of a new\n?_extras=comma-separated-list pattern I am introducing.", "author_date": "2017-11-23T21:09:45Z", "committer_date": "2017-11-23T21:09:45Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "4b7596ee5caf68c9b1acd17866f88a57b23db3c4", "message": "Row page now resolves foreign keys\n\nCloses #132", "author_date": "2017-11-23T21:51:16Z", "committer_date": "2017-11-23T21:51:16Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "b45077839100a57adbc284ad5bf555002da819e8", "message": "Added column__not=blah filter\n\nCloses #148", "author_date": "2017-11-23T22:09:50Z", "committer_date": "2017-11-23T22:09:50Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "ab32bd64272886440c92c2fff846faa35b761158", "message": "Fixed bug with params other than p0\n\np1 and upwards were not correctly extracted.", "author_date": "2017-11-24T21:55:00Z", "committer_date": "2017-11-24T21:55:00Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "a53d09d91910e4af5552a6c1e73d1468a67b7962", "message": "Show count of matching rows on table view\n\nCloses #127", "author_date": "2017-11-24T22:01:53Z", "committer_date": "2017-11-24T22:01:53Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "8a37baba14bc00d782fb6701d1f32e1687f10305", "message": "Much tidier design for table view header\n\nCloses #147", "author_date": "2017-11-24T22:02:39Z", "committer_date": "2017-11-24T22:02:39Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "a802cbee74d8c83876375890d914252f1adb1c96", "message": "Search now applies to current filters\n\nCombined search into the same form as filters.\n\nCloses #133", "author_date": "2017-11-24T22:22:57Z", "committer_date": "2017-11-24T22:29:54Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "a81c62d8481d8cf97be5c5c61931e5e5bea2fbf3", "message": "Tweaked custom SQL results display\n\nCloses #149", "author_date": "2017-11-24T22:41:31Z", "committer_date": "2017-11-24T22:41:31Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "c5c923d93c26f312b713b81c8d08db5c3279a23a", "message": "Don't incorrectly detect VIEWs as supporting FTS", "author_date": "2017-11-24T22:51:00Z", "committer_date": "2017-11-24T22:51:00Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "e3dd2483bb78f3d4b80db6de5475ceb163155b80", "message": "Fixed quoting on foreign-key links to tables with spaces in name", "author_date": "2017-11-25T00:05:28Z", "committer_date": "2017-11-25T00:05:28Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "17fee0cc1411b69d66d4401120f96c5087b16841", "message": "Automatically deploy tags as PyPI releases\n\nhttps://docs.travis-ci.com/user/deployment/pypi/", "author_date": "2017-11-25T03:02:55Z", "committer_date": "2017-11-25T03:32:47Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "c160f15c3937f8fbe581276f811e8c58f9137bb1", "message": "Release version 0.13", "author_date": "2017-11-25T03:33:39Z", "committer_date": "2017-11-25T03:33:39Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "de6c62ed9a30b12b22fded13d492b1f193cfc728", "message": "Load SQLite extensions inside .inspect() too", "author_date": "2017-11-26T22:51:42Z", "committer_date": "2017-11-26T23:02:00Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "36701c85928b1eb785527ffd11cd941b31087ea3", "message": "datasette build now takes --load-extension", "author_date": "2017-11-26T23:01:53Z", "committer_date": "2017-11-26T23:02:01Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "0120c24927af364304574ab1a58e417094e01c22", "message": "extra_css_urls/extra_js_urls in metadata, refs #153\n\nA mechanism in the metadata.json format for adding custom CSS and JS urls.\n\nCreate a metadata.json file that looks like this:\n\n {\n \"extra_css_urls\": [\n \"https://simonwillison.net/static/css/all.bf8cd891642c.css\"\n ],\n \"extra_js_urls\": [\n \"https://code.jquery.com/jquery-3.2.1.slim.min.js\"\n ]\n }\n\nThen start datasette like this:\n\n datasette mydb.db --metadata=metadata.json\n\nThe CSS and JavaScript files will be linked in the of every page.\n\nYou can also specify a SRI (subresource integrity hash) for these assets:\n\n {\n \"extra_css_urls\": [\n {\n \"url\": \"https://simonwillison.net/static/css/all.bf8cd891642c.css\",\n \"sri\": \"sha384-9qIZekWUyjCyDIf2YK1FRoKiPJq4PHt6tp/ulnuuyRBvazd0hG7pWbE99zvwSznI\"\n }\n ],\n \"extra_js_urls\": [\n {\n \"url\": \"https://code.jquery.com/jquery-3.2.1.slim.min.js\",\n \"sri\": \"sha256-k2WSCIexGzOj3Euiig+TlR8gA0EmPjuc79OEeY5L45g=\"\n }\n ]\n }\n\nModern browsers will only execute the stylsheet or JavaScript if the SRI hash\nmatches the content served. You can generate hashes using www.srihash.org", "author_date": "2017-11-29T02:38:15Z", "committer_date": "2017-11-29T02:38:15Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "b67890d15d164c7affb2887e5737534628dc6227", "message": "Auto-link column values that look like URLs\n\nRefs #153", "author_date": "2017-11-29T17:05:24Z", "committer_date": "2017-11-29T17:05:24Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "8ab3a169d42d096f2c7979c6d3d7746618d30f0b", "message": "CSS styling hooks as classes on the body\n\nRefs #153\n\nEvery template now gets CSS classes in the body designed to support custom\nstyling.\n\nThe index template (the top level page at /) gets this:\n\n \n\nThe database template (/dbname/) gets this:\n\n \n\nThe table template (/dbname/tablename) gets:\n\n \n\nThe row template (/dbname/tablename/rowid) gets:\n\n \n\nThe db-x and table-x classes use the database or table names themselves IF\nthey are valid CSS identifiers. If they aren't, we strip any invalid\ncharacters out and append a 6 character md5 digest of the original name, in\norder to ensure that multiple tables which resolve to the same stripped\ncharacter version still have different CSS classes.\n\nSome examples (extracted from the unit tests):\n\n \"simple\" => \"simple\"\n \"MixedCase\" => \"MixedCase\"\n \"-no-leading-hyphens\" => \"no-leading-hyphens-65bea6\"\n \"_no-leading-underscores\" => \"no-leading-underscores-b921bc\"\n \"no spaces\" => \"no-spaces-7088d7\"\n \"-\" => \"336d5e\"\n \"no $ characters\" => \"no--characters-59e024\"", "author_date": "2017-11-30T07:09:54Z", "committer_date": "2017-11-30T07:09:54Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "ffa77f62b46e1ddf2f848f5da10a1e958323a084", "message": "Removed dependency on sanic-jinja2\n\nI wasn't using any of the functionality it adds on top of raw Jinja2.\n\nRefs #12 and #153", "author_date": "2017-11-30T15:51:40Z", "committer_date": "2017-11-30T15:51:40Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "7ff51598c468deb1d2c0d4c23a808458c9b1e3a2", "message": "git commit -m \"datasette --template-dir=mytemplates/\" argument\n\nYou can now pass an additional argument specifying a directory to look for\ncustom templates in.\n\nDatasette will fall back on the default templates if a template is not\nfound in that directory.\n\nRefs #12, #153", "author_date": "2017-11-30T16:05:01Z", "committer_date": "2017-11-30T16:05:01Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "3cd06729f457d690603b6060dc552b535517ab09", "message": "Ability to over-ride templates for individual tables/databases\n\nIt is now possible to over-ride templates on a per-database / per-row or per-\ntable basis.\n\nWhen you access e.g. /mydatabase/mytable Datasette will look for the following:\n\n - table-mydatabase-mytable.html\n - table.html\n\nIf you provided a --template-dir argument to datasette serve it will look in\nthat directory first.\n\nThe lookup rules are as follows:\n\n Index page (/):\n index.html\n\n Database page (/mydatabase):\n database-mydatabase.html\n database.html\n\n Table page (/mydatabase/mytable):\n table-mydatabase-mytable.html\n table.html\n\n Row page (/mydatabase/mytable/id):\n row-mydatabase-mytable.html\n row.html\n\nIf a table name has spaces or other unexpected characters in it, the template\nfilename will follow the same rules as our custom CSS classes\nintroduced in 8ab3a169d42d096f - for example, a table called \"Food Trucks\"\nwill attempt to load the following templates:\n\n table-mydatabase-Food-Trucks-399138.html\n table.html\n\nIt is possible to extend the default templates using Jinja template\ninheritance. If you want to customize EVERY row template with some additional\ncontent you can do so by creating a row.html template like this:\n\n {% extends \"default:row.html\" %}\n\n {% block content %}\n

EXTRA HTML AT THE TOP OF THE CONTENT BLOCK

\n

This line renders the original block:

\n {{ super() }}\n {% endblock %}\n\nCloses #12, refs #153", "author_date": "2017-11-30T16:30:10Z", "committer_date": "2017-11-30T16:38:16Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "cf46b86cf736aadd5147f85bfd6ff44c29655fde", "message": "Switch to sphinx_rtd_theme", "author_date": "2017-11-30T16:56:20Z", "committer_date": "2017-11-30T16:56:20Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "601934936c9e6e0007aca13547b73c3b36343f7f", "message": "Documentation for custom CSS/JavaScript/Templates\n\nWill go live at http://datasette.readthedocs.io/en/latest/custom_templates.html\n\nCloses #156", "author_date": "2017-11-30T17:09:48Z", "committer_date": "2017-11-30T17:09:48Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "1feb5735dad538312fac8b76705c05516250967b", "message": "Moved getting started into separate docs page", "author_date": "2017-11-30T18:27:00Z", "committer_date": "2017-11-30T18:27:00Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "e981ac7d4d1e1603257369eb5edba0fc4fdf5ae9", "message": "--static option for datasette serve\n\nYou can now tell Datasette to serve static files from a specific location at a\nspecific mountpoint.\n\nFor example:\n\n\tdatasette serve mydb.db --static extra-css:/tmp/static/css\n\nNow if you visit this URL:\n\n\thttp://localhost:8001/extra-css/blah.css\n\nThe following file will be served:\n\n\t/tmp/static/css/blah.css\n\nRefs #160", "author_date": "2017-12-03T16:33:36Z", "committer_date": "2017-12-03T16:33:36Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "0cfd7ce59d9018eb07af8f9e20f7d04308c9d01d", "message": "Allow WITH query (previously we required SELECT at start)\n\nFixes #161", "author_date": "2017-12-04T04:51:31Z", "committer_date": "2017-12-04T04:51:31Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "a743cdeafca0e5d011c282a53baf753c85d01516", "message": "Canned query support + database/query template refactor\n\nNamed canned queries can now be defined in metadata.json like this:\n\n {\n \"databases\": {\n \"timezones\": {\n \"queries\": {\n \"timezone_for_point\": \"select tzid from timezones ...\"\n }\n }\n }\n }\n\nThese will be shown in a new \"Queries\" section beneath \"Views\" on the database page.\n\nAs part of this, I refactored the logic for the database index page. It used\nto combine the functionality for listing available tables and the\nfunctionality for executing custom SQL queries in a single template and view.\nI have split that template out into database.html and query.html and reworked\nthe view to more clearly separate the custom SQL executing code.\n\nRefs #20", "author_date": "2017-12-05T16:17:02Z", "committer_date": "2017-12-05T16:17:02Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "b7b590b4149563ec6572f577632d7471b84dcb94", "message": "Docs for query.html CSS/template, refs #20", "author_date": "2017-12-05T16:35:14Z", "committer_date": "2017-12-05T16:35:14Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "7a4da7e5aedff3f61648d5530c4dc34de011ea8a", "message": "Documentation for custom SQL queries\n\nhttp://datasette.readthedocs.io/en/latest/sql_queries.html\n\nCloses #20", "author_date": "2017-12-05T17:43:59Z", "committer_date": "2017-12-05T17:43:59Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "709f4f2798d0490ae048094536bed7e973ea29f4", "message": "Fixed bug with detecting FTS tables\n\nCloses #135", "author_date": "2017-12-07T04:54:25Z", "committer_date": "2017-12-07T04:54:37Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "52a5e95d21c9b2b7b50f5bc423e3746ae0538734", "message": "Fixed bug with filter columns\n\nCloses #162", "author_date": "2017-12-07T05:05:53Z", "committer_date": "2017-12-07T05:05:53Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "198b8b2955b9d8a8a80ce850a92a99426c5f161f", "message": "Fixed row page for tables with a primary key\n\nCloses #152", "author_date": "2017-12-07T05:23:13Z", "committer_date": "2017-12-07T05:23:13Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "a2b954e82818d5aa4b4c313d9a687d6a7bdd04b5", "message": "Fixed #155", "author_date": "2017-12-07T05:39:47Z", "committer_date": "2017-12-07T05:39:47Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "afbda9e210b6e5eae10a537c121cbb5e92cc8502", "message": "All extra_head blocks now call super\n\nThis means you can provide a custom base.html template that populates\nextra_head and any of the default child templates will still render content\nyou included in that block.\n\nRefs #158", "author_date": "2017-12-07T05:58:42Z", "committer_date": "2017-12-07T05:58:42Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "7e1ba161ec87b02cf7665a73188258f14036f892", "message": "Ability to easily customize _rows_and_columns.html per database table\n\nAlso added documentation for this.\n\nRefs #158, Closes #159.", "author_date": "2017-12-07T06:11:22Z", "committer_date": "2017-12-07T06:11:22Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "32cf5a4a72c1c8d46dd302566fdcbf4793f2f927", "message": "New datasette skeleton command for generating metadata.json\n\nCloses #164", "author_date": "2017-12-07T06:20:37Z", "committer_date": "2017-12-07T06:20:37Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "515eaa8ccba0603de5b14679b74402f3ddf02bd7", "message": "--reload now reloads on metadata changes too", "author_date": "2017-12-07T16:42:28Z", "committer_date": "2017-12-07T16:42:28Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "80bf3afa43e3cb396c7a7c9b168eedbc6fe0fa15", "message": "metadata.json support for per-table/per-database metadata\n\nAlso added support for descriptions and HTML descriptions.\n\nHere's an example metadata.json file illustrating custom per-database and per-\ntable metadata:\n\n {\n \"title\": \"Overall datasette title\",\n \"description_html\": \"This is a description with HTML.\",\n \"databases\": {\n \"db1\": {\n \"title\": \"First database\",\n \"description\": \"This is a string description & has no HTML\",\n \"license_url\": \"http://example.com/\",\n \t\t\"license\": \"The example license\",\n \"queries\": {\n \t\"canned_query\": \"select * from table1 limit 3;\"\n },\n \"tables\": {\n \"table1\": {\n \"title\": \"Custom title for table1\",\n \"description\": \"Tables can have descriptions too\",\n \"source\": \"This has a custom source\",\n \"source_url\": \"http://example.com/\"\n }\n }\n }\n }\n }\n\nCloses #165, Refs #164", "author_date": "2017-12-07T16:42:54Z", "committer_date": "2017-12-07T16:47:07Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "05399058062ba6df467c8745b87ece5f6951b39f", "message": "Renamed \"datasette build\" command to \"datasette inspect\"\n\nCloses #130", "author_date": "2017-12-07T16:57:31Z", "committer_date": "2017-12-07T16:57:31Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "9af2964f6fd4ae876ef8ecd2c14c2ffa61542fdb", "message": "Documentation for metadata.json and \"datasette skeleton\" command\n\nhttp://datasette.readthedocs.io/en/latest/metadata.html\n\nCloses #166", "author_date": "2017-12-07T17:19:35Z", "committer_date": "2017-12-07T17:19:35Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "cbfd6b745eabf51295e5a5e0ea57a0f93d63b37d", "message": "Publish should now work if /tmp is on different device\n\nFixes #141", "author_date": "2017-12-08T16:06:24Z", "committer_date": "2017-12-08T16:06:24Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "61e3c5a1e904a6e1cbee86ba1494b5cb4b5820cf", "message": "Removed rogue print statement, refs #141", "author_date": "2017-12-08T16:08:00Z", "committer_date": "2017-12-08T16:08:00Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "16dfccb1c569359fa2a03639ada233e7661156af", "message": "Include sha1 hash in /static/app.css URL\n\nThis means that when Datasette's CSS changes the new CSS will be loaded\neven though browsers may have cached the previous version.\n\nCloses #154", "author_date": "2017-12-09T03:10:09Z", "committer_date": "2017-12-09T03:10:09Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "c195ee4d46f2577b1943836a8270d84c8341d138", "message": "package and publish commands now accept --static and --template-dir\n\nExample usage:\n\n datasette package --static css:extra-css/ --static js:extra-js/ \\\n \tsf-trees.db --template-dir templates/ --tag sf-trees --branch master\n\nThis creates a local Docker image that includes copies of the templates/,\nextra-css/ and extra-js/ directories. You can then run it like this:\n\n\tdocker run -p 8001:8001 sf-trees\n\nFor publishing to Zeit now:\n\n\tdatasette publish now --static css:extra-css/ --static js:extra-js/ \\\n\t\tsf-trees.db --template-dir templates/ --name sf-trees --branch master\n\nExample: https://sf-trees-wbihszoazc.now.sh/sf-trees-02c8ef1/Street_Tree_List\n\nFor publishing to Heroku:\n\n\tdatasette publish heroku --static css:extra-css/ --static js:extra-js/ \\\n\t\tsf-trees.db --template-dir templates/ --branch master\n\nCloses #157, #160", "author_date": "2017-12-09T18:19:39Z", "committer_date": "2017-12-09T18:28:49Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "1c0d93c39b194103e729aed2496d2d24f5ad4850", "message": "Fix Python 3.5 test failure", "author_date": "2017-12-09T18:39:16Z", "committer_date": "2017-12-09T18:39:19Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "b01304d7070df5a02870ebd204ea093f3742029e", "message": "Updated tests I broke in c195ee4", "author_date": "2017-12-09T18:38:04Z", "committer_date": "2017-12-09T18:39:19Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "3c9f889715249d7b0b3bc014529073066a1d478d", "message": "Custom templates for canned queries\n\nCloses #170", "author_date": "2017-12-09T21:34:46Z", "committer_date": "2017-12-09T21:34:46Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "7126d08f10d637c9f1af346324f6f7c0fece8be4", "message": "HTML comment showing which templates were considered for a page\n\nCloses #171", "author_date": "2017-12-09T21:47:32Z", "committer_date": "2017-12-09T21:47:32Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "3f2fed109395179de4145ca1a2675360f1717225", "message": "Fixed bug with HTML labels\n\nloop.counter is incorrect - loop.index outputs the correct loop value.", "author_date": "2017-12-09T21:57:36Z", "committer_date": "2017-12-09T21:57:36Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "7a7e4b2ed8c76c6d002a9d707dbc840f6a2abf7f", "message": "Started unit tests for row/table HTML pages\n\nRefs #167\n\nThanks to the new tests, spotted and fixed a bug where pages that were\nsupposed to have 100 things on them were actually displaying 101.", "author_date": "2017-12-09T23:32:54Z", "committer_date": "2017-12-09T23:32:54Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "794c3bfcfc03087bbebffb7b228e81aaa8b72183", "message": "Cleaned up row/column display logic, fixed bug\n\nCloses #167", "author_date": "2017-12-10T00:59:25Z", "committer_date": "2017-12-10T00:59:25Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "7db790fbf999d83275a5bde4563d935a58a3d787", "message": "Release notes for 0.14\n\nAlso updated \"datasette serve\" help in getting started docs.", "author_date": "2017-12-10T01:24:57Z", "committer_date": "2017-12-10T01:26:32Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "ae940068096ad9ff2f27f4e1784c87788d53eb3d", "message": "No longer include database hash in hyperlinks\n\nIt was making the unit tests unreliable. Also we do not do that for foreign key links.", "author_date": "2017-12-10T01:31:08Z", "committer_date": "2017-12-10T01:31:08Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "2edc652df6d786e4f2c3f073e3567002d248be09", "message": "Releasing v0.14", "author_date": "2017-12-10T01:33:24Z", "committer_date": "2017-12-10T01:33:24Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "68a34bc222af586c75daa5166c937f3f26cfefac", "message": "Deploy to Heroku with Python 3.6.3\n\nHeroku deploys are currently showing the following warning:\n\n The latest version of Python 3 is python-3.6.3 (you are using python-3.6.2, which is unsupported).\n We recommend upgrading by specifying the latest version (python-3.6.3).", "author_date": "2017-12-10T02:01:17Z", "committer_date": "2017-12-10T02:01:17Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "1aad396c9ef46837b224607086c09f48ac921165", "message": "Fixed bug with .json path regular expression\n\nI had a table called \"geojson\" and it caused an exception because the regex\nwas matching .json and not \\.json", "author_date": "2017-12-13T05:32:43Z", "committer_date": "2017-12-13T05:36:03Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "306e1c6ac4f00cc25d676a6ee660938f5b27427c", "message": "Broke up test_app into test_api and test_html", "author_date": "2017-12-15T12:04:17Z", "committer_date": "2017-12-15T12:08:24Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "e63f432fe521eb8e196049f86742dc9e20f4dc35", "message": "Mention Heroku in docs index page", "author_date": "2018-01-10T04:46:34Z", "committer_date": "2018-01-10T04:46:34Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "cac32b0ec4081c00bb6eb9122d61dccfae729199", "message": "Initial documentation for pagination", "author_date": "2018-01-10T04:47:03Z", "committer_date": "2018-01-10T04:47:03Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "012fc7c5cd3e9160c9a4c19cc964253e97fb054a", "message": "Fix for FTS virtual table counting error", "author_date": "2018-03-21T01:26:04Z", "committer_date": "2018-03-21T01:26:04Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "89d9fbb91bfc0dd9091b34dbf3cf540ab849cc44", "message": "Database/Table views inherit source/license/source_url/license_url metadata\n\nIf you set the source_url/license_url/source/license fields in your root\nmetadata those values will now be inherited all the way down to the database\nand table templates.\n\nThe title/description are NOT inherited.\n\nAlso added unit tests for the HTML generated by the metadata.\n\nRefs #185", "author_date": "2018-03-27T16:18:32Z", "committer_date": "2018-03-27T16:18:32Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "31f63d1672a9214962cd7335a2daeabab7c0000e", "message": "Fixed bug with keyset pagination over compound primary keys\n\nCloses #190", "author_date": "2018-03-30T05:10:09Z", "committer_date": "2018-03-30T05:11:02Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "7365c3f51cedffade3428a677e5baeab2f401138", "message": "Compound primary key _next= now plays well with extra filters\n\nCloses #190", "author_date": "2018-03-30T06:26:22Z", "committer_date": "2018-03-30T06:26:22Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "8f0d44d6468a96e9b78487c36da20ddc2ae9d937", "message": "escape_sqlite_table_name => escape_sqlite, handles reserved words\n\nIt can be used for column names as well as table names.\n\nReserved word list from https://www.sqlite.org/lang_keywords.html", "author_date": "2018-04-03T13:39:50Z", "committer_date": "2018-04-03T13:40:49Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "dd0566ff8eda7fa2f0d92e51809581fae62cffed", "message": "Utility for writing test database fixtures to a .db file\n\n\tpython tests/fixtures.py /tmp/hello.db\n\nThis is useful for making a SQLite database of the test fixtures for\ninteractive exploration.", "author_date": "2018-04-03T13:46:11Z", "committer_date": "2018-04-03T13:46:11Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "b2188f044265c95f7e54860e28107c17d2a6ed2e", "message": "Use .custom_sql() for _group_count implementation (refs #150)", "author_date": "2018-04-08T15:42:56Z", "committer_date": "2018-04-08T15:43:45Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "a290f28caae61b47e76e825c06984f22fc41a694", "message": "table_rows => table_rows_count, filtered_table_rows => filtered_table_rows_count\n\nRenamed properties. Closes #194", "author_date": "2018-04-09T05:24:24Z", "committer_date": "2018-04-09T05:24:24Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "7706fe0c67aba5cfe905c7906cae9e0c43cd75b2", "message": "Releasing v0.15", "author_date": "2018-04-09T15:48:24Z", "committer_date": "2018-04-09T15:48:24Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "57b19f09d1ee24b7369ceca8937ce67df2ca1abc", "message": "Ability to sort using form fields (for mobile portrait mode)\n\nWe now display sort options as a select box plus a descending checkbox, which\nmeans you can apply sort orders even in portrait mode on a mobile phone where\nthe column headers are hidden.\n\nCloses #199", "author_date": "2018-04-10T00:30:44Z", "committer_date": "2018-04-10T00:34:32Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "46b237c29a195025de81dcd920c6893181229dc5", "message": "datasette inspect now finds primary_keys\n\nCloses #195", "author_date": "2018-04-10T00:54:12Z", "committer_date": "2018-04-10T00:54:12Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "cca8bf36fed9f2d0cedcfa2691a95b7965b7573c", "message": "Allow explain select / explain query plan select\n\nCloses #201", "author_date": "2018-04-11T22:39:43Z", "committer_date": "2018-04-12T21:32:47Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "ad6142b67c8f137b001770339510979c5df43d85", "message": "long_description in markdown for the new PyPI", "author_date": "2018-04-13T16:03:09Z", "committer_date": "2018-04-13T16:04:18Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "9f28bbe43dc277a3963a12aaae37b5ee3c277207", "message": "Better mechanism for handling errors; 404s for missing table/database\n\nNew error mechanism closes #193\n\n404s for missing tables/databesse closes #184\n\nMakes pull request #202 unnecessary.", "author_date": "2018-04-13T18:17:22Z", "committer_date": "2018-04-13T18:17:22Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "6e16ed2a632b488a5ca21185c0147b4bca16336b", "message": "Removed pathlib dependency (incompatible with Python 3.5)", "author_date": "2018-04-13T18:22:15Z", "committer_date": "2018-04-13T18:22:15Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "b6539ff04502536bd1fa96e3b1430bdafc456826", "message": "Releasing v0.16", "author_date": "2018-04-13T18:28:55Z", "committer_date": "2018-04-13T18:28:55Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "fb988ace7c7e2bee5ac142a0eab22431d0675a77", "message": "Release 0.17 to fix issues with PyPI\n\nSee https://twitter.com/simonw/status/984862976447414272", "author_date": "2018-04-13T19:04:33Z", "committer_date": "2018-04-13T19:04:40Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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": "d72201e883c0612d14dfb8ffdd61aa0fe223d94a", "message": "Added unit test for foreign key links in HTML\n\nNeeded to add a further unit test for #207", "author_date": "2018-04-14T14:55:27Z", "committer_date": "2018-04-14T14:55:27Z", "raw_author": {"value": "13ae486343ea6454a93114c6f558ffea2f2c6874", "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"}}