{"html_url": "https://github.com/simonw/datasette/issues/39#issuecomment-339510770", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/39", "id": 339510770, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTUxMDc3MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-26T00:07:40Z", "updated_at": "2017-10-26T00:07:40Z", "author_association": "OWNER", "body": "It looks like I should double quote my columns and ensure they are correctly escaped https://blog.christosoft.de/2012/10/sqlite-escaping-table-acolumn-names/ - hopefully using ? placeholders for column names will work. I should use ? for tables too.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268469569, "label": "Protect against malicious SQL that causes damage even though our DB is immutable"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/39#issuecomment-340787868", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/39", "id": 340787868, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MDc4Nzg2OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-31T14:54:14Z", "updated_at": "2017-10-31T14:54:14Z", "author_association": "OWNER", "body": "Here\u2019s how I can (I think) provide safe execution of arbitrary SQL while blocking PRAGMA calls: let people use names parameters in their SQL and apply strict filtering to the SQL query but not to the parameter values.\r\n\r\n cur.execute(\r\n \"select * from people where name_last=:who and age=:age\", {\r\n \"who\": who,\r\n \"age\": age\r\n })\r\n\r\nIn URL form:\r\n\r\n ?sql=select...&who=Terry&age=34\r\n\r\nNow we can apply strict, dumb validation rules to the SQL part while allowing anything in the named queries - so people can execute a search for PRAGMA without being able to execute a PRAGMA statement.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268469569, "label": "Protect against malicious SQL that causes damage even though our DB is immutable"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/40#issuecomment-339395551", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 339395551, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTM5NTU1MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-25T16:49:32Z", "updated_at": "2017-10-25T16:49:32Z", "author_association": "OWNER", "body": "Simplest implementation will be to create a temporary directory somewhere, copy in a Dockerfile and the databases and run \u201cnow\u201d in it.\r\n\r\nIdeally I can use symlinks rather than copying potentially large database files around.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268470572, "label": "Implement command-line tool interface"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/40#issuecomment-339514819", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 339514819, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTUxNDgxOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-26T00:35:46Z", "updated_at": "2017-10-26T00:35:46Z", "author_association": "OWNER", "body": "I\u2019m going to have a single command-line app that does everything.\r\n\r\nName to be decided - options include dataset, stateless, datasite (I quite like that - it reflects SQLite and the fact that you create a website)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268470572, "label": "Implement command-line tool interface"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/40#issuecomment-339515822", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 339515822, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTUxNTgyMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-26T00:43:34Z", "updated_at": "2017-10-26T00:43:34Z", "author_association": "OWNER", "body": "datasite .\r\n\r\n- starts web app in current directory, serving all DB files\r\n\r\ndatasite . -p 8001\r\n\r\n- serves on custom port\r\n\r\ndatasite blah.db blah2.db\r\n\r\n- serves specified files\r\n\r\nYou can\u2019t specify more than one directory. You can specify as many files as you like. If you specify two files with different oaths but the same name then they must be accessed by hash.\r\n\r\ndatasite publish .\r\n\r\n- publishes current directory to the internet! Uses now by default, if it detects it on your path. Other publishers will be eventually added as plugins.\r\n\r\ndatasite publish http://path-to-db.db\r\n\r\n- publishes a DB available at a URL. Works by constructing the Dockerfile with wget calls in it.\r\n\r\ndatasite blah.db -m metadata.json\r\n\r\nIf you specify a directory it looks for metadata.json in that directory. Otherwise you can pass an explicit metadata file oath with -m or \u2014metadata", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268470572, "label": "Implement command-line tool interface"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/40#issuecomment-339516032", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 339516032, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTUxNjAzMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-26T00:44:52Z", "updated_at": "2017-10-26T00:44:52Z", "author_association": "OWNER", "body": "Another potential name: datapi ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268470572, "label": "Implement command-line tool interface"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/40#issuecomment-339517846", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 339517846, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTUxNzg0Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-26T00:58:39Z", "updated_at": "2017-10-26T00:58:39Z", "author_association": "OWNER", "body": "I\u2019m going to use Click for this\r\n\r\nhttp://nvie.com/posts/writing-a-cli-in-python-in-under-60-seconds/\r\nhttps://kushaldas.in/posts/building-command-line-tools-in-python-with-click.html", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268470572, "label": "Implement command-line tool interface"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/40#issuecomment-339724700", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 339724700, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTcyNDcwMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-26T16:35:20Z", "updated_at": "2017-10-26T16:35:20Z", "author_association": "OWNER", "body": "Here\u2019s how to make the \u201cserve\u201d subcommand the default if it is called with no arguments:\r\n\r\n @click.group(invoke_without_command=True)\r\n def serve():\r\n # ...", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268470572, "label": "Implement command-line tool interface"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/40#issuecomment-339891755", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 339891755, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTg5MTc1NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-27T07:10:53Z", "updated_at": "2017-10-27T07:10:53Z", "author_association": "OWNER", "body": "Deploys to Now aren't working at the moment - they aren't showing the uploaded databases, because I've broken the path handling somehow. I need to do a bit more work here.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268470572, "label": "Implement command-line tool interface"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/40#issuecomment-340561577", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 340561577, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MDU2MTU3Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-30T19:43:40Z", "updated_at": "2017-10-30T19:43:40Z", "author_association": "OWNER", "body": "http://the-hitchhikers-guide-to-packaging.readthedocs.io/en/latest/quickstart.html describes how to package this for PyPI", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268470572, "label": "Implement command-line tool interface"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/40#issuecomment-341945420", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 341945420, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MTk0NTQyMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-05T02:55:07Z", "updated_at": "2017-11-05T02:55:07Z", "author_association": "OWNER", "body": "To simplify things a bit, I'm going to require that every database is explicitly listed in the command line. I won't support \"serve everything in this directory\" for the moment.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268470572, "label": "Implement command-line tool interface"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/40#issuecomment-342030075", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 342030075, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MjAzMDA3NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-06T02:25:48Z", "updated_at": "2017-11-06T02:25:48Z", "author_association": "OWNER", "body": "... I tried that, I don't like it. I'm going to bring back \"directory serving\" by allowing you to pass a directory as an argument to `datasite` (including `datasite .`). I may even make `.` the default if you don't provide anything at all.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268470572, "label": "Implement command-line tool interface"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/40#issuecomment-343646740", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/40", "id": 343646740, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzY0Njc0MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-11T07:27:33Z", "updated_at": "2017-11-11T07:27:33Z", "author_association": "OWNER", "body": "I'm happy with this now that I've implemented the publish command in #26 ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268470572, "label": "Implement command-line tool interface"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/41#issuecomment-339866724", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/41", "id": 339866724, "node_id": "MDEyOklzc3VlQ29tbWVudDMzOTg2NjcyNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-10-27T04:04:52Z", "updated_at": "2017-10-27T04:04:52Z", "author_association": "OWNER", "body": "\"databases\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268590777, "label": "Homepage should show summary of databases"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/42#issuecomment-343708447", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/42", "id": 343708447, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzcwODQ0Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-12T02:12:15Z", "updated_at": "2017-11-12T02:12:15Z", "author_association": "OWNER", "body": "I ditched the metadata file concept.", "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/42#issuecomment-343752404", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/42", "id": 343752404, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc1MjQwNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-12T17:20:10Z", "updated_at": "2017-11-12T17:20:10Z", "author_association": "OWNER", "body": "Re-opening this - I've decided to bring back this concept, see #68 ", "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/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/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/43#issuecomment-344180866", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/43", "id": 344180866, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDE4MDg2Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-14T08:25:37Z", "updated_at": "2017-11-14T08:25:37Z", "author_association": "OWNER", "body": "This isn\u2019t necessary - restarting the server is fast and easy, and I\u2019ve not found myself needing this at all during development.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 268592894, "label": "While running, server should spot new db files added to its directory "}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/44#issuecomment-342484889", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/44", "id": 342484889, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MjQ4NDg4OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-07T13:39:49Z", "updated_at": "2017-11-07T13:39:49Z", "author_association": "OWNER", "body": "I\u2019m going to call this feature \u201ccount values\u201d", "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/44#issuecomment-345342512", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/44", "id": 345342512, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTM0MjUxMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-17T19:27:53Z", "updated_at": "2017-11-20T04:37:35Z", "author_association": "OWNER", "body": "This should support multiple columns, e.g. `?_group_count=precinct&_group_count=candidate`", "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/44#issuecomment-345343079", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/44", "id": 345343079, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTM0MzA3OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-17T19:29:43Z", "updated_at": "2017-11-17T19:29:43Z", "author_association": "OWNER", "body": "Should this support sum/avg/etc as well?", "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/44#issuecomment-345494971", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/44", "id": 345494971, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTQ5NDk3MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-19T06:15:39Z", "updated_at": "2017-11-19T06:15:39Z", "author_association": "OWNER", "body": "It would be great if this could support foreign key references and automatically resolve and hyperlink them if they are detected.", "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/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/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/44#issuecomment-384676488", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/44", "id": 384676488, "node_id": "MDEyOklzc3VlQ29tbWVudDM4NDY3NjQ4OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2018-04-26T15:09:57Z", "updated_at": "2018-04-26T15:09:57Z", "author_association": "OWNER", "body": "Remaining work for this is tracked in #150", "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/46#issuecomment-344161226", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/46", "id": 344161226, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDE2MTIyNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-14T06:41:21Z", "updated_at": "2017-11-14T06:41:21Z", "author_association": "OWNER", "body": "Spatial extensions would be really useful too. https://www.gaia-gis.it/spatialite-2.1/SpatiaLite-manual.html", "reactions": "{\"total_count\": 1, \"+1\": 1, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271301468, "label": "Dockerfile should build more recent SQLite with FTS5 and spatialite support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/46#issuecomment-344161371", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/46", "id": 344161371, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDE2MTM3MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-14T06:42:15Z", "updated_at": "2017-11-14T06:42:15Z", "author_association": "OWNER", "body": "http://charlesleifer.com/blog/going-fast-with-sqlite-and-python/ is useful here too.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271301468, "label": "Dockerfile should build more recent SQLite with FTS5 and spatialite support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/46#issuecomment-344161430", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/46", "id": 344161430, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDE2MTQzMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-14T06:42:44Z", "updated_at": "2017-11-14T06:42:44Z", "author_association": "OWNER", "body": "Also requested on Twitter: https://twitter.com/DenubisX/status/930322813864439808", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271301468, "label": "Dockerfile should build more recent SQLite with FTS5 and spatialite support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/46#issuecomment-344810525", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/46", "id": 344810525, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDgxMDUyNQ==", "user": {"value": 54999, "label": "ingenieroariel"}, "created_at": "2017-11-16T04:11:25Z", "updated_at": "2017-11-16T04:11:25Z", "author_association": "CONTRIBUTOR", "body": "@simonw On the spatialite support, here is some info to make it work and a screenshot:\r\n\r\n\"screen\r\n\r\nI used the following Dockerfile:\r\n```\r\nFROM prolocutor/python3-sqlite-ext:3.5.1-spatialite as build\r\n\r\nRUN mkdir /code\r\nADD . /code/\r\n\r\nRUN pip install /code/\r\n\r\nEXPOSE 8001\r\nCMD [\"datasette\", \"serve\", \"/code/ne.sqlite\", \"--host\", \"0.0.0.0\"]\r\n```\r\n\r\nand added this to `prepare_connection`:\r\n```\r\n conn.enable_load_extension(True)\r\n conn.execute(\"SELECT load_extension('/usr/local/lib/mod_spatialite.so')\")\r\n```", "reactions": "{\"total_count\": 1, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 1, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271301468, "label": "Dockerfile should build more recent SQLite with FTS5 and spatialite support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/46#issuecomment-344975156", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/46", "id": 344975156, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDk3NTE1Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-16T16:19:44Z", "updated_at": "2017-11-16T16:19:44Z", "author_association": "OWNER", "body": "That's fantastic! Thank you very much for that. \r\n\r\nDo you know if it's possible to view the Dockerfile used by https://hub.docker.com/r/prolocutor/python3-sqlite-ext/ ?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271301468, "label": "Dockerfile should build more recent SQLite with FTS5 and spatialite support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/46#issuecomment-344976104", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/46", "id": 344976104, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDk3NjEwNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-16T16:22:45Z", "updated_at": "2017-11-16T16:22:45Z", "author_association": "OWNER", "body": "Found a relevant Dockerfile on Reddit: https://www.reddit.com/r/Python/comments/5unkb3/install_sqlite3_on_python_3/ddzdz2b/", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271301468, "label": "Dockerfile should build more recent SQLite with FTS5 and spatialite support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/46#issuecomment-344976882", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/46", "id": 344976882, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDk3Njg4Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-16T16:25:07Z", "updated_at": "2017-11-16T16:25:07Z", "author_association": "OWNER", "body": "Maybe part of the solution here is to add a `--load-extension` argument to `datasette` - so when you run the command you can specify SQLite extensions that should be loaded. ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271301468, "label": "Dockerfile should build more recent SQLite with FTS5 and spatialite support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/46#issuecomment-344988591", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/46", "id": 344988591, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDk4ODU5MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-16T16:59:51Z", "updated_at": "2017-11-16T16:59:51Z", "author_association": "OWNER", "body": "OK, `--load-extension` is now a supported command line option - see #110 which includes my notes on how I manually tested it using the `prolocutor/python3-sqlite-ext` Docker image.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271301468, "label": "Dockerfile should build more recent SQLite with FTS5 and spatialite support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/46#issuecomment-344989340", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/46", "id": 344989340, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDk4OTM0MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-16T17:02:07Z", "updated_at": "2017-11-16T17:02:07Z", "author_association": "OWNER", "body": "The fact that `prolocutor/python3-sqlite-ext` doesn't provide a visible Dockerfile and hasn't been updated in two years makes me hesitant to bake it into datasette itself. I'd rather put together a Dockerfile that enables the necessary extensions and can live in the datasette repository itself.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271301468, "label": "Dockerfile should build more recent SQLite with FTS5 and spatialite support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/46#issuecomment-344995571", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/46", "id": 344995571, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDk5NTU3MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-16T17:22:32Z", "updated_at": "2017-11-16T17:22:32Z", "author_association": "OWNER", "body": "The JSON extension would be very worthwhile too: https://www.sqlite.org/json1.html", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271301468, "label": "Dockerfile should build more recent SQLite with FTS5 and spatialite support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/46#issuecomment-345002908", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/46", "id": 345002908, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTAwMjkwOA==", "user": {"value": 54999, "label": "ingenieroariel"}, "created_at": "2017-11-16T17:47:49Z", "updated_at": "2017-11-16T17:47:49Z", "author_association": "CONTRIBUTOR", "body": "I'll try to find alternatives to the Dockerfile option - I also think we should not use that old one without sources or license.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271301468, "label": "Dockerfile should build more recent SQLite with FTS5 and spatialite support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/46#issuecomment-345138347", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/46", "id": 345138347, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTEzODM0Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-17T03:52:25Z", "updated_at": "2017-11-17T03:52:25Z", "author_association": "OWNER", "body": "We now have a Dockerfile that compiles spatialite! https://github.com/simonw/datasette/pull/114/commits/6c6b63d890529eeefcefb7ab126ea3bd7b2315c1", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271301468, "label": "Dockerfile should build more recent SQLite with FTS5 and spatialite support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/46#issuecomment-345259115", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/46", "id": 345259115, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTI1OTExNQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-17T14:32:12Z", "updated_at": "2017-11-17T14:32:12Z", "author_association": "OWNER", "body": "OK, I can confirm that the version in the new docker container supports FTS5, JSON *and* spatialite!\r\n\r\nNotes on how I built the container and tested the spatialite extension are here: https://github.com/simonw/datasette/issues/112#issuecomment-345255655\r\n\r\nTo confirm that JSON and FTS5 are working, I ran the following:\r\n\r\n $ docker run -it -p 8001:8001 6c9ca7e29181 python\r\n Python 3.6.3 (default, Nov 4 2017, 14:24:48) \r\n [GCC 6.3.0 20170516] on linux\r\n Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\r\n >>> import sqlite3\r\n >>> sqlite3.connect(':memory:').execute('CREATE VIRTUAL TABLE email USING fts5(sender, title, body);')\r\n \r\n >>> list(sqlite3.connect(':memory:').execute('''SELECT json(' { \"this\" : \"is\", \"a\": [ \"test\" ] } ') '''))\r\n [('{\"this\":\"is\",\"a\":[\"test\"]}',)]\r\n\r\nIf I do the same thing in python3 on my OS X laptop directly, I get this:\r\n\r\n $ python3\r\n Python 3.5.1 (default, Apr 18 2016, 11:46:32) \r\n [GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.29)] on darwin\r\n Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.\r\n >>> import sqlite3\r\n >>> sqlite3.connect(':memory:').execute('CREATE VIRTUAL TABLE email USING fts5(sender, title, body);')\r\n Traceback (most recent call last):\r\n File \"\", line 1, in \r\n sqlite3.OperationalError: no such module: fts5\r\n >>> list(sqlite3.connect(':memory:').execute('''SELECT json(' { \"this\" : \"is\", \"a\": [ \"test\" ] } ') '''))\r\n Traceback (most recent call last):\r\n File \"\", line 1, in \r\n sqlite3.OperationalError: no such function: json\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271301468, "label": "Dockerfile should build more recent SQLite with FTS5 and spatialite support"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/47#issuecomment-342521344", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/47", "id": 342521344, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MjUyMTM0NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-07T15:37:45Z", "updated_at": "2017-11-07T15:37:45Z", "author_association": "OWNER", "body": "GDS Registries could be fun too: https://registers.cloudapps.digital/", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271831408, "label": "Create neat example database"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/47#issuecomment-343647102", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/47", "id": 343647102, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzY0NzEwMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-11T07:36:00Z", "updated_at": "2017-11-11T07:36:00Z", "author_association": "OWNER", "body": "http://2016.padjo.org/tutorials/data-primer-census-acs1-demographics/ has a sqlite database: http://2016.padjo.org/files/data/starterpack/census-acs-1year/acs-1-year-2015.sqlite\r\n\r\nI tested this by deploying it here: https://datasette-fewuggrvwr.now.sh/", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271831408, "label": "Create neat example database"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/47#issuecomment-343690060", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/47", "id": 343690060, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzY5MDA2MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-11T19:56:08Z", "updated_at": "2017-11-11T19:56:08Z", "author_association": "OWNER", "body": " \"parlgov-development.db\": {\r\n \"url\": \"http://www.parlgov.org/\"\r\n },\r\n \"nhsadmin.sqlite\": {\r\n \"url\": \"https://github.com/psychemedia/openHealthDataDoodles\"\r\n }", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271831408, "label": "Create neat example database"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/47#issuecomment-343705966", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/47", "id": 343705966, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzcwNTk2Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-12T01:00:20Z", "updated_at": "2017-11-12T01:00:20Z", "author_association": "OWNER", "body": "https://github.com/fivethirtyeight/data has a ton of CSVs", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271831408, "label": "Create neat example database"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/47#issuecomment-344132481", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/47", "id": 344132481, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDEzMjQ4MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-14T03:08:13Z", "updated_at": "2017-11-14T03:08:13Z", "author_association": "OWNER", "body": "I ended up shipping with https://fivethirtyeight.datasettes.com/ and https://parlgov.datasettes.com/", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 271831408, "label": "Create neat example database"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/48#issuecomment-343168796", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/48", "id": 343168796, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzE2ODc5Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-09T14:22:21Z", "updated_at": "2017-11-09T14:22:21Z", "author_association": "OWNER", "body": "Won't fix: ujson is not compatible with the custom JSON encoder I'm using here: https://github.com/simonw/immutabase/blob/b2dee11fcd989d9e2a7bf4de1e23dbc320c05013/immutabase/app.py#L401-L416", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 272391665, "label": "Switch to ujson"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/48#issuecomment-343239062", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/48", "id": 343239062, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzIzOTA2Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-09T18:01:46Z", "updated_at": "2017-11-09T18:01:46Z", "author_association": "OWNER", "body": "This looks promising: https://github.com/esnme/ultrajson/issues/124#issuecomment-323882878", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 272391665, "label": "Switch to ujson"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/48#issuecomment-379556637", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/48", "id": 379556637, "node_id": "MDEyOklzc3VlQ29tbWVudDM3OTU1NjYzNw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2018-04-08T14:56:52Z", "updated_at": "2018-04-08T14:56:52Z", "author_association": "OWNER", "body": "It would be useful to have a microbenchmark in place to help understand how much of a performance benefit this would actually provide.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 272391665, "label": "Switch to ujson"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/48#issuecomment-504883688", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/48", "id": 504883688, "node_id": "MDEyOklzc3VlQ29tbWVudDUwNDg4MzY4OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2019-06-24T06:57:43Z", "updated_at": "2019-06-24T06:57:43Z", "author_association": "OWNER", "body": "I've seen no evidence that JSON handling is even close to being a performance bottleneck, so wontfix.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 272391665, "label": "Switch to ujson"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/49#issuecomment-343237982", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/49", "id": 343237982, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzIzNzk4Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-09T17:58:01Z", "updated_at": "2017-11-09T17:58:01Z", "author_association": "OWNER", "body": "More terms:\r\n\r\n* publish\r\n* share\r\n* docker\r\n* host\r\n* stateless\r\n\r\nI want to capture the idea of publishing an immutable database in a stateless container.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 272661336, "label": "Pick a name"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/49#issuecomment-343238262", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/49", "id": 343238262, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzIzODI2Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-09T17:58:59Z", "updated_at": "2017-11-09T17:58:59Z", "author_association": "OWNER", "body": "The name should ideally be available on PyPI and should make sense as both a command line application and a library.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 272661336, "label": "Pick a name"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/49#issuecomment-343281876", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/49", "id": 343281876, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzI4MTg3Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-09T20:30:42Z", "updated_at": "2017-11-09T20:30:42Z", "author_association": "OWNER", "body": "How about datasette?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 272661336, "label": "Pick a name"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/49#issuecomment-343551356", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/49", "id": 343551356, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzU1MTM1Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-10T18:33:22Z", "updated_at": "2017-11-10T18:33:22Z", "author_association": "OWNER", "body": "I'm going with datasette.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 272661336, "label": "Pick a name"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/50#issuecomment-343266326", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/50", "id": 343266326, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzI2NjMyNg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-09T19:33:18Z", "updated_at": "2017-11-09T19:33:18Z", "author_association": "OWNER", "body": "http://sanic.readthedocs.io/en/latest/sanic/testing.html", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 272694136, "label": "Unit tests against application itself"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/50#issuecomment-343698214", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/50", "id": 343698214, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzY5ODIxNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-11T22:23:21Z", "updated_at": "2017-11-11T22:23:21Z", "author_association": "OWNER", "body": "I'm closing #50 - more tests will be added in the future, but the framework is neatly in place for them now.\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 272694136, "label": "Unit tests against application itself"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/51#issuecomment-344017088", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/51", "id": 344017088, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDAxNzA4OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T18:44:23Z", "updated_at": "2017-11-13T18:44:23Z", "author_association": "OWNER", "body": "Implemented in https://github.com/simonw/datasette/commit/e838bd743d31358b362875854a0ac5e78047727f", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 272735257, "label": "Make a proper README"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/52#issuecomment-343557070", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/52", "id": 343557070, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzU1NzA3MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-10T18:57:47Z", "updated_at": "2017-11-10T18:57:47Z", "author_association": "OWNER", "body": "https://file.io/ looks like it could be good for this. It's been around since 2015, and lets you upload a temporary file which can be downloaded once.\r\n\r\n $ curl -s -F \"file=@database.db\" \"https://file.io/?expires=1d\"\r\n {\"success\":true,\"key\":\"ySrl1j\",\"link\":\"https://file.io/ySrl1j\",\"expiry\":\"1 day\"}\r\n\r\nDownloading from that URL serves up the data with a `Content-disposition` header containing the filename:\r\n\r\n simonw$ curl -vv https://file.io/ySrl1j | more\r\n % Total % Received % Xferd Average Speed Time Time Time Current\r\n Dload Upload Total Spent Left Speed\r\n 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 34.232.1.167...\r\n * Connected to file.io (34.232.1.167) port 443 (#0)\r\n * TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\r\n * Server certificate: file.io\r\n * Server certificate: Amazon\r\n * Server certificate: Amazon Root CA 1\r\n * Server certificate: Starfield Services Root Certificate Authority - G2\r\n > GET /ySrl1j HTTP/1.1\r\n > Host: file.io\r\n > User-Agent: curl/7.43.0\r\n > Accept: */*\r\n > \r\n < HTTP/1.1 200 OK\r\n < Date: Fri, 10 Nov 2017 18:14:38 GMT\r\n < Content-Type: undefined\r\n < Transfer-Encoding: chunked\r\n < Connection: keep-alive\r\n < X-Powered-By: Express\r\n < X-RateLimit-Limit: 5\r\n < X-RateLimit-Remaining: 4\r\n < Access-Control-Allow-Origin: *\r\n < Access-Control-Allow-Headers: Cache-Control,X-reqed-With,x-requested-with\r\n < Content-disposition: attachment; filename=database.db\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": 273026602, "label": "Solution for temporarily uploading DB so it can be built by docker"}, "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} {"html_url": "https://github.com/simonw/datasette/issues/53#issuecomment-343699115", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/53", "id": 343699115, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzY5OTExNQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-11T22:41:38Z", "updated_at": "2017-11-11T22:41:38Z", "author_association": "OWNER", "body": "This needs to incorporate a sensible way of presenting custom SQL query results too. And let's get a textarea in there for executing SQL while we're at it.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273054652, "label": "Implement a better database index page"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/53#issuecomment-343707624", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/53", "id": 343707624, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzcwNzYyNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-12T01:47:45Z", "updated_at": "2017-11-12T01:47:45Z", "author_association": "OWNER", "body": "Split the SQL thing out into #65 ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273054652, "label": "Implement a better database index page"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/53#issuecomment-343707676", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/53", "id": 343707676, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzcwNzY3Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-12T01:49:07Z", "updated_at": "2017-11-12T01:49:07Z", "author_association": "OWNER", "body": "Here's the new design:\r\n\r\n\"parlgov-development\"\r\n\r\nAlso lists views at the bottom (refs #54):\r\n\r\n\"parlgov-development\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273054652, "label": "Implement a better database index page"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/54#issuecomment-343644891", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/54", "id": 343644891, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzY0NDg5MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-11T06:39:54Z", "updated_at": "2017-11-11T06:39:54Z", "author_association": "OWNER", "body": "I can detect something is a view like this:\r\n\r\n SELECT name from sqlite_master WHERE type ='view';\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273121803, "label": "Views should not attempt to link to records / use rowids"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/55#issuecomment-344060070", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/55", "id": 344060070, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDA2MDA3MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T21:14:13Z", "updated_at": "2017-11-13T21:14:13Z", "author_association": "OWNER", "body": "I'm going to add some extra metadata to setup.py and then tag this as version 0.8:\r\n\r\n git tag 0.8\r\n git push --tags\r\n\r\nThen to ship to PyPI:\r\n\r\n python setup.py bdist_wheel\r\n twine register dist/datasette-0.8-py3-none-any.whl\r\n twine upload dist/datasette-0.8-py3-none-any.whl\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273127117, "label": "Ship first version to PyPI"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/55#issuecomment-344061762", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/55", "id": 344061762, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDA2MTc2Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T21:19:43Z", "updated_at": "2017-11-13T21:19:43Z", "author_association": "OWNER", "body": "And we're live! https://pypi.python.org/pypi/datasette", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273127117, "label": "Ship first version to PyPI"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/56#issuecomment-392601478", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/56", "id": 392601478, "node_id": "MDEyOklzc3VlQ29tbWVudDM5MjYwMTQ3OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2018-05-28T20:50:24Z", "updated_at": "2018-05-28T20:50:24Z", "author_association": "OWNER", "body": "I'm going to close this as WONTFIX for the moment. Once Plugins #14 grows the ability to add extra URL paths and views someone who needs this could build it as a plugin instead.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273127443, "label": "Easy way to block search engine crawling in robots.txt"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/57#issuecomment-343769692", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/57", "id": 343769692, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc2OTY5Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-12T21:32:36Z", "updated_at": "2017-11-12T21:32:36Z", "author_association": "OWNER", "body": "I have created a Docker Hub public repository for this: https://hub.docker.com/r/simonwillison/datasette/", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273127694, "label": "Ship a Docker image of the whole thing"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/57#issuecomment-344145265", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/57", "id": 344145265, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDE0NTI2NQ==", "user": {"value": 247192, "label": "macropin"}, "created_at": "2017-11-14T04:45:38Z", "updated_at": "2017-11-14T04:45:38Z", "author_association": "CONTRIBUTOR", "body": "I'm happy to contribute this. Just let me know if you want a Dockerfile for development or production purposes, or both. \r\n\r\nIf it's prod then we can just pip install the source from pypi, otherwise for dev we'll need a `requirements.txt` to speed up rebuilds.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273127694, "label": "Ship a Docker image of the whole thing"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/57#issuecomment-344147583", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/57", "id": 344147583, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDE0NzU4Mw==", "user": {"value": 247192, "label": "macropin"}, "created_at": "2017-11-14T05:03:47Z", "updated_at": "2017-11-14T05:03:47Z", "author_association": "CONTRIBUTOR", "body": "Let me know if you'd like a PR. The image is usable as \r\n`docker run --rm -t -i -p 9000:8001 -v $(pwd)/db:/db datasette datasette serve /db/chinook.db`", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273127694, "label": "Ship a Docker image of the whole thing"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/57#issuecomment-344149165", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/57", "id": 344149165, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDE0OTE2NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-14T05:16:34Z", "updated_at": "2017-11-14T05:17:14Z", "author_association": "OWNER", "body": "I\u2019m intrigued by this pattern: \r\n\r\nhttps://github.com/macropin/datasette/blob/147195c2fdfa2b984d8f9fc1c6cab6634970a056/Dockerfile#L8\r\n\r\nWhat\u2019s the benefit of doing that? Does it result in a smaller image size?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273127694, "label": "Ship a Docker image of the whole thing"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/57#issuecomment-344151223", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/57", "id": 344151223, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDE1MTIyMw==", "user": {"value": 247192, "label": "macropin"}, "created_at": "2017-11-14T05:32:28Z", "updated_at": "2017-11-14T05:33:03Z", "author_association": "CONTRIBUTOR", "body": "The pattern is called \"multi-stage builds\". And the result is a svelte 226MB image (201MB for 3.6-slim) vs 700MB+ for the full image. It's possible to get it even smaller, but that takes a lot more work.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273127694, "label": "Ship a Docker image of the whole thing"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/57#issuecomment-344185817", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/57", "id": 344185817, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDE4NTgxNw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-14T08:46:24Z", "updated_at": "2017-11-14T08:46:24Z", "author_association": "OWNER", "body": "Thanks for the explanation! Please do start a pull request. ", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273127694, "label": "Ship a Docker image of the whole thing"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/57#issuecomment-400903871", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/57", "id": 400903871, "node_id": "MDEyOklzc3VlQ29tbWVudDQwMDkwMzg3MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2018-06-28T04:01:38Z", "updated_at": "2018-06-28T04:01:38Z", "author_association": "OWNER", "body": "Shipped to Docker Hub: https://hub.docker.com/r/datasetteproject/datasette/\r\n\r\nI did this manually the first time. I'll set Travis up to do this automatically in #329", "reactions": "{\"total_count\": 1, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 1, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273127694, "label": "Ship a Docker image of the whole thing"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/59#issuecomment-343676574", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/59", "id": 343676574, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzY3NjU3NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-11T16:29:48Z", "updated_at": "2017-11-11T16:29:48Z", "author_association": "OWNER", "body": "See also #14", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273157085, "label": "datasette publish hyper"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/59#issuecomment-344081876", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/59", "id": 344081876, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDA4MTg3Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T22:33:43Z", "updated_at": "2017-11-13T22:33:43Z", "author_association": "OWNER", "body": "The `datasette package` command introduced in 4143e3b45c16cbae5e3e3419ef479a71810e7df3 is relevant here.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273157085, "label": "datasette publish hyper"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/59#issuecomment-344141199", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/59", "id": 344141199, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDE0MTE5OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-14T04:13:11Z", "updated_at": "2017-11-14T04:13:11Z", "author_association": "OWNER", "body": "I managed to do this manually:\r\n\r\n datasette package ~/parlgov-db/parlgov.db --metadata=parlgov.json\r\n # Output 8758ec31dda3 as the new image ID\r\n docker save 8758ec31dda3 > /tmp/my-image\r\n # I could have just piped this straight to hyper\r\n cat /tmp/my-image | hyper load\r\n # Now start the container running in hyper\r\n hyper run -d -p 80:8001 --name parlgov 8758ec31dda3\r\n # We need to assign an IP address so we can see it\r\n hyper fip allocate 1\r\n # Outputs 199.245.58.78\r\n hyper fip attach 199.245.58.78 parlgov\r\n\r\nAt this point, visiting the IP address in a browser showed the parlgov UI.\r\n\r\nTo clean up...\r\n\r\n hyper hyper fip detach parlgov\r\n hyper fip release 199.245.58.78\r\n hyper stop parlgov\r\n hyper rm parlgov\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273157085, "label": "datasette publish hyper"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/59#issuecomment-491945391", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/59", "id": 491945391, "node_id": "MDEyOklzc3VlQ29tbWVudDQ5MTk0NTM5MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2019-05-13T19:00:44Z", "updated_at": "2019-05-13T19:01:00Z", "author_association": "OWNER", "body": "Hyper shut down at the start of this year: https://news.ycombinator.com/item?id=18734658", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273157085, "label": "datasette publish hyper"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/60#issuecomment-343683566", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/60", "id": 343683566, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzY4MzU2Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-11T18:12:24Z", "updated_at": "2017-11-11T18:12:24Z", "author_association": "OWNER", "body": "I\u2019m going to solve this by making it an optional argument you can pass to the serve command. Then the Dockerfile can still build and use it but it won\u2019t interfere with tests or dev.\r\n\r\nIf argument is not passed, we will calculate hashes on startup and calculate table row counts on demand.\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273163905, "label": "Rethink how metadata is generated and stored"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/63#issuecomment-343697291", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/63", "id": 343697291, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzY5NzI5MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-11T22:05:06Z", "updated_at": "2017-11-11T22:11:49Z", "author_association": "OWNER", "body": "I'm going to bundle sql and sql_params together into a query nested object like this:\r\n\r\n {\r\n \"query\": {\r\n \"sql\": \"select ...\",\r\n \"params\": {\r\n \"p0\": \"blah\"\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": 273174447, "label": "Review design of JSON output"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/64#issuecomment-345260784", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/64", "id": 345260784, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NTI2MDc4NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-17T14:38:21Z", "updated_at": "2017-11-17T14:38:21Z", "author_association": "OWNER", "body": "This was fixed by ed2b3f25beac720f14869350baacc5f62b065194 in #107 - thanks @raynae!", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273181020, "label": "Support for ?field__isnull=1 or similar"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/65#issuecomment-343709217", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/65", "id": 343709217, "node_id": "MDEyOklzc3VlQ29tbWVudDM0MzcwOTIxNw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-12T02:36:37Z", "updated_at": "2017-11-12T02:36:37Z", "author_association": "OWNER", "body": "\"nhsadmin\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273191608, "label": "Re-implement ?sql= mode"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/66#issuecomment-343752683", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/66", "id": 343752683, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc1MjY4Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-12T17:24:05Z", "updated_at": "2017-11-12T17:24:21Z", "author_association": "OWNER", "body": "Maybe SQL views should have their own Sanic view class (`ViewView` is kinda funny), subclassed from `TableView`?", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273191806, "label": "Show table SQL on table page"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/67#issuecomment-343961784", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/67", "id": 343961784, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzk2MTc4NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T15:50:50Z", "updated_at": "2017-11-13T15:50:50Z", "author_association": "OWNER", "body": "`datasette package ...` - same arguments as `datasette publish`. Creates Docker container in your local repo, optionally tagged with `--tag`", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273192789, "label": "Command that builds a local docker container"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/67#issuecomment-343967020", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/67", "id": 343967020, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzk2NzAyMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T16:06:10Z", "updated_at": "2017-11-13T16:06:10Z", "author_association": "OWNER", "body": "http://odewahn.github.io/docker-jumpstart/example.html is helpful", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273192789, "label": "Command that builds a local docker container"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/68#issuecomment-343753999", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/68", "id": 343753999, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc1Mzk5OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-12T17:45:21Z", "updated_at": "2017-11-12T19:38:33Z", "author_association": "OWNER", "body": "For initial launch, I could just support this as some optional command line arguments you pass to the publish command:\r\n\r\n datasette publish data.db --title=\"Title\" --source=\"url\"", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273247186, "label": "Support for title/source/license metadata"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/68#issuecomment-343754058", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/68", "id": 343754058, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc1NDA1OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-12T17:46:13Z", "updated_at": "2017-11-12T17:46:13Z", "author_association": "OWNER", "body": "I\u2019m going to store this stuff in a file called metadata.json and move the existing automatically generated metadata to a file called build.json", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273247186, "label": "Support for title/source/license metadata"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/68#issuecomment-343791348", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/68", "id": 343791348, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc5MTM0OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T02:12:58Z", "updated_at": "2017-11-13T02:12:58Z", "author_association": "OWNER", "body": "I should use this on https://fivethirtyeight.datasettes.com/", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273247186, "label": "Support for title/source/license metadata"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/68#issuecomment-343951751", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/68", "id": 343951751, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzk1MTc1MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T15:21:04Z", "updated_at": "2017-11-13T15:21:04Z", "author_association": "OWNER", "body": "For first version, I'm just supporting title, source and license information at the database level.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273247186, "label": "Support for title/source/license metadata"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/69#issuecomment-343752579", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/69", "id": 343752579, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc1MjU3OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-12T17:22:39Z", "updated_at": "2017-11-12T17:22:39Z", "author_association": "OWNER", "body": "By default I'll allow LIMIT and OFFSET up to a maximum of X (where X is let's say 50,000 to start with, but can be custom configured to a larger number or set to None for no limit).", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273248366, "label": "Enforce pagination (or at least limits) for arbitrary custom SQL"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/69#issuecomment-343780039", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/69", "id": 343780039, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc4MDAzOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T00:05:27Z", "updated_at": "2017-11-13T00:05:27Z", "author_association": "OWNER", "body": "I think the only safe way to do this is using SQLite `.fetchmany(1000)` - I can't guarantee that the user has not entered SQL that will outfox a limit in some way. So instead of attempting to edit their SQL, I'll always return 1001 records and let them know if they went over 1000 or not.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273248366, "label": "Enforce pagination (or at least limits) for arbitrary custom SQL"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/69#issuecomment-344019631", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/69", "id": 344019631, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDAxOTYzMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T18:53:13Z", "updated_at": "2017-11-13T18:53:13Z", "author_association": "OWNER", "body": "I'm going with a page size of 100 and a max limit of 1000", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273248366, "label": "Enforce pagination (or at least limits) for arbitrary custom SQL"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/69#issuecomment-344048656", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/69", "id": 344048656, "node_id": "MDEyOklzc3VlQ29tbWVudDM0NDA0ODY1Ng==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T20:32:47Z", "updated_at": "2017-11-13T20:32:47Z", "author_association": "OWNER", "body": "\"ak\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273248366, "label": "Enforce pagination (or at least limits) for arbitrary custom SQL"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/71#issuecomment-343780141", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/71", "id": 343780141, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc4MDE0MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T00:06:52Z", "updated_at": "2017-11-13T00:06:52Z", "author_association": "OWNER", "body": "I've registered datasettes.com as a domain name for doing this. Now setting it up so Cloudflare and Now can serve content from it.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273278840, "label": "Set up some example datasets on a Cloudflare-backed domain"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/71#issuecomment-343780539", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/71", "id": 343780539, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc4MDUzOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T00:13:29Z", "updated_at": "2017-11-13T00:19:46Z", "author_association": "OWNER", "body": "https://zeit.co/docs/features/dns is docs\r\n\r\n now domain add -e datasettes.com\r\n\r\nI had to set up a custom TXT record on `_now.datasettes.com` to get this to work.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273278840, "label": "Set up some example datasets on a Cloudflare-backed domain"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/71#issuecomment-343780671", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/71", "id": 343780671, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc4MDY3MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T00:15:21Z", "updated_at": "2017-11-13T00:17:37Z", "author_association": "OWNER", "body": "- [x] Redirect https://datasettes.com/ and https://www.datasettes.com/ to https://github.com/simonw/datasette", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273278840, "label": "Set up some example datasets on a Cloudflare-backed domain"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/71#issuecomment-343780814", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/71", "id": 343780814, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc4MDgxNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T00:17:50Z", "updated_at": "2017-11-13T00:18:19Z", "author_association": "OWNER", "body": "Achieved those redirects using Cloudflare \"page rules\": https://www.cloudflare.com/a/page-rules/datasettes.com", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273278840, "label": "Set up some example datasets on a Cloudflare-backed domain"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/71#issuecomment-343781030", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/71", "id": 343781030, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc4MTAzMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T00:21:05Z", "updated_at": "2017-11-13T02:09:32Z", "author_association": "OWNER", "body": "- [x] Have `now domain add -e datasettes.com` run without errors (hopefully just a matter of waiting for the DNS to update)\r\n- [x] Alias an example dataset hosted on Now on a datasettes.com subdomain\r\n- [x] Confirm that HTTP caching and HTTP/2 redirect pushing works as expected - this may require another page rule", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273278840, "label": "Set up some example datasets on a Cloudflare-backed domain"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/71#issuecomment-343788581", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/71", "id": 343788581, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc4ODU4MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T01:48:17Z", "updated_at": "2017-11-13T01:48:17Z", "author_association": "OWNER", "body": "I had to add a rule like this to get letsencrypt certificates on now.sh working: https://github.com/zeit/now-cli/issues/188#issuecomment-270105052\r\n\r\n\"page_rules__datasettes_com___cloudflare_-_web_performance___security\"\r\n\r\nI also have to flip this switch off every time I want to add a new alias:\r\n\r\n\"crypto__datasettes_com___cloudflare_-_web_performance___security\"\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": 273278840, "label": "Set up some example datasets on a Cloudflare-backed domain"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/71#issuecomment-343788780", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/71", "id": 343788780, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc4ODc4MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T01:50:01Z", "updated_at": "2017-11-13T01:50:01Z", "author_association": "OWNER", "body": "Added another page rule in order to get Cloudflare to always obey cache headers sent by the server:\r\n\r\n\"page_rules__datasettes_com___cloudflare_-_web_performance___security\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273278840, "label": "Set up some example datasets on a Cloudflare-backed domain"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/71#issuecomment-343788817", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/71", "id": 343788817, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc4ODgxNw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T01:50:27Z", "updated_at": "2017-11-13T01:50:27Z", "author_association": "OWNER", "body": "https://fivethirtyeight.datasettes.com/ is now up and running.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273278840, "label": "Set up some example datasets on a Cloudflare-backed domain"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/71#issuecomment-343789162", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/71", "id": 343789162, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc4OTE2Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T01:53:29Z", "updated_at": "2017-11-13T01:53:29Z", "author_association": "OWNER", "body": "```\r\n$ curl -i 'https://fivethirtyeight.datasettes.com/fivethirtyeight-75d605c/obama-commutations%2Fobama_commutations.csv.jsono'\r\nHTTP/1.1 200 OK\r\nDate: Mon, 13 Nov 2017 01:50:57 GMT\r\nContent-Type: application/json\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\nSet-Cookie: __cfduid=de836090f3e12a60579cc7a1696cf0d9e1510537857; expires=Tue, 13-Nov-18 01:50:57 GMT; path=/; domain=.datasettes.com; HttpOnly; Secure\r\nAccess-Control-Allow-Origin: *\r\nCache-Control: public, max-age=31536000\r\nX-Now-Region: now-sfo\r\nCF-Cache-Status: HIT\r\nExpires: Tue, 13 Nov 2018 01:50:57 GMT\r\nServer: cloudflare-nginx\r\nCF-RAY: 3bce154a6d9293b4-SJC\r\n\r\n{\"database\": \"fivethirtyeight\", \"table\": \"obama-commutations/obama_commutations.csv\"...```", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 273278840, "label": "Set up some example datasets on a Cloudflare-backed domain"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/71#issuecomment-343790984", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/71", "id": 343790984, "node_id": "MDEyOklzc3VlQ29tbWVudDM0Mzc5MDk4NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2017-11-13T02:09:34Z", "updated_at": "2017-11-13T02:09:34Z", "author_association": "OWNER", "body": "HTTP/2 push totally worked on the redirect!\r\n\r\n fetch('https://fivethirtyeight.datasettes.com/fivethirtyeight/riddler-pick-lowest%2Flow_numbers.csv.jsono').then(r => r.json()).then(console.log)\r\n\r\n\"eventbrite_api___v3_destination_search_\"\r\n\r\nMeanwhile, in the network pane...\r\n\r\n\"eventbrite_api___v3_destination_search_\"\r\n\r\n\"eventbrite_api___v3_destination_search_\"\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": 273278840, "label": "Set up some example datasets on a Cloudflare-backed domain"}, "performed_via_github_app": null}