{"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": "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": "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": "06a826c3188af82f27bb6b4e09cc89b782d30bd6", "message": ":fire: Removes DS_Store (#81)\n\n* :fire: Removes .DS_Store\r\n\r\nSigned-off-by: Jeff Triplett \r\n\r\n* :snowflake: Adds .DS_Store to gitignore\r\n\r\nSigned-off-by: Jeff Triplett ", "author_date": "2017-11-13T22:16:54Z", "committer_date": "2017-11-13T22:16:54Z", "raw_author": {"value": "207bb2132044fa5a4fe28a579f7588c2eee6e391", "label": "Jeff Triplett"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 50527, "label": "jefftriplett"}, "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "ed2b3f25beac720f14869350baacc5f62b065194", "message": "add support for ?field__isnull=1 (#107)\n\n* add support for ?field__isnull=1\r\n\r\n* Add unit test and conditional formatting for ?field__isnull", "author_date": "2017-11-17T13:29:22Z", "committer_date": "2017-11-17T13:29:22Z", "raw_author": {"value": "19245be93da11be3d5e72991646660a06a9d3449", "label": "Ray N"}, "raw_committer": {"value": "2946d096d0cdefdc017559e6b57e87658736e843", "label": "Simon Willison"}, "repo": {"value": 107914493, "label": "datasette"}, "author": {"value": 3433657, "label": "raynae"}, "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": "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": "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": "eda848b37f8452dba7913583ef101f39d9b130ba", "message": "Add keyboard shortcut to execute SQL query (#115)", "author_date": "2017-11-17T14:22:55Z", "committer_date": "2017-11-17T14:22:55Z", "raw_author": {"value": "106fe7fbf8b80a01038e265a137b3b703422db48", "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": "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": "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": "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": "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": "6d39429daa4655e3cf7a6a7671493292a20a30a1", "message": "Don't prevent tabbing to `Run SQL` button (#117)\n\nSee comment in #115", "author_date": "2017-11-18T00:53:42Z", "committer_date": "2017-11-18T00:53:42Z", "raw_author": {"value": "106fe7fbf8b80a01038e265a137b3b703422db48", "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": "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": "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": "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": "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"}}