id,node_id,number,state,locked,title,user,user_label,body,created_at,updated_at,closed_at,merged_at,merge_commit_sha,assignee,assignee_label,milestone,milestone_label,draft,head,base,author_association,repo,repo_label,url,merged_by,merged_by_label,auto_merge 181033024,MDExOlB1bGxSZXF1ZXN0MTgxMDMzMDI0,200,closed,0,Hide Spatialite system tables,45057,russss,They were getting on my nerves.,2018-04-11T21:26:58Z,2018-04-12T21:34:48Z,2018-04-12T21:34:48Z,2018-04-12T21:34:48Z,d08a13314081ae2ce0313a17d3c07c1a7f2d94d5,,,,,0,765b5d677154c633b91e3e826dfffc53b7c4b5d3,bfb4e45a7bcb880758dbc18f66258de26c1d1904,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/200,,, 181247568,MDExOlB1bGxSZXF1ZXN0MTgxMjQ3NTY4,202,closed,0,Raise 404 on nonexistent table URLs,45057,russss,"Currently they just 500. Also cleaned the logic up a bit, I hope I didn't miss anything. This is issue #184.",2018-04-12T15:47:06Z,2018-04-13T19:22:56Z,2018-04-13T18:19:15Z,,134150933ade84327cfd97a88d536f5bff37a136,,,,,0,71bbf4e4be8a9ab7bcc4ddfb33760c7d902f4a34,bfb4e45a7bcb880758dbc18f66258de26c1d1904,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/202,,, 181600926,MDExOlB1bGxSZXF1ZXN0MTgxNjAwOTI2,204,closed,0,Initial units support,45057,russss,"Add support for specifying units for a column in metadata.json and rendering them on display using [pint](https://pint.readthedocs.io/en/latest/). Example table metadata: ```json ""license_frequency"": { ""units"": { ""frequency"": ""Hz"", ""channel_width"": ""Hz"", ""height"": ""m"", ""antenna_height"": ""m"", ""azimuth"": ""degrees"" } } ``` [Example result](https://wtr-api.herokuapp.com/wtr-663ea99/license_frequency/1) This works surprisingly well! I'd like to add support for using units when querying but this is PR is pretty usable as-is. (Pint doesn't seem to support decibels though - it thinks they're decibytes - which is an annoying omission.) (ref ticket #203)",2018-04-13T21:32:49Z,2018-04-14T09:44:33Z,2018-04-14T03:32:54Z,2018-04-14T03:32:54Z,ec6abc81e433c9bac1b9f085111785fc227e9e34,,,,,0,67c20a98a0cbb59a10247a49320c2feb7d0b1b41,fb988ace7c7e2bee5ac142a0eab22431d0675a77,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/204,,, 181642114,MDExOlB1bGxSZXF1ZXN0MTgxNjQyMTE0,205,closed,0,Support filtering with units and more,45057,russss,"The first commit: * Adds units to exported JSON * Adds units key to metadata skeleton * Adds some docs for units The second commit adds filtering by units by the first method I mentioned in #203: ![image](https://user-images.githubusercontent.com/45057/38767463-7193be16-3fd9-11e8-8a5f-ac4159415c6d.png) [Try it here](https://wtr-api.herokuapp.com/wtr-663ea99/license_frequency?frequency__gt=50GHz&height__lt=50ft). I think it integrates pretty neatly. The third commit adds support for registering custom units with Pint from metadata.json. Probably pretty niche, but I need decibels!",2018-04-14T10:47:51Z,2018-04-14T15:24:04Z,2018-04-14T15:24:04Z,,ed059c70e87a2930206652621e23a55167aa57c1,,,,,0,eb3a37c34813ecbbfdae015305fec1f2a4ec27a5,6b15a53cd3cd40880a5e2d38827d5fac10e4bb5f,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/205,,, 181644805,MDExOlB1bGxSZXF1ZXN0MTgxNjQ0ODA1,206,closed,0,Fix sqlite error when loading rows with no incoming FKs,45057,russss,"This fixes `ERROR: conn=, sql = 'select ', params = {'id': '1'}` caused by an invalid query loading incoming FKs when none exist. The error was ignored due to async but it still got printed to the console.",2018-04-14T12:08:17Z,2018-04-14T14:32:42Z,2018-04-14T14:24:25Z,2018-04-14T14:24:25Z,1cc5161089e559c8b16049b20f7a5b3a43290c21,,,,,0,93b038e2469bee07d36ae8a943aab8b9d8610c1d,ec6abc81e433c9bac1b9f085111785fc227e9e34,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/206,,, 181647717,MDExOlB1bGxSZXF1ZXN0MTgxNjQ3NzE3,207,closed,0,Link foreign keys which don't have labels,45057,russss,"This renders unlabeled FKs as simple links. I can't see why this would cause any major problems. ![image](https://user-images.githubusercontent.com/45057/38768722-ea15a000-3fef-11e8-8664-ffd7aa4894ea.png) Also includes bonus fixes for two minor issues: * In foreign key link hrefs the primary key was escaped using HTML escaping rather than URL escaping. This broke some non-integer PKs. * Print tracebacks to console when handling 500 errors.",2018-04-14T13:27:14Z,2018-04-14T15:00:00Z,2018-04-14T15:00:00Z,2018-04-14T15:00:00Z,f2b940d6026677f6859d46a4f16fa402745d261d,,,,,0,d9858672da8f74e5530deead140e2e633e1c2627,ec6abc81e433c9bac1b9f085111785fc227e9e34,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/207,,, 181654839,MDExOlB1bGxSZXF1ZXN0MTgxNjU0ODM5,208,closed,0,Return HTTP 405 on InvalidUsage rather than 500,45057,russss,"This also stops it filling up the logs. This happens for HEAD requests at the moment - which perhaps should be handled better, but that's a different issue.",2018-04-14T16:12:50Z,2018-04-14T18:00:39Z,2018-04-14T18:00:39Z,2018-04-14T18:00:39Z,efbb4e83374a2c795e436c72fa79f70da72309b8,,,,,0,20e5fcf827046adf76968d0e58f47e0b7d9271c3,8d394586f55bc4b8ab70476968d08fb6ec8339e5,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/208,,, 181723303,MDExOlB1bGxSZXF1ZXN0MTgxNzIzMzAz,209,closed,0, Don't duplicate simple primary keys in the link column,45057,russss,"When there's a simple (single-column) primary key, it looks weird to duplicate it in the link column. This change removes the second PK column and treats the link column as if it were the PK column from a header/sorting perspective. This might make it a bit more difficult to tell what the link for the row is, I'm not sure yet. I feel like the alternative is to change the link column to just have the text ""view"" or something, instead of repeating the PK. (I doubt it makes much more sense with compound PKs.) Bonus change in this PR: fix urlencoding of links in the displayed HTML. Before: ![image](https://user-images.githubusercontent.com/45057/38783830-e2ababb4-40ff-11e8-97fb-25e286a8c920.png) After: ![image](https://user-images.githubusercontent.com/45057/38783835-ebf6b48e-40ff-11e8-8c47-6a864cf21ccc.png)",2018-04-15T21:56:15Z,2018-04-18T08:40:37Z,2018-04-18T01:13:04Z,2018-04-18T01:13:04Z,136a70d88741e2a5892c3de437064a9d14494d66,,,,,0,4acde4e187795214af6fc86f46af48982ec5de46,bf5ec2d61148f9852441934dd206b3b1c07a512f,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/209,,, 189318453,MDExOlB1bGxSZXF1ZXN0MTg5MzE4NDUz,277,closed,0,Refactor inspect logic,45057,russss,"This pulls the logic for inspect out into a new file which makes it a bit easier to understand. This was going to be the first part of an implementation for #276, but it seems like that might take a while so I'm going to PR a few bits of refactoring individually.",2018-05-21T08:49:31Z,2018-05-22T16:07:24Z,2018-05-22T14:03:07Z,2018-05-22T14:03:07Z,58b5a37dbbf13868a46bcbb284509434e66eca25,,,,,0,0b81e047ad27b67ba17e8c176e38a94cf4548115,d59366d36e95b973d674e62edff0168d5bdd90eb,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/277,,, 201451332,MDExOlB1bGxSZXF1ZXN0MjAxNDUxMzMy,345,closed,0,Allow app names for `datasette publish heroku`,45057,russss,"Lets you supply the `-n` parameter for Heroku deploys, which also lets you update existing Heroku deployments.",2018-07-14T13:12:34Z,2018-07-14T14:09:54Z,2018-07-14T14:04:44Z,2018-07-14T14:04:44Z,58fec99ab0a31bcf25968f2aa05d37de8139b83c,,,,,0,864cf8c1b01a581d6dc9711efe7cb4f2a6ac87e8,31a5d8fa77be68d4f837f0a80a611675dce49f4b,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/345,,, 266035382,MDExOlB1bGxSZXF1ZXN0MjY2MDM1Mzgy,424,closed,0,Column types in inspected metadata,45057,russss,"This PR does two things: * Adds the sqlite column type for each column to the inspected table info. * Stops binary columns from being rendered to HTML, unless a plugin handles it. There's a bit more detail in the changeset descriptions. These changes are intended as a precursor to a plugin which adds first-class support for Spatialite geographic primitives, and perhaps more useful geo-stuff.",2019-03-31T18:46:33Z,2019-04-29T18:30:50Z,2019-04-29T18:30:46Z,,a332d4e0b3fed7165a22880430664f1c3a00963d,,,,,0,92e7b8c67fe5bcd484f19576f20c9235aca9050b,0209a0a344503157351e625f0629b686961763c9,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/424,,, 274174614,MDExOlB1bGxSZXF1ZXN0Mjc0MTc0NjE0,437,closed,0,Add inspect and prepare_sanic hooks,45057,russss,"This adds two new plugin hooks: The `inspect` hook allows plugins to add data to the inspect dictionary. The `prepare_sanic` hook allows plugins to hook into the web router. I've attached a warning to this hook in the docs in light of #272 but I want this hook now... On quick inspection, I don't think it's worthwhile to try and make this hook independent of the web framework (but it looks like Starlette would make the hook implementation a bit nicer). Ref #14",2019-04-28T11:53:34Z,2019-06-24T16:38:57Z,2019-06-24T16:38:56Z,,7aeaac7c478acf572bda61bdaa6ac3247dc15811,,,,,0,f33a0a63a7442f0b665320ac3e2eb55de315f1f7,11b352b4d52fd02a422776edebb14f12e4994d3b,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/437,,, 274313625,MDExOlB1bGxSZXF1ZXN0Mjc0MzEzNjI1,439,closed,0,[WIP] Add primary key to the extra_body_script hook arguments,45057,russss,"This allows the row to be identified on row pages. The context here is that I want to access the row's data to plot it on a map. I considered passing the entire template context through to the hook function. This would expose the actual row data and potentially avoid a further fetch request in JS, but it does make the plugin API a lot more leaky. (At any rate, using the selected row data is tricky in my case because of Spatialite's infuriating custom binary representation...)",2019-04-29T10:08:23Z,2019-05-01T09:58:32Z,2019-05-01T09:58:30Z,,b3cbcfef4d11d2741cf00861734d726a4730afe5,,,,,0,76b2c8fa406063b436155a7d8995e07b7e718c13,11b352b4d52fd02a422776edebb14f12e4994d3b,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/439,,, 274468836,MDExOlB1bGxSZXF1ZXN0Mjc0NDY4ODM2,441,closed,0,Add register_output_renderer hook,45057,russss,"This changeset refactors out the JSON renderer and then adds a hook and dispatcher system to allow custom output renderers to be registered. The CSV output renderer is untouched because supporting streaming renderers through this system would be significantly more complex, and probably not worthwhile. We can't simply allow hooks to be called at request time because we need a list of supported file extensions when the request is being routed in order to resolve ambiguous database/table names. So, renderers need to be registered at startup. I've tried to make this API independent of Sanic's request/response objects so that this can remain stable during the switch to ASGI. I'm using dictionaries to keep it simple and to make adding additional options in the future easy. Fixes #440",2019-04-29T18:03:21Z,2019-05-01T23:01:57Z,2019-05-01T23:01:57Z,2019-05-01T23:01:57Z,cf406c075433882b656e340870adf7757976fa4c,,,,,0,c9f941f06eb0268841de49407725917c74a8a2dc,11b352b4d52fd02a422776edebb14f12e4994d3b,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/441,,, 274478761,MDExOlB1bGxSZXF1ZXN0Mjc0NDc4NzYx,442,closed,0,Suppress rendering of binary data,45057,russss,"Binary columns (including spatialite geographies) get shown as ugly binary strings in the HTML by default. Nobody wants to see that mess. Show the size of the column in bytes instead. If you want to decode the binary data, you can use a plugin to do it.",2019-04-29T18:36:41Z,2019-05-03T18:26:48Z,2019-05-03T16:44:49Z,2019-05-03T16:44:49Z,d555baf508de71a5e3dc9a9aed2c13f6f202956d,,,,,0,bbbd9ea5ad774f088bd963106fa5756bfd77c799,11b352b4d52fd02a422776edebb14f12e4994d3b,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/442,,, 275275610,MDExOlB1bGxSZXF1ZXN0Mjc1Mjc1NjEw,443,closed,0,Pass view_name to extra_body_script hook,45057,russss,"At the moment it's not easy to tell whether the hook is being called in (for example) the row or table view, as in both cases the `database` and `table` parameters are provided. This passes the `view_name` added in #441 to the `extra_body_script` hook.",2019-05-02T08:38:36Z,2019-05-03T13:12:20Z,2019-05-03T13:12:20Z,2019-05-03T13:12:20Z,bf229c9bd88179c8ec16bd65fd4fb28ab4241c2e,,,,,0,83b6b82d4787b30d34eb26c22ad1ff9c5c118134,efc93b8ab5a21e3802f75f08d5e41409f5684b5d,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/443,,, 275281307,MDExOlB1bGxSZXF1ZXN0Mjc1MjgxMzA3,444,closed,0,Add a max-line-length setting for flake8,45057,russss,"This stops my automatic editor linting from flagging lines which are too long. It's been lingering in my checkout for ages. 160 is an arbitrary large number - we could alter it if we have any opinions (but I find the line length limit to be my least favourite part of PEP8).",2019-05-02T08:58:57Z,2019-05-04T09:44:48Z,2019-05-03T13:11:28Z,2019-05-03T13:11:28Z,470cf0b05d4fda0d2563f81c7e32af13fe346ccc,,,,,0,4f0d265951d7e95920298b46eff39bb9cc783984,efc93b8ab5a21e3802f75f08d5e41409f5684b5d,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/444,,, 275909197,MDExOlB1bGxSZXF1ZXN0Mjc1OTA5MTk3,450,closed,0,Coalesce hidden table count to 0,45057,russss,"For some reason I'm hitting a `None` here with a FTS table. I'm not entirely sure why but this makes the logic work the same as with non-hidden tables.",2019-05-04T09:37:10Z,2019-05-11T18:10:09Z,2019-05-11T18:10:09Z,,5918489a2a2f14b58c5c71773a9d4fb6bb0e3e0a,,,,,0,f81d9df985e8d054fc16ab91f72878fe71656354,55643430f7ac8d27e99b00e7cf79db741003e811,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/450,,, 275923066,MDExOlB1bGxSZXF1ZXN0Mjc1OTIzMDY2,452,open,0,SQL builder utility classes,45057,russss,"This adds a straightforward set of classes to aid in the construction of SQL queries. My plan for this was to allow plugins to manipulate the Datasette-generated SQL in a more structured way. I'm not sure that's going to work, but I feel like this is still a step forward - it reduces the number of intermediate variables in `TableView.data` which aids readability, and also factors out a lot of the boring string concatenation. There are a fair number of minor structure changes in here too as I've tried to make the ordering of `TableView.data` a bit more logical. As far as I can tell, I haven't broken anything...",2019-05-04T13:57:47Z,2019-05-04T14:03:04Z,,,45e7460d78c3f87c01f2e9e142cb7f646b23b156,,,,,0,c63762280d3bd66ad6ea24933dafe218861efef2,55643430f7ac8d27e99b00e7cf79db741003e811,CONTRIBUTOR,107914493,datasette,https://github.com/simonw/datasette/pull/452,,,