{"html_url": "https://github.com/simonw/datasette/issues/131#issuecomment-345526171", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/131", "id": 345526171, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTUyNjE3MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-19T15:44:30Z", "updated_at": "2017-11-19T15:44:30Z", "author_association": "OWNER", "body": "Relevant SQLite docs:\r\n\r\n* https://sqlite.org/fts5.html\r\n* https://www.sqlite.org/fts3.html", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275166669, "label": "UI support for running FTS searches"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/131#issuecomment-345526517", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/131", "id": 345526517, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTUyNjUxNw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-19T15:48:28Z", "updated_at": "2017-11-19T15:48:28Z", "author_association": "OWNER", "body": "Since SQLite supports column specifications in the MATCH body itself, there's no need to provide a separate mechanism for specifying columns in the query string: https://sqlite.org/fts5.html#fts5_column_filters", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275166669, "label": "UI support for running FTS searches"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/131#issuecomment-345533274", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/131", "id": 345533274, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTUzMzI3NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-19T17:17:37Z", "updated_at": "2017-11-19T17:18:05Z", "author_association": "OWNER", "body": "Demo: https://sf-trees.now.sh/sf-trees-ebc2ad9/Street_Tree_List?_search=grove+st\r\n\r\n\"sf-trees__street_tree_list_and_https___datasette-publish-dev_now_sh_auth__code_jigy80kxgsfddalfdwqwldzm\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275166669, "label": "UI support for running FTS searches"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/134#issuecomment-345537268", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/134", "id": 345537268, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTUzNzI2OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-19T18:10:48Z", "updated_at": "2017-11-19T18:10:48Z", "author_association": "OWNER", "body": "Dupe of #127 ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275176094, "label": "Filtered table view should show a count"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/44#issuecomment-345537315", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/44", "id": 345537315, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTUzNzMxNQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-19T18:11:27Z", "updated_at": "2017-11-19T18:11:27Z", "author_association": "OWNER", "body": "This would enable faceted search - moving it to the search milestone.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 269731374, "label": "?_group_count=country - return counts by specific column(s)"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/127#issuecomment-345538016", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/127", "id": 345538016, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTUzODAxNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-19T18:22:45Z", "updated_at": "2017-11-19T18:22:45Z", "author_association": "OWNER", "body": "I implemented a basic version of this in f59c840e7db8870afcdeba7a53bdea07bb674334 for custom SQL.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275135719, "label": "Filtered tables should show count of all matching rows, if fast enough"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/122#issuecomment-345552358", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/122", "id": 345552358, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTU1MjM1OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-19T21:45:38Z", "updated_at": "2017-12-05T19:09:52Z", "author_association": "OWNER", "body": "For the overall shape of the rows:\r\n\r\n`?_shape=lists` (default), `?_shape=objects`, `?_shape=object` (primary key as object keys)\r\n\r\nFor getting back extra keys:\r\n\r\n`?_extras=schema,query,timing`\r\n\r\nFor expanding columns:\r\n\r\n`?_expand_all=1`\r\n\r\nOr `?_expand=qSpecies&_expand=qCaretaker`\r\n\r\nThe template view will only be allowed to work with data it can request using extra options.\r\n\r\nThat leaves one sighted nasty edge-case: the default view will expand all columns, but the `.json` view of it won't?\r\n\r\nI think that's OK. The default view won't include the extras used by the template to render the page either.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275092453, "label": "Redesign JSON output, ditch jsono, offer variants controlled by parameter instead"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/122#issuecomment-345552440", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/122", "id": 345552440, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTU1MjQ0MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-19T21:46:43Z", "updated_at": "2017-11-19T21:46:43Z", "author_association": "OWNER", "body": "This calls for refactoring the code so the table view, the row view and the custom SQL view share as much logic as possible.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275092453, "label": "Redesign JSON output, ditch jsono, offer variants controlled by parameter instead"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/122#issuecomment-345552500", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/122", "id": 345552500, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTU1MjUwMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-19T21:47:27Z", "updated_at": "2017-11-19T21:47:27Z", "author_association": "OWNER", "body": "To start with, I could just ditch the .jsono in favour of the new _shape argument.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275092453, "label": "Redesign JSON output, ditch jsono, offer variants controlled by parameter instead"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/86#issuecomment-345559864", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/86", "id": 345559864, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTU1OTg2NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-19T23:35:48Z", "updated_at": "2017-11-19T23:35:48Z", "author_association": "OWNER", "body": "I need a nicer abstraction around the concept of filters. It needs to be able to:\r\n\r\n- convert querystring parameters into filters\r\n- convert filters into a querystring\r\n- iterate through currently applied filters\r\n- convert selected filters into a human description (e.g. for a title)\r\n- expand filters that involve a foreign key\r\n- add filters\r\n- remove filters\r\n- define different types of filters\r\n\r\nIt should replace my current `build_where_clauses` implementation, in particular this bit:\r\n\r\nhttps://github.com/simonw/datasette/blob/a5881e105a02830d26f07e98177248d5910893da/datasette/utils.py#L38-L56", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273703829, "label": "Filter UI on table page"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/44#issuecomment-345601103", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/44", "id": 345601103, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTYwMTEwMw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-20T06:13:35Z", "updated_at": "2017-11-20T06:13:35Z", "author_association": "OWNER", "body": "Some demos:\r\n\r\nSingle column: https://sf-trees-flat.now.sh/sf-trees-flat-ba738ce/Street_Tree_List?_group_count=qSpecies\r\n\r\nMulti column: https://sf-trees-flat.now.sh/sf-trees-flat-ba738ce/Street_Tree_List?_group_count=qLegalStatus&_group_count=qSpecies\r\n\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 269731374, "label": "?_group_count=country - return counts by specific column(s)"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/133#issuecomment-345601870", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/133", "id": 345601870, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTYwMTg3MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-20T06:18:53Z", "updated_at": "2017-11-20T06:18:53Z", "author_association": "OWNER", "body": "This may be tackled by the filters work happening in #86", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275176006, "label": "If view is filtered, search should apply within those filtered rows"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/137#issuecomment-345750135", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/137", "id": 345750135, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTc1MDEzNQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-20T16:30:56Z", "updated_at": "2018-07-10T17:53:13Z", "author_association": "OWNER", "body": "One possible route: introduce prefixes eg `?a.Trees.age__gt=5&a.Trees._group_count=qSpecies&b.Trees.age__gt=10&b.Trees._group_count=qSpecies`\r\n\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275415799, "label": "Ability to combine multiple SQL queries on a single graph"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/129#issuecomment-345793887", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/129", "id": 345793887, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTc5Mzg4Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-20T19:00:30Z", "updated_at": "2017-11-20T19:00:30Z", "author_association": "OWNER", "body": "Need to hide these from the index summary page as well:\r\n\r\n\"datasette__archive-fires-indonesia__conventional_power_plants_eu__fatal-police-shootings-data__fivethirtyeight__flights__google-trends__nhsadmin__northwind__openelections__polar-bears__sf-trees-fks__venue_profile\"\r\n\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275164558, "label": "Hide FTS-created tables by default on the database index page"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/105#issuecomment-345809808", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/105", "id": 345809808, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTgwOTgwOA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-20T19:50:53Z", "updated_at": "2017-11-20T19:50:53Z", "author_association": "OWNER", "body": "OK, https://github.com/openclimatedata/global-carbon-budget/blob/master/datapackage.json really does look like it covers all of the bases I need for #138. Closing this ticket in favour of that new one.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 274314940, "label": "Consider data-package as a format for metadata"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/42#issuecomment-345810031", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/42", "id": 345810031, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTgxMDAzMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-20T19:51:29Z", "updated_at": "2017-11-20T19:51:29Z", "author_association": "OWNER", "body": "See also #138", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268591332, "label": "Homepage UI for editing metadata file"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/14#issuecomment-345893877", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/14", "id": 345893877, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTg5Mzg3Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-21T02:11:27Z", "updated_at": "2017-11-21T02:11:27Z", "author_association": "OWNER", "body": "http://setuptools.readthedocs.io/en/latest/setuptools.html#dynamic-discovery-of-services-and-plugins Is pretty good ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267707940, "label": "Datasette Plugins"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/141#issuecomment-346157542", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/141", "id": 346157542, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NjE1NzU0Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-21T20:53:47Z", "updated_at": "2017-11-21T20:53:47Z", "author_association": "OWNER", "body": "I think a copy is the right thing to do here - it will be cleaned up when the temp directory is removed. The hard link thing was always intended to save space, but if we can't do a hard link I don't see any harm in a temporary file copy.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275814941, "label": "datasette publish can fail if /tmp is on a different device"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/90#issuecomment-346161985", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/90", "id": 346161985, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NjE2MTk4NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-21T21:10:22Z", "updated_at": "2017-11-21T21:10:22Z", "author_association": "OWNER", "body": "Woohoo!\r\n\r\nI've found one tiny issue: right now, the following doesn't work:\r\n\r\n datasette publish heroku ../demo-databses/google-trends.db\r\n\r\nIt results in this error in the Heroku logs:\r\n\r\n 2017-11-21T21:03:29.210511+00:00 app[web.1]: Usage: datasette serve [OPTIONS] [FILES]...\r\n 2017-11-21T21:03:29.210524+00:00 app[web.1]: \r\n 2017-11-21T21:03:29.210555+00:00 app[web.1]: Error: Invalid value for \"files\": Path \"../demo-databses/google-trends.db\" does not exist.\r\n\r\nThe command works fine if you run it in the same directory as the database file you are publishing.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273846123, "label": "datasette publish heroku"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/90#issuecomment-346163513", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/90", "id": 346163513, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NjE2MzUxMw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-21T21:16:16Z", "updated_at": "2017-11-21T21:16:16Z", "author_association": "OWNER", "body": "The reason relative paths work for `publish now` is that the `make_dockerfile()` function is called by passing the file names, not the full file paths:\r\n\r\nhttps://github.com/simonw/datasette/blob/e47117ce1d15f11246a3120aa49de70205713d05/datasette/utils.py#L166\r\n\r\nClearly the correct thing to do here is for us to refactor the shared code between heroku/package/now.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273846123, "label": "datasette publish heroku"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/142#issuecomment-346217739", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/142", "id": 346217739, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NjIxNzczOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-22T01:45:30Z", "updated_at": "2017-11-22T01:45:30Z", "author_association": "OWNER", "body": "Might be nice to have a --no-limits option that disables time and maximum row count limits.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275917760, "label": "Show extra instructions with the interrupted"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/144#issuecomment-346405660", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/144", "id": 346405660, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NjQwNTY2MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-22T16:38:05Z", "updated_at": "2017-11-22T16:38:05Z", "author_association": "OWNER", "body": "I have a solution for FTS already, but I'm interested in apsw as a mechanism for allowing custom virtual tables to be written in Python (pysqlite only lets you write custom functions)\r\n\r\nNot having PyPI support is pretty tough though. I'm planning a plugin/extension system which would be ideal for things like an optional apsw mode, but that's a lot harder if apsw isn't in PyPI.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276091279, "label": "apsw as alternative sqlite3 binding (for full text search)"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/14#issuecomment-346406009", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/14", "id": 346406009, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NjQwNjAwOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-22T16:39:08Z", "updated_at": "2017-11-22T16:39:08Z", "author_association": "OWNER", "body": "Oh thanks, that definitely looks like an interesting option.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267707940, "label": "Datasette Plugins"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/129#issuecomment-346463342", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/129", "id": 346463342, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NjQ2MzM0Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-22T20:22:02Z", "updated_at": "2017-11-22T20:22:02Z", "author_association": "OWNER", "body": "On the index page:\r\n\r\n\"datasette__archive-fires-indonesia__conventional_power_plants_eu__fatal-police-shootings-data__fivethirtyeight__flights__google-trends__nhsadmin__northwind__openelections__polar-bears__sf-trees__sf-trees-fks__venue_profile_and_hide_fts-crea\"\r\n\r\nOn the database index page:\r\n\r\n\"sf-trees\"\r\n\r\nAfter clicking that link:\r\n\r\n\"sf-trees\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275164558, "label": "Hide FTS-created tables by default on the database index page"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/86#issuecomment-346530498", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/86", "id": 346530498, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NjUzMDQ5OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-23T04:35:07Z", "updated_at": "2017-11-23T04:35:07Z", "author_association": "OWNER", "body": "Here's where I am now. Needs a bit of UI tidy up and it will be good to release:\r\n\r\n\"conventional_power_plants_eu__conventional_power_plants_eu\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273703829, "label": "Filter UI on table page"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/146#issuecomment-346682905", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/146", "id": 346682905, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NjY4MjkwNQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-23T18:55:08Z", "updated_at": "2017-11-23T18:55:08Z", "author_association": "OWNER", "body": "\"compute_engine_-_simonwillisonblog\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276455748, "label": "datasette publish gcloud"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/86#issuecomment-346691243", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/86", "id": 346691243, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NjY5MTI0Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-23T20:07:15Z", "updated_at": "2017-11-23T20:07:15Z", "author_association": "OWNER", "body": "\"fivethirtyeight__bob-ross_elements-by-episode_csv\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273703829, "label": "Filter UI on table page"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/86#issuecomment-346694211", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/86", "id": 346694211, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NjY5NDIxMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-23T20:34:32Z", "updated_at": "2017-11-23T20:34:32Z", "author_association": "OWNER", "body": "And with ef3eacf622e69723d48ab1ad597645770a7361db I'm ready to call this one done.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273703829, "label": "Filter UI on table page"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/132#issuecomment-346701751", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/132", "id": 346701751, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NjcwMTc1MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-23T21:51:51Z", "updated_at": "2017-11-23T21:51:51Z", "author_association": "OWNER", "body": "\"fatal-police-shootings-data__fatal-police-shootings-data\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275175929, "label": "Row view is not currently expanding foreign keys"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/133#issuecomment-346705879", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/133", "id": 346705879, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NjcwNTg3OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-23T22:43:42Z", "updated_at": "2017-11-24T22:07:46Z", "author_association": "OWNER", "body": "Easiest way to do this will be to move it into the same `
` as the filters.\r\n\r\nWould be nice to detect `?_search=` and redirect to URL without the `_search` parameter, just for aesthetics.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275176006, "label": "If view is filtered, search should apply within those filtered rows"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/147#issuecomment-346900554", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/147", "id": 346900554, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NjkwMDU1NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-24T22:02:22Z", "updated_at": "2017-11-24T22:02:22Z", "author_association": "OWNER", "body": "\"conventional_power_plants_eu__conventional_power_plants_eu__14_rows_where_company____nuon_\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276476670, "label": "Tidy up design of the header of the table page"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/133#issuecomment-346902583", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/133", "id": 346902583, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NjkwMjU4Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-24T22:30:32Z", "updated_at": "2017-11-24T22:30:32Z", "author_association": "OWNER", "body": "\"sf-trees__street_tree_list__1_row_where_search_matches__ocean___qcareassistant____1__qcareassistant_is_not_blank_and_qlegalstatus___1\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275176006, "label": "If view is filtered, search should apply within those filtered rows"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/149#issuecomment-346903317", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/149", "id": 346903317, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NjkwMzMxNw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-24T22:41:58Z", "updated_at": "2017-11-24T22:41:58Z", "author_association": "OWNER", "body": "Custom SQL results now look like this:\r\n\r\n\"banners_and_alerts_and_conventional_power_plants_eu\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276704127, "label": "Update custom SQL results to match new table view header"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/124#issuecomment-347049888", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/124", "id": 347049888, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NzA0OTg4OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-27T00:01:08Z", "updated_at": "2017-11-27T00:01:08Z", "author_association": "OWNER", "body": "https://sqlite.org/c3ref/open.html Is the only documentation I've been able to find of the immutable option:\r\n\r\n> **immutable**: The immutable parameter is a boolean query parameter that indicates that the database file is stored on read-only media. When immutable is set, SQLite assumes that the database file cannot be changed, even by a process with higher privilege, and so the database is opened read-only and all locking and change detection is disabled. Caution: Setting the immutable property on a database file that does in fact change can result in incorrect query results and/or SQLITE_CORRUPT errors. ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275125805, "label": "Option to open readonly but not immutable"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/153#issuecomment-347050235", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/153", "id": 347050235, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NzA1MDIzNQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-27T00:06:24Z", "updated_at": "2017-11-27T00:06:24Z", "author_association": "OWNER", "body": "I've been thinking about 1. a bit - I actually think it would be fine to have a rule that says \"if the contents of the cell starts with `http://` or `https://` and doesn't contain any whitespace, turn that into a link\". If you need the non-linked version that will always be available in the JSON.\r\n\r\nFor the other two... I think #12 may be the way to go here: if you can easily over-ride the `row.html` and `table.html` templates for specific databases you can easily set pre-formatted text or similar for certain values - maybe even with CSS that targets a specific table column.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276842536, "label": "Ability to customize presentation of specific columns in HTML view"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/153#issuecomment-347051331", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/153", "id": 347051331, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NzA1MTMzMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-27T00:23:40Z", "updated_at": "2017-11-27T03:58:49Z", "author_association": "OWNER", "body": "One quick fix could be to add a `extra_css_url` key to the `metadata.json` format (which currently hosts `title`, `license_url` etc) - if populated, we can inject a link to that stylesheet on every page. We could add a few classes in strategic places that include the database and table names to give people styling hooks.\r\n\r\nWhile we're at it, an `extra_js_url` key would let people go really nuts!", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276842536, "label": "Ability to customize presentation of specific columns in HTML view"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/124#issuecomment-347236102", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/124", "id": 347236102, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NzIzNjEwMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-27T16:24:15Z", "updated_at": "2017-11-27T16:24:15Z", "author_association": "OWNER", "body": "I'd really like to get some benchmarks working so I can see the actual impact of this kind of thing.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275125805, "label": "Option to open readonly but not immutable"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/155#issuecomment-347713453", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/155", "id": 347713453, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NzcxMzQ1Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-29T00:41:30Z", "updated_at": "2017-11-29T00:41:30Z", "author_association": "OWNER", "body": "Could you provide the SQL to create a reproducible test case (both CREATE TABLE and INSERT statements)?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 277589569, "label": "A primary key column that has foreign key restriction associated won't rendering label column"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/155#issuecomment-347714471", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/155", "id": 347714471, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NzcxNDQ3MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-29T00:47:21Z", "updated_at": "2017-11-29T00:47:21Z", "author_association": "OWNER", "body": "Thanks!", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 277589569, "label": "A primary key column that has foreign key restriction associated won't rendering label column"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/155#issuecomment-347715452", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/155", "id": 347715452, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NzcxNTQ1Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-29T00:52:30Z", "updated_at": "2017-11-29T00:52:30Z", "author_association": "OWNER", "body": "Interestingly, it almost does the right thing on the individual row page: https://bug-155-dkcqckhgki.now.sh/bug-155-9a7bb68/lhs/1\r\n\r\n\"cursor_and_bug-155__lhs\"\r\n\r\nThe symbol has been expanded, but there's a rogue '1' that shouldn't be there at all - I think that's bug #152\r\n\r\nThe table view itself is definitely doing the wrong thing: https://bug-155-dkcqckhgki.now.sh/bug-155-9a7bb68/lhs\r\n\r\n\"cursor_and_bug-155__lhs__2_rows_and_paradise_papers_tie_kushner_startup_to_russian_money_\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 277589569, "label": "A primary key column that has foreign key restriction associated won't rendering label column"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/153#issuecomment-347735334", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/153", "id": 347735334, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NzczNTMzNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-29T02:45:03Z", "updated_at": "2017-11-29T02:45:03Z", "author_association": "OWNER", "body": "@ftrain OK I've shipped the first version of this. Here's the initial documentation:\r\n\r\nCreate a `metadata.json` file that looks like this:\r\n\r\n {\r\n \"extra_css_urls\": [\r\n \"https://simonwillison.net/static/css/all.bf8cd891642c.css\"\r\n ],\r\n \"extra_js_urls\": [\r\n \"https://code.jquery.com/jquery-3.2.1.slim.min.js\"\r\n ]\r\n }\r\n\r\nThen start datasette like this:\r\n\r\n datasette mydb.db --metadata=metadata.json\r\n\r\nThe CSS and JavaScript files will be linked in the `` of every page.\r\n\r\nYou can also specify a SRI (subresource integrity hash) for these assets:\r\n\r\n {\r\n \"extra_css_urls\": [\r\n {\r\n \"url\": \"https://simonwillison.net/static/css/all.bf8cd891642c.css\",\r\n \"sri\": \"sha384-9qIZekWUyjCyDIf2YK1FRoKiPJq4PHt6tp/ulnuuyRBvazd0hG7pWbE99zvwSznI\"\r\n }\r\n ],\r\n \"extra_js_urls\": [\r\n {\r\n \"url\": \"https://code.jquery.com/jquery-3.2.1.slim.min.js\",\r\n \"sri\": \"sha256-k2WSCIexGzOj3Euiig+TlR8gA0EmPjuc79OEeY5L45g=\"\r\n }\r\n ]\r\n }\r\n\r\nModern browsers will only execute the stylsheet or JavaScript if the SRI hash\r\nmatches the content served. You can generate hashes using www.srihash.org\r\n\r\nThis isn't shipped in a release yet, but you can still access these features in `datasette publish` like so:\r\n\r\n datasette publish now mydb.db --metadata=metadata.json --branch=master\r\n\r\nThe `--branch=master` option will pull the latest master build of Datasette from GitHub.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276842536, "label": "Ability to customize presentation of specific columns in HTML view"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/153#issuecomment-347735598", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/153", "id": 347735598, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NzczNTU5OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-29T02:46:31Z", "updated_at": "2017-11-29T02:47:27Z", "author_association": "OWNER", "body": "To style individual columns you'll currently need to use the `nth-of-type` selector, e.g.:\r\n\r\n td:nth-of-type(5):before { white-space: pre }", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276842536, "label": "Ability to customize presentation of specific columns in HTML view"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/153#issuecomment-347735724", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/153", "id": 347735724, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NzczNTcyNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-29T02:47:14Z", "updated_at": "2017-11-29T02:47:14Z", "author_association": "OWNER", "body": "(This only addresses point 2 in your issue description - points 1 and point 3 are still to come)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276842536, "label": "Ability to customize presentation of specific columns in HTML view"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/153#issuecomment-347928926", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/153", "id": 347928926, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NzkyODkyNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-29T17:09:40Z", "updated_at": "2017-11-29T17:09:40Z", "author_association": "OWNER", "body": "OK, that's point 1 covered.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276842536, "label": "Ability to customize presentation of specific columns in HTML view"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/153#issuecomment-348103270", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/153", "id": 348103270, "node_id": "MDEyOklzc3VlQ29tbWVudDM0ODEwMzI3MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-30T07:16:40Z", "updated_at": "2017-11-30T07:16:40Z", "author_association": "OWNER", "body": "Every template now gets CSS classes in the body designed to support custom\r\nstyling.\r\n\r\nThe index template (the top level page at /) gets this:\r\n\r\n \r\n\r\nThe database template (/dbname/) gets this:\r\n\r\n \r\n\r\nThe table template (/dbname/tablename) gets:\r\n\r\n \r\n\r\nThe row template (/dbname/tablename/rowid) gets:\r\n\r\n \r\n\r\nThe db-x and table-x classes use the database or table names themselves IF\r\nthey are valid CSS identifiers. If they aren't, we strip any invalid\r\ncharacters out and append a 6 character md5 digest of the original name, in\r\norder to ensure that multiple tables which resolve to the same stripped\r\ncharacter version still have different CSS classes.\r\n\r\nSome examples (extracted from the unit tests):\r\n\r\n \"simple\" => \"simple\"\r\n \"MixedCase\" => \"MixedCase\"\r\n \"-no-leading-hyphens\" => \"no-leading-hyphens-65bea6\"\r\n \"_no-leading-underscores\" => \"no-leading-underscores-b921bc\"\r\n \"no spaces\" => \"no-spaces-7088d7\"\r\n \"-\" => \"336d5e\"\r\n \"no $ characters\" => \"no--characters-59e024\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276842536, "label": "Ability to customize presentation of specific columns in HTML view"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/12#issuecomment-348245757", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/12", "id": 348245757, "node_id": "MDEyOklzc3VlQ29tbWVudDM0ODI0NTc1Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-30T16:39:45Z", "updated_at": "2017-11-30T16:39:45Z", "author_association": "OWNER", "body": "It is now possible to over-ride templates on a per-database / per-row or per-\r\ntable basis.\r\n\r\nWhen you access e.g. `/mydatabase/mytable` Datasette will look for the following:\r\n\r\n - table-mydatabase-mytable.html\r\n - table.html\r\n\r\nIf you provided a `--template-dir` argument to datasette serve it will look in\r\nthat directory first.\r\n\r\nThe lookup rules are as follows:\r\n\r\n Index page (/):\r\n index.html\r\n\r\n Database page (/mydatabase):\r\n database-mydatabase.html\r\n database.html\r\n\r\n Table page (/mydatabase/mytable):\r\n table-mydatabase-mytable.html\r\n table.html\r\n\r\n Row page (/mydatabase/mytable/id):\r\n row-mydatabase-mytable.html\r\n row.html\r\n\r\nIf a table name has spaces or other unexpected characters in it, the template\r\nfilename will follow the same rules as our custom `` CSS classes\r\nintroduced in 8ab3a16 - for example, a table called \"Food Trucks\"\r\nwill attempt to load the following templates:\r\n\r\n table-mydatabase-Food-Trucks-399138.html\r\n table.html\r\n\r\nIt is possible to extend the default templates using Jinja template\r\ninheritance. If you want to customize EVERY row template with some additional\r\ncontent you can do so by creating a `row.html` template like this:\r\n\r\n {% extends \"default:row.html\" %}\r\n\r\n {% block content %}\r\n

EXTRA HTML AT THE TOP OF THE CONTENT BLOCK

\r\n

This line renders the original block:

\r\n {{ super() }}\r\n {% endblock %}\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267523511, "label": "Make it so you can override templates"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/153#issuecomment-348245843", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/153", "id": 348245843, "node_id": "MDEyOklzc3VlQ29tbWVudDM0ODI0NTg0Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-30T16:40:02Z", "updated_at": "2017-11-30T16:40:02Z", "author_association": "OWNER", "body": "It is now possible to over-ride templates on a per-database / per-row or per-\r\ntable basis.\r\n\r\nWhen you access e.g. `/mydatabase/mytable` Datasette will look for the following:\r\n\r\n - table-mydatabase-mytable.html\r\n - table.html\r\n\r\nIf you provided a `--template-dir` argument to datasette serve it will look in\r\nthat directory first.\r\n\r\nThe lookup rules are as follows:\r\n\r\n Index page (/):\r\n index.html\r\n\r\n Database page (/mydatabase):\r\n database-mydatabase.html\r\n database.html\r\n\r\n Table page (/mydatabase/mytable):\r\n table-mydatabase-mytable.html\r\n table.html\r\n\r\n Row page (/mydatabase/mytable/id):\r\n row-mydatabase-mytable.html\r\n row.html\r\n\r\nIf a table name has spaces or other unexpected characters in it, the template\r\nfilename will follow the same rules as our custom `` CSS classes\r\nintroduced in 8ab3a16 - for example, a table called \"Food Trucks\"\r\nwill attempt to load the following templates:\r\n\r\n table-mydatabase-Food-Trucks-399138.html\r\n table.html\r\n\r\nIt is possible to extend the default templates using Jinja template\r\ninheritance. If you want to customize EVERY row template with some additional\r\ncontent you can do so by creating a `row.html` template like this:\r\n\r\n {% extends \"default:row.html\" %}\r\n\r\n {% block content %}\r\n

EXTRA HTML AT THE TOP OF THE CONTENT BLOCK

\r\n

This line renders the original block:

\r\n {{ super() }}\r\n {% endblock %}\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276842536, "label": "Ability to customize presentation of specific columns in HTML view"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/153#issuecomment-348248406", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/153", "id": 348248406, "node_id": "MDEyOklzc3VlQ29tbWVudDM0ODI0ODQwNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-30T16:47:45Z", "updated_at": "2017-11-30T16:47:45Z", "author_association": "OWNER", "body": "Remaining work on this now lives in a milestone: https://github.com/simonw/datasette/milestone/6", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276842536, "label": "Ability to customize presentation of specific columns in HTML view"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/126#issuecomment-348248957", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/126", "id": 348248957, "node_id": "MDEyOklzc3VlQ29tbWVudDM0ODI0ODk1Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-30T16:49:24Z", "updated_at": "2017-11-30T16:49:24Z", "author_association": "OWNER", "body": "https://simonwillison.net/2017/Nov/25/new-in-datasette/", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275135535, "label": "Blog entry announcing foreign key support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/156#issuecomment-348255782", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/156", "id": 348255782, "node_id": "MDEyOklzc3VlQ29tbWVudDM0ODI1NTc4Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-30T17:11:34Z", "updated_at": "2017-11-30T17:11:34Z", "author_association": "OWNER", "body": "http://datasette.readthedocs.io/en/latest/custom_templates.html", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 278189708, "label": "Document CSS hooks and custom templates"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/153#issuecomment-348255925", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/153", "id": 348255925, "node_id": "MDEyOklzc3VlQ29tbWVudDM0ODI1NTkyNQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-30T17:12:03Z", "updated_at": "2017-11-30T17:12:03Z", "author_association": "OWNER", "body": "Documentation is now live for this: http://datasette.readthedocs.io/en/latest/custom_templates.html", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276842536, "label": "Ability to customize presentation of specific columns in HTML view"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/160#issuecomment-348404864", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/160", "id": 348404864, "node_id": "MDEyOklzc3VlQ29tbWVudDM0ODQwNDg2NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-01T05:26:57Z", "updated_at": "2017-12-01T05:26:57Z", "author_association": "OWNER", "body": "Question is... what should happen to the default static stuff? At the moment that's just https://fivethirtyeight.datasettes.com/-/static/app.css - though I want to improve that to include a content hash, see #154 ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 278208011, "label": "Ability to bundle and serve additional static files"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/154#issuecomment-348404988", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/154", "id": 348404988, "node_id": "MDEyOklzc3VlQ29tbWVudDM0ODQwNDk4OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-01T05:27:40Z", "updated_at": "2017-12-01T05:27:40Z", "author_association": "OWNER", "body": "If I do add additional static file bundling should that automatically get content hashes as well? #160 - problem with that is then I might have to parse the CSS files and rewrite their internal background-url references etc.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276873891, "label": "Datasette CSS should include content hash in the URL"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/20#issuecomment-348420129", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/20", "id": 348420129, "node_id": "MDEyOklzc3VlQ29tbWVudDM0ODQyMDEyOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-01T07:16:25Z", "updated_at": "2017-12-01T07:16:25Z", "author_association": "OWNER", "body": "I've found some examples of canned queries I want to support that can't be represented as views, so I'm going to reopen this.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267759136, "label": "Config file with support for defining canned queries"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/20#issuecomment-348420955", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/20", "id": 348420955, "node_id": "MDEyOklzc3VlQ29tbWVudDM0ODQyMDk1NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-01T07:21:08Z", "updated_at": "2017-12-01T07:21:08Z", "author_association": "OWNER", "body": "I'll use the existing metadata.json file:\r\n\r\n {\r\n \"databases\": {\r\n \"mydb\": {\r\n \"queries\": {\r\n \"custom_thingy\": {...\r\n\r\nThe query definition can either be just a string of SQL, or it can be an object with a sql key and optional title and description keys.\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267759136, "label": "Config file with support for defining canned queries"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/160#issuecomment-348719680", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/160", "id": 348719680, "node_id": "MDEyOklzc3VlQ29tbWVudDM0ODcxOTY4MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-02T20:59:27Z", "updated_at": "2017-12-02T20:59:27Z", "author_association": "OWNER", "body": "This is about more than just CSS and JavaScript - there are plenty of reasons someone might want to bundle HTML as well, e.g. for building something like https://sf-tree-search.now.sh/\r\n\r\nSo, instead of thinking about this in terms of /static/, I'm going to think about this in terms of allowing people to mount one or more document roots (or docroots).\r\n\r\n datasette serve mydb.db -d my-doc-root/\r\n\r\nThis will cause the root of the server to show content from the `my-doc-root/` directory (assuming it has an index.html file in it).\r\n\r\nA more common option will be to mount specific folders to specific directories, like this:\r\n\r\n datasette serve mydb.db -d static:my-static/\r\n\r\nNow any hits to `/static/foo.css` will serve content from `my-static/foo.css`", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 278208011, "label": "Ability to bundle and serve additional static files"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/160#issuecomment-348719752", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/160", "id": 348719752, "node_id": "MDEyOklzc3VlQ29tbWVudDM0ODcxOTc1Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-02T21:00:21Z", "updated_at": "2017-12-02T21:00:21Z", "author_association": "OWNER", "body": "Not sure which I like better out of `-d/--docroot` or `-s/--static` or `-m/--mount` for this.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 278208011, "label": "Ability to bundle and serve additional static files"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/160#issuecomment-348719827", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/160", "id": 348719827, "node_id": "MDEyOklzc3VlQ29tbWVudDM0ODcxOTgyNw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-02T21:01:36Z", "updated_at": "2017-12-02T21:01:36Z", "author_association": "OWNER", "body": "`-m` is already taken for `--metadata`.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 278208011, "label": "Ability to bundle and serve additional static files"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/160#issuecomment-348793054", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/160", "id": 348793054, "node_id": "MDEyOklzc3VlQ29tbWVudDM0ODc5MzA1NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-03T16:35:22Z", "updated_at": "2017-12-03T16:35:22Z", "author_association": "OWNER", "body": "You can now tell Datasette to serve static files from a specific location at a\r\nspecific mountpoint.\r\n\r\nFor example:\r\n\r\n\tdatasette serve mydb.db --static extra-css:/tmp/static/css\r\n\r\nNow if you visit this URL:\r\n\r\n\thttp://localhost:8001/extra-css/blah.css\r\n\r\nThe following file will be served:\r\n\r\n\t/tmp/static/css/blah.css\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 278208011, "label": "Ability to bundle and serve additional static files"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/160#issuecomment-348793156", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/160", "id": 348793156, "node_id": "MDEyOklzc3VlQ29tbWVudDM0ODc5MzE1Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-03T16:35:53Z", "updated_at": "2017-12-03T16:35:53Z", "author_association": "OWNER", "body": "Still TODO: teach `datasette publish` and friends about this.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 278208011, "label": "Ability to bundle and serve additional static files"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/161#issuecomment-348860191", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/161", "id": 348860191, "node_id": "MDEyOklzc3VlQ29tbWVudDM0ODg2MDE5MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-04T04:52:14Z", "updated_at": "2017-12-04T04:52:14Z", "author_association": "OWNER", "body": "Seems like a reasonable thing for us to support.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 278814220, "label": "Support WITH query "}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/20#issuecomment-348860623", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/20", "id": 348860623, "node_id": "MDEyOklzc3VlQ29tbWVudDM0ODg2MDYyMw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-04T04:56:21Z", "updated_at": "2017-12-04T04:56:21Z", "author_association": "OWNER", "body": "While I'm doing this, I could add per-database and per-table metadata too ala #68", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267759136, "label": "Config file with support for defining canned queries"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/20#issuecomment-349027974", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/20", "id": 349027974, "node_id": "MDEyOklzc3VlQ29tbWVudDM0OTAyNzk3NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-04T17:01:19Z", "updated_at": "2017-12-04T17:01:19Z", "author_association": "OWNER", "body": " This is also a good opportunity to re-factor out a separate query.html template - right now the database.html template is doing two jobs.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267759136, "label": "Config file with support for defining canned queries"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/135#issuecomment-349047335", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/135", "id": 349047335, "node_id": "MDEyOklzc3VlQ29tbWVudDM0OTA0NzMzNQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-04T17:57:08Z", "updated_at": "2017-12-04T17:57:08Z", "author_association": "OWNER", "body": "Turns out there's a bug in this: https://timezones-now-hrjgkinozh.now.sh/timezones-0d61a90/ElementaryGeometries should not be showing the search box.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275179724, "label": "?_search=x should work if used directly against a FTS virtual table"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/20#issuecomment-349359498", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/20", "id": 349359498, "node_id": "MDEyOklzc3VlQ29tbWVudDM0OTM1OTQ5OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-05T16:30:06Z", "updated_at": "2017-12-05T16:30:06Z", "author_association": "OWNER", "body": "Named canned queries can now be defined in metadata.json like this:\r\n \r\n {\r\n \"databases\": {\r\n \"timezones\": {\r\n \"queries\": {\r\n \"timezone_for_point\": \"select tzid from timezones ...\"\r\n }\r\n }\r\n }\r\n }\r\n \r\nThese will be shown in a new \"Queries\" section beneath \"Views\" on the database page.\r\n\r\n\"timezones\"\r\n\r\n\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267759136, "label": "Config file with support for defining canned queries"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/20#issuecomment-349383276", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/20", "id": 349383276, "node_id": "MDEyOklzc3VlQ29tbWVudDM0OTM4MzI3Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-05T17:45:20Z", "updated_at": "2017-12-05T17:45:20Z", "author_association": "OWNER", "body": "http://datasette.readthedocs.io/en/latest/sql_queries.html", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267759136, "label": "Config file with support for defining canned queries"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/20#issuecomment-349406761", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/20", "id": 349406761, "node_id": "MDEyOklzc3VlQ29tbWVudDM0OTQwNjc2MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-05T19:03:06Z", "updated_at": "2017-12-05T19:03:06Z", "author_association": "OWNER", "body": "Demo: https://timezones-api.now.sh/timezones-3cb9f64/by_point", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 267759136, "label": "Config file with support for defining canned queries"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/122#issuecomment-349408214", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/122", "id": 349408214, "node_id": "MDEyOklzc3VlQ29tbWVudDM0OTQwODIxNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-05T19:08:04Z", "updated_at": "2017-12-05T19:08:04Z", "author_association": "OWNER", "body": "I think `.json` should continue to return rows as list-of-lists - it's a nice default because it produces a smaller overall JSON file. Encouraging people to specify an alternative shape to get the current `.jsono` format feels appropriate.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275092453, "label": "Redesign JSON output, ditch jsono, offer variants controlled by parameter instead"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/135#issuecomment-349860851", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/135", "id": 349860851, "node_id": "MDEyOklzc3VlQ29tbWVudDM0OTg2MDg1MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-07T04:37:59Z", "updated_at": "2017-12-07T04:37:59Z", "author_association": "OWNER", "body": "I'm testing this like so:\r\n\r\n datasette ~/Dropbox/Development/timezones-api/timezones.db --reload --load-extension /usr/local/lib/mod_spatialite.dylib \r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275179724, "label": "?_search=x should work if used directly against a FTS virtual table"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/135#issuecomment-349861461", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/135", "id": 349861461, "node_id": "MDEyOklzc3VlQ29tbWVudDM0OTg2MTQ2MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-07T04:43:12Z", "updated_at": "2017-12-07T04:43:12Z", "author_association": "OWNER", "body": "This query looks like it does the right thing:\r\n\r\n select * from sqlite_master\r\n where rootpage = 0\r\n and (\r\n sql like '%VIRTUAL TABLE%USING FTS%content=\"ElementaryGeometries\"%'\r\n or (\r\n tbl_name = \"ElementaryGeometries\"\r\n and sql like '%VIRTUAL TABLE%USING FTS%'\r\n )\r\n ) \r\n\r\nAgainst a table that should not be shown as FTS: https://timezones-now-hrjgkinozh.now.sh/timezones-0d61a90?sql=++++++++select+*+from+sqlite_master%0D%0A++++++++++++where+rootpage+%3D+0%0D%0A++++++++++++and+%28%0D%0A++++++++++++++++sql+like+%27%25VIRTUAL+TABLE%25USING+FTS%25content%3D%22ElementaryGeometries%22%25%27%0D%0A++++++++++++++++or+%28%0D%0A++++++++++++++++++tbl_name+%3D+%22ElementaryGeometries%22%0D%0A++++++++++++++++++and+sql+like+%27%25VIRTUAL+TABLE%25USING+FTS%25%27%0D%0A++++++++++++++++%29%0D%0A++++++++++++%29+\r\n\r\nAgainst a table that SHOULD match: https://sf-trees.now.sh/sf-trees-ebc2ad9?sql=++++++++select+*+from+sqlite_master%0D%0A++++++++++++where+rootpage+%3D+0%0D%0A++++++++++++and+%28%0D%0A++++++++++++++++sql+like+%27%25VIRTUAL+TABLE%25USING+FTS%25content%3D%22Street_Tree_List_fts%22%25%27%0D%0A++++++++++++++++or+%28%0D%0A++++++++++++++++++tbl_name+%3D+%22Street_Tree_List_fts%22%0D%0A++++++++++++++++++and+sql+like+%27%25VIRTUAL+TABLE%25USING+FTS%25%27%0D%0A++++++++++++++++%29%0D%0A++++++++++++%29+", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275179724, "label": "?_search=x should work if used directly against a FTS virtual table"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/158#issuecomment-349868849", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/158", "id": 349868849, "node_id": "MDEyOklzc3VlQ29tbWVudDM0OTg2ODg0OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-07T05:41:08Z", "updated_at": "2017-12-07T05:41:08Z", "author_association": "OWNER", "body": "I'm happy with this - we have extra_head, content, body_class and title blocks which should provide enough hooks for most reasonable customizations.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 278190981, "label": "Ensure default templates are designed to be extended"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/153#issuecomment-349874052", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/153", "id": 349874052, "node_id": "MDEyOklzc3VlQ29tbWVudDM0OTg3NDA1Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-07T06:17:33Z", "updated_at": "2017-12-07T06:17:33Z", "author_association": "OWNER", "body": "In #159 I added a mechanism for easily customizing per-column displays, and I've added documentation showing an example of using this mechanism to set certain columns to display as unescaped HTML: http://datasette.readthedocs.io/en/latest/custom_templates.html#custom-templates\r\n\r\nThis fixes item 3, so I'm closing this ticket!", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276842536, "label": "Ability to customize presentation of specific columns in HTML view"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/164#issuecomment-349874709", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/164", "id": 349874709, "node_id": "MDEyOklzc3VlQ29tbWVudDM0OTg3NDcwOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-07T06:22:10Z", "updated_at": "2017-12-07T06:22:10Z", "author_association": "OWNER", "body": "Example usage:\r\n\r\n datasette skeleton parlgov.db -m parlgov.json\r\n\r\nGenerates a `parlgov.json` file containing this:\r\n\r\n {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null,\r\n \"databases\": {\r\n \"parlgov\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null,\r\n \"queries\": {},\r\n \"tables\": {\r\n \"info_data_source\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"external_party_castles_mair\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"external_party_chess\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"external_party_huber_inglehart\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"info_table\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"external_party_euprofiler\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"party_family\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"info_id\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"sqlite_stat1\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"external_party_benoit_laver\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"external_country_iso\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"viewcalc_party_position\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"viewcalc_election_parameter\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"viewcalc_parliament_composition\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"viewcalc_country_year_share\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"election\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"politician_president\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"party_name_change\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"external_commissioner_doering\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"external_party_ray\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"party_change\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"cabinet_party\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"external_party_ees\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"party\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"external_party_cmp\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"country\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"cabinet\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"info_variable\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n },\r\n \"election_result\": {\r\n \"title\": null,\r\n \"description\": null,\r\n \"description_html\": null,\r\n \"license\": null,\r\n \"license_url\": null,\r\n \"source\": null,\r\n \"source_url\": null\r\n }\r\n }\r\n }\r\n }\r\n }\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 280013907, "label": "datasette skeleton command for kick-starting database and table metadata"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/164#issuecomment-349874844", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/164", "id": 349874844, "node_id": "MDEyOklzc3VlQ29tbWVudDM0OTg3NDg0NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-07T06:22:58Z", "updated_at": "2017-12-07T06:22:58Z", "author_association": "OWNER", "body": "This metadata doesn't yet do anything - need to implement #165", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 280013907, "label": "datasette skeleton command for kick-starting database and table metadata"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/165#issuecomment-350026183", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/165", "id": 350026183, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDAyNjE4Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-07T16:47:46Z", "updated_at": "2017-12-07T16:47:46Z", "author_association": "OWNER", "body": "Here's an example metadata.json file illustrating custom per-database and per-\r\ntable metadata:\r\n\r\n {\r\n \"title\": \"Overall datasette title\",\r\n \"description_html\": \"This is a description with HTML.\",\r\n \"databases\": {\r\n \"db1\": {\r\n \"title\": \"First database\",\r\n \"description\": \"This is a string description & has no HTML\",\r\n \"license_url\": \"http://example.com/\",\r\n \t\t\"license\": \"The example license\",\r\n \"queries\": {\r\n \t\"canned_query\": \"select * from table1 limit 3;\"\r\n },\r\n \"tables\": {\r\n \"table1\": {\r\n \"title\": \"Custom title for table1\",\r\n \"description\": \"Tables can have descriptions too\",\r\n \"source\": \"This has a custom source\",\r\n \"source_url\": \"http://example.com/\"\r\n }\r\n }\r\n }\r\n }\r\n }", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 280014287, "label": "metadata.json support for per-database and per-table information"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/165#issuecomment-350026452", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/165", "id": 350026452, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDAyNjQ1Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-07T16:48:34Z", "updated_at": "2017-12-07T16:48:34Z", "author_association": "OWNER", "body": "Needs documentation, see #166 ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 280014287, "label": "metadata.json support for per-database and per-table information"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/166#issuecomment-350035741", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/166", "id": 350035741, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDAzNTc0MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-07T17:20:35Z", "updated_at": "2017-12-07T17:20:35Z", "author_association": "OWNER", "body": "http://datasette.readthedocs.io/en/latest/metadata.html\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 280023225, "label": "Documentation for metadata.json and datasette skeleton"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/167#issuecomment-350125953", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/167", "id": 350125953, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDEyNTk1Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-07T23:25:28Z", "updated_at": "2017-12-07T23:25:28Z", "author_association": "OWNER", "body": "My column/row HTML display logic has got way too convoluted. This is a sign I need to add proper unit tests for it and clean it up.\r\n\r\nThe complexity comes from:\r\n\r\n* Displaying a rowid for tables that do not have a primary key\r\n* Showing an additional Link column for rows with a primary key\r\n* Not displaying that Link column on the individual row pages\r\n* Trying to get foreign keys working correctly in all cases, e.g. #152 ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 280315352, "label": "Nasty bug: last column not being correctly displayed"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/161#issuecomment-350158037", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/161", "id": 350158037, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDE1ODAzNw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-08T02:52:34Z", "updated_at": "2017-12-08T02:52:34Z", "author_association": "OWNER", "body": "That might mean your version of SQLite doesn't support that syntax. Unfortunately the version bundled with Python is a bit old - the one built by the Dockerfile in this repo should handle it though.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 278814220, "label": "Support WITH query "}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/141#issuecomment-350292364", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/141", "id": 350292364, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDI5MjM2NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-08T15:33:18Z", "updated_at": "2017-12-08T15:33:18Z", "author_association": "OWNER", "body": "I can emulate this on OS X using a disk image (Disk Utility -> File -> New Image -> Blank Image...) - once mounted, I get the following:\r\n\r\n >>> os.link('/tmp/hello', '/Volumes/Untitled/hello')\r\n Traceback (most recent call last):\r\n File \"\", line 1, in \r\n OSError: [Errno 18] Cross-device link: '/tmp/hello' -> '/Volumes/Untitled/hello'\r\n\r\nI can simulate that in a mock like this:\r\n\r\n\t>>> from unittest.mock import patch\r\n\t>>> @patch('os.link')\r\n\t... def test_link(mock_link):\r\n\t... mock_link.side_effect = OSError\r\n\t... mock_link()\r\n\t... \r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275814941, "label": "datasette publish can fail if /tmp is on a different device"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/141#issuecomment-350301248", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/141", "id": 350301248, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDMwMTI0OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-08T16:07:04Z", "updated_at": "2017-12-08T16:07:04Z", "author_association": "OWNER", "body": "This fix should work, please have a go with latest master and let me know if you run into any problems.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 275814941, "label": "datasette publish can fail if /tmp is on a different device"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/154#issuecomment-350302417", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/154", "id": 350302417, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDMwMjQxNw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-08T16:11:24Z", "updated_at": "2017-12-08T16:11:24Z", "author_association": "OWNER", "body": "I think I'll do this as a custom Jinja template filter. That way template authors can re-use it for their own static files if they want.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276873891, "label": "Datasette CSS should include content hash in the URL"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/154#issuecomment-350323722", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/154", "id": 350323722, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDMyMzcyMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-08T17:35:25Z", "updated_at": "2017-12-08T17:35:25Z", "author_association": "OWNER", "body": "If I do this as a querystring parameter I won't need to worry about URL routing.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276873891, "label": "Datasette CSS should include content hash in the URL"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/pull/168#issuecomment-350413422", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/168", "id": 350413422, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDQxMzQyMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-09T01:33:40Z", "updated_at": "2017-12-09T01:33:40Z", "author_association": "OWNER", "body": "https://github.com/channelcat/sanic/releases/tag/0.7.0", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 280662866, "label": "Upgrade to Sanic 0.7.0"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/167#issuecomment-350421661", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/167", "id": 350421661, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDQyMTY2MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-09T03:52:46Z", "updated_at": "2017-12-09T03:52:46Z", "author_association": "OWNER", "body": "Input: results from the database, foreign key definitions, primary key definitions, type of page\r\n\r\nOutput: display_columns and display_rows", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 280315352, "label": "Nasty bug: last column not being correctly displayed"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/167#issuecomment-350424595", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/167", "id": 350424595, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDQyNDU5NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-09T05:08:27Z", "updated_at": "2017-12-09T05:08:27Z", "author_association": "OWNER", "body": "Perhaps the row.html and table.html templates should be passed the same data but should themselves decide if they will display the Link column ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 280315352, "label": "Nasty bug: last column not being correctly displayed"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/160#issuecomment-350496258", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/160", "id": 350496258, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDQ5NjI1OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-09T18:29:28Z", "updated_at": "2017-12-09T18:29:28Z", "author_association": "OWNER", "body": "Example usage:\r\n\r\n datasette package --static css:extra-css/ --static js:extra-js/ \\\r\n \tsf-trees.db --template-dir templates/ --tag sf-trees --branch master\r\n\r\nThis creates a local Docker image that includes copies of the templates/,\r\nextra-css/ and extra-js/ directories. You can then run it like this:\r\n\r\n\tdocker run -p 8001:8001 sf-trees\r\n\r\nFor publishing to Zeit now:\r\n\r\n\tdatasette publish now --static css:extra-css/ --static js:extra-js/ \\\r\n\t\tsf-trees.db --template-dir templates/ --name sf-trees --branch master\r\n\r\nExample: https://sf-trees-wbihszoazc.now.sh/sf-trees-02c8ef1/Street_Tree_List\r\n\r\nFor publishing to Heroku:\r\n\r\n\tdatasette publish heroku --static css:extra-css/ --static js:extra-js/ \\\r\n\t\tsf-trees.db --template-dir templates/ --branch master\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 278208011, "label": "Ability to bundle and serve additional static files"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/157#issuecomment-350496277", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/157", "id": 350496277, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDQ5NjI3Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-09T18:29:41Z", "updated_at": "2017-12-09T18:29:41Z", "author_association": "OWNER", "body": "Example usage:\r\n\r\n datasette package --static css:extra-css/ --static js:extra-js/ \\\r\n \tsf-trees.db --template-dir templates/ --tag sf-trees --branch master\r\n\r\nThis creates a local Docker image that includes copies of the templates/,\r\nextra-css/ and extra-js/ directories. You can then run it like this:\r\n\r\n\tdocker run -p 8001:8001 sf-trees\r\n\r\nFor publishing to Zeit now:\r\n\r\n\tdatasette publish now --static css:extra-css/ --static js:extra-js/ \\\r\n\t\tsf-trees.db --template-dir templates/ --name sf-trees --branch master\r\n\r\nExample: https://sf-trees-wbihszoazc.now.sh/sf-trees-02c8ef1/Street_Tree_List\r\n\r\nFor publishing to Heroku:\r\n\r\n\tdatasette publish heroku --static css:extra-css/ --static js:extra-js/ \\\r\n\t\tsf-trees.db --template-dir templates/ --branch master\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 278190321, "label": "Teach \"datasette publish\" about custom template directories"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/170#issuecomment-350506593", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/170", "id": 350506593, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDUwNjU5Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-09T21:25:50Z", "updated_at": "2017-12-09T21:25:50Z", "author_association": "OWNER", "body": "Turns out this is already supported: https://github.com/simonw/datasette/blob/6bdfcf60760c27e29ff34692d06e62b36aeecc56/datasette/app.py#L307", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 280745470, "label": "Custom template for named canned query"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/170#issuecomment-350506751", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/170", "id": 350506751, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDUwNjc1MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-09T21:28:32Z", "updated_at": "2017-12-09T21:28:32Z", "author_association": "OWNER", "body": "My mistake, that's using the database name - there isn't a way of customizing for a specific named query yet.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 280745470, "label": "Custom template for named canned query"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/170#issuecomment-350507155", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/170", "id": 350507155, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDUwNzE1NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-09T21:35:30Z", "updated_at": "2017-12-09T21:35:30Z", "author_association": "OWNER", "body": " Canned query page (/mydatabase/canned-query):\r\n query-mydatabase-canned-query.html\r\n query-mydatabase.html\r\n query.html", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 280745470, "label": "Custom template for named canned query"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/171#issuecomment-350508049", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/171", "id": 350508049, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDUwODA0OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-09T21:50:50Z", "updated_at": "2017-12-09T21:50:50Z", "author_association": "OWNER", "body": "Quoting the new documentation:\r\n\r\nYou can find out which templates were considered for a specific page by viewing\r\nsource on that page and looking for an HTML comment at the bottom. The comment\r\nwill look something like this:\r\n\r\n \r\n\r\nThis example is from the canned query page for a query called \"tz\" in the\r\ndatabase called \"mydb\". The asterisk shows which template was selected - so in\r\nthis case, Datasette found a template file called `query-mydb-tz.html` and\r\nused that - but if that template had not been found, it would have tried for\r\n`query-mydb.html` or the default `query.html`.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 280745746, "label": "HTML comments specifying custom templates for page"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/167#issuecomment-350515616", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/167", "id": 350515616, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDUxNTYxNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-10T00:21:58Z", "updated_at": "2017-12-10T00:21:58Z", "author_association": "OWNER", "body": "This function signature is pretty gross: https://github.com/simonw/datasette/blob/7a7e4b2ed8c76c6d002a9d707dbc840f6a2abf7f/datasette/app.py#L418", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 280315352, "label": "Nasty bug: last column not being correctly displayed"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/167#issuecomment-350515985", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/167", "id": 350515985, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDUxNTk4NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-10T00:28:39Z", "updated_at": "2017-12-10T00:28:39Z", "author_association": "OWNER", "body": "A better alternative:\r\n\r\n```async def display_columns_and_rows(self, database, table, rows, link_column=False):```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 280315352, "label": "Nasty bug: last column not being correctly displayed"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/167#issuecomment-350516782", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/167", "id": 350516782, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDUxNjc4Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-10T00:48:54Z", "updated_at": "2017-12-10T00:48:54Z", "author_association": "OWNER", "body": "I can simplify this all by dropping the nicety where if a table is using a rowid the Link column is titled rowid instead.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 280315352, "label": "Nasty bug: last column not being correctly displayed"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/169#issuecomment-350519711", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/169", "id": 350519711, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDUxOTcxMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-10T02:04:56Z", "updated_at": "2017-12-10T02:04:56Z", "author_association": "OWNER", "body": "Done! https://github.com/simonw/datasette/releases/tag/0.14", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 280744309, "label": "Release v0.14 with templates and static files features"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/153#issuecomment-350519736", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/153", "id": 350519736, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDUxOTczNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-10T02:06:01Z", "updated_at": "2017-12-10T02:06:01Z", "author_association": "OWNER", "body": "@ftrain Datasette 0.14 is now released with all of the above: https://github.com/simonw/datasette/releases/tag/0.14", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276842536, "label": "Ability to customize presentation of specific columns in HTML view"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/153#issuecomment-350519821", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/153", "id": 350519821, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDUxOTgyMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-10T02:08:45Z", "updated_at": "2017-12-10T02:08:45Z", "author_association": "OWNER", "body": "Also worth mentioning: as of #160 and #157 the `datasette publish now`, `datasette publish heroku` and `datasette package` commands all know how to bundle up any `--static` or `--template-dir` content and include it in the Docker image / Heroku/Now deployment that gets generated.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 276842536, "label": "Ability to customize presentation of specific columns in HTML view"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/42#issuecomment-350521619", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/42", "id": 350521619, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDUyMTYxOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-10T03:02:14Z", "updated_at": "2017-12-10T03:02:14Z", "author_association": "OWNER", "body": "I think the `datasette skeleton` command from #164 makes this obsolete.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268591332, "label": "Homepage UI for editing metadata file"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/52#issuecomment-350521635", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/52", "id": 350521635, "node_id": "MDEyOklzc3VlQ29tbWVudDM1MDUyMTYzNQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-12-10T03:02:56Z", "updated_at": "2017-12-10T03:02:56Z", "author_association": "OWNER", "body": "I don't think this is necessary.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273026602, "label": "Solution for temporarily uploading DB so it can be built by docker"}, "performed_via_github_app": null}