{"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/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}