{"html_url": "https://github.com/simonw/datasette/issues/944#issuecomment-691769222", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/944", "id": 691769222, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MTc2OTIyMg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T02:01:33Z", "updated_at": "2020-09-14T02:01:33Z", "author_association": "OWNER", "body": "I'm going to cache the `list_templates()` result in memory. If you want to add a new template-defined route you will need to restart the server. I think that's acceptable.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 681516976, "label": "Path parameters for custom pages"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/944#issuecomment-691774262", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/944", "id": 691774262, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MTc3NDI2Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T02:24:08Z", "updated_at": "2020-09-14T02:24:08Z", "author_association": "OWNER", "body": "Actually don't need `{{ raise_404(\"Museum not found\") }}` because we already have `{{ custom_status(404) }}`.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 681516976, "label": "Path parameters for custom pages"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/940#issuecomment-691779361", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/940", "id": 691779361, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MTc3OTM2MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T02:45:04Z", "updated_at": "2020-09-14T02:45:04Z", "author_association": "OWNER", "body": "Package deploys are still broken, just got this error trying to ship 0.49a1: https://github.com/simonw/datasette/actions/runs/253099665\r\n\r\n> The workflow is not valid. .github/workflows/publish.yml (Line: 61, Col: 9): Unexpected symbol: '\"a\"'. Located at position 24 within expression: !(contains(github.ref, \"a\") || contains(github.ref, \"b\"))\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": 679808124, "label": "Move CI to GitHub Issues"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/940#issuecomment-691779510", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/940", "id": 691779510, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MTc3OTUxMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T02:45:53Z", "updated_at": "2020-09-14T02:45:53Z", "author_association": "OWNER", "body": "This bit here: https://github.com/simonw/datasette/blob/c18117cf08ad67c704dab29e3cb3b88f1de4026b/.github/workflows/publish.yml#L58-L62", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 679808124, "label": "Move CI to GitHub Issues"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/940#issuecomment-691779693", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/940", "id": 691779693, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MTc3OTY5Mw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T02:46:39Z", "updated_at": "2020-09-14T02:46:39Z", "author_association": "OWNER", "body": "I think those should be single quoted.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 679808124, "label": "Move CI to GitHub Issues"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/940#issuecomment-691781345", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/940", "id": 691781345, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MTc4MTM0NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T02:53:25Z", "updated_at": "2020-09-14T02:53:49Z", "author_association": "OWNER", "body": "That worked: https://github.com/simonw/datasette/runs/1110040212?check_suite_focus=true ran and deployed https://pypi.org/project/datasette/0.49a1/ to PyPI but it skipped the push to Docker step because there was an \"a\" in the tag.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 679808124, "label": "Move CI to GitHub Issues"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/880#issuecomment-691785692", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/880", "id": 691785692, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MTc4NTY5Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T03:10:11Z", "updated_at": "2020-09-14T03:10:11Z", "author_association": "OWNER", "body": "Answer: no, it's [not safe](https://twitter.com/glenathan/status/1305081266065244162) to skip CSRF if there's an `Accept: application/json` header because of a nasty old `crossdomain.xml` Flash vulnerability: https://blog.appsecco.com/exploiting-csrf-on-json-endpoints-with-flash-and-redirects-681d4ad6b31b?gi=a5ee3d7a8235", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 648637666, "label": "POST to /db/canned-query that returns JSON should be supported (for API clients)"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/944#issuecomment-691788478", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/944", "id": 691788478, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MTc4ODQ3OA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T03:21:45Z", "updated_at": "2020-09-14T03:21:45Z", "author_association": "OWNER", "body": "Having tried this out I think it does need a `raise_404()` mechanism - which needs to be smart enough to trigger the default 404 handler without accidentally going into an infinite loop.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 681516976, "label": "Path parameters for custom pages"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/965#issuecomment-692207341", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/965", "id": 692207341, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MjIwNzM0MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T17:40:05Z", "updated_at": "2020-09-14T17:40:05Z", "author_association": "OWNER", "body": "Also link to these from the docs added in #964.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 701294727, "label": "Documentation for 404.html, 500.html templates"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/964#issuecomment-692212641", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/964", "id": 692212641, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MjIxMjY0MQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T17:49:44Z", "updated_at": "2020-09-14T17:49:44Z", "author_association": "OWNER", "body": "Documentation: https://docs.datasette.io/en/latest/custom_templates.html#returning-404s", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 700728217, "label": "raise_404 mechanism for custom templates"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/965#issuecomment-692231257", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/965", "id": 692231257, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MjIzMTI1Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T18:25:04Z", "updated_at": "2020-09-14T18:25:04Z", "author_association": "OWNER", "body": "In documenting this I realized that it's confusing that the default `500.html` template is often used for non-500 errors (404 for example). I think I'll rename that default template to `error.html` instead.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 701294727, "label": "Documentation for 404.html, 500.html templates"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/965#issuecomment-692244252", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/965", "id": 692244252, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MjI0NDI1Mg==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T18:49:48Z", "updated_at": "2020-09-14T18:49:48Z", "author_association": "OWNER", "body": "Documented here: https://docs.datasette.io/en/latest/custom_templates.html#custom-error-pages", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 701294727, "label": "Documentation for 404.html, 500.html templates"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/880#issuecomment-692271804", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/880", "id": 692271804, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MjI3MTgwNA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T19:41:37Z", "updated_at": "2020-09-14T19:41:37Z", "author_association": "OWNER", "body": "Relevant code section: https://github.com/simonw/datasette/blob/1552ac931e4d2cf516caac3ceeab4fd24da1510a/datasette/views/database.py#L209-L232", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 648637666, "label": "POST to /db/canned-query that returns JSON should be supported (for API clients)"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/880#issuecomment-692272860", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/880", "id": 692272860, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MjI3Mjg2MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T19:43:47Z", "updated_at": "2020-09-14T19:43:47Z", "author_association": "OWNER", "body": "I'm going to add support for POST content that is sent as a JSON document, in addition to the existing support for key=value encoded POST bodies.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 648637666, "label": "POST to /db/canned-query that returns JSON should be supported (for API clients)"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/880#issuecomment-692298011", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/880", "id": 692298011, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MjI5ODAxMQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T20:33:13Z", "updated_at": "2020-09-14T20:33:13Z", "author_association": "OWNER", "body": "I'm going to support several ways of indicating that you would like a JSON response instead of getting a HTTP redirect from your writable canned query submission:\r\n\r\n- Use the `Accept: application/json` request header\r\n- Include `?_json=1` in the request query string\r\n- Include `\"_json\": 1` in the form submission (or the JSON body submission)", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 648637666, "label": "POST to /db/canned-query that returns JSON should be supported (for API clients)"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/880#issuecomment-692299770", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/880", "id": 692299770, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MjI5OTc3MA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T20:36:40Z", "updated_at": "2020-09-14T20:36:40Z", "author_association": "OWNER", "body": "The JSON response will look like this:\r\n```json\r\n{\r\n \"ok\": true,\r\n \"message\": \"A message\",\r\n \"redirect\": \"/blah\"\r\n}\r\n```\r\n`\"ok\"` will be `true` if everything went right and `false` if there was an error.\r\n\r\nThe `\"message\"` and `\"redirect\"` will be whatever was configured using the on_success_message - the message shown `on_success_message`, `on_success_redirect`, `on_error_message` and `on_error_redirect` settings, see https://docs.datasette.io/en/stable/sql_queries.html#writable-canned-queries", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 648637666, "label": "POST to /db/canned-query that returns JSON should be supported (for API clients)"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/880#issuecomment-692324230", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/880", "id": 692324230, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MjMyNDIzMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T21:28:15Z", "updated_at": "2020-09-14T21:28:21Z", "author_association": "OWNER", "body": "Documentation here: https://docs.datasette.io/en/latest/sql_queries.html#json-api-for-writable-canned-queries", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 648637666, "label": "POST to /db/canned-query that returns JSON should be supported (for API clients)"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/940#issuecomment-692331349", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/940", "id": 692331349, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MjMzMTM0OQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T21:46:11Z", "updated_at": "2020-09-14T21:46:11Z", "author_association": "OWNER", "body": "Just release Datasette 0.49 - which shipped to PyPI just fine but skipped the Docker step for some reason!\r\n\r\nhttps://github.com/simonw/datasette/runs/1114585275?check_suite_focus=true\r\n\r\n\"Release_0_49_\u00b7_simonw_datasette_c024952\"\r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 679808124, "label": "Move CI to GitHub Issues"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/940#issuecomment-692331919", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/940", "id": 692331919, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MjMzMTkxOQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T21:47:39Z", "updated_at": "2020-09-14T21:47:39Z", "author_association": "OWNER", "body": "I bet that's because the `github.ref` actually looks like this:\r\n\r\n`${GITHUB_REF#refs/tags/}`\r\n\r\nAnd the `refs/tags/` part has an `a` in it.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 679808124, "label": "Move CI to GitHub Issues"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/940#issuecomment-692332430", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/940", "id": 692332430, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MjMzMjQzMA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T21:48:59Z", "updated_at": "2020-09-14T21:48:59Z", "author_association": "OWNER", "body": "So now I've released Datasette 0.49 but failed to push a new Docker image. This is bad, and I need to fix it.\r\n\r\nI'd like to push to Docker from GitHub Actions, so I think I'm going to create a one-off workflow task for doing that.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 679808124, "label": "Move CI to GitHub Issues"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/940#issuecomment-692336564", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/940", "id": 692336564, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MjMzNjU2NA==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T21:59:40Z", "updated_at": "2020-09-14T21:59:40Z", "author_association": "OWNER", "body": "Using https://github.com/marketplace/actions/debugging-with-tmate to manually submit a new build from within an interactive GitHub Actions session.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 679808124, "label": "Move CI to GitHub Issues"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/940#issuecomment-692337397", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/940", "id": 692337397, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MjMzNzM5Nw==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T22:01:56Z", "updated_at": "2020-09-14T22:01:56Z", "author_association": "OWNER", "body": "I'm going to switch to using this logic to decide if I should ship to Docker: https://github.community/t/release-prerelease-action-triggers/17275/2\r\n\r\n if: \"!github.event.release.prerelease\"", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 679808124, "label": "Move CI to GitHub Issues"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/940#issuecomment-692339645", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/940", "id": 692339645, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MjMzOTY0NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T22:07:58Z", "updated_at": "2020-09-14T22:07:58Z", "author_association": "OWNER", "body": "I shipped the Docker build manually by running the following in a tmate session:\r\n\r\n docker login\r\n # Typed my username and password interactively\r\n export REPO=datasetteproject/datasette \r\n docker build -f Dockerfile -t $REPO:0.49 . \r\n docker tag $REPO:0.49 $REPO:latest\r\n docker push $REPO \r\n", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 679808124, "label": "Move CI to GitHub Issues"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/940#issuecomment-692340275", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/940", "id": 692340275, "node_id": "MDEyOklzc3VlQ29tbWVudDY5MjM0MDI3NQ==", "user": {"value": 9599, "label": "simonw"}, "created_at": "2020-09-14T22:09:35Z", "updated_at": "2020-09-14T22:09:35Z", "author_association": "OWNER", "body": "I'm going to cross my fingers and hope that this works - I don't want to leave this issue open until Datasette 0.50.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 679808124, "label": "Move CI to GitHub Issues"}, "performed_via_github_app": null}