{"html_url": "https://github.com/simonw/datasette/issues/1770#issuecomment-1185937664", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1770", "id": 1185937664, "node_id": "IC_kwDOBm6k_c5Gr_kA", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-15T21:03:09Z", "updated_at": "2022-07-17T22:25:44Z", "author_association": "OWNER", "body": "Design decision:\r\n\r\n```python\r\n@hookspec\r\ndef handle_exception(datasette, request, exception):\r\n \"\"\"Handle an uncaught exception. Can return a Response or None.\"\"\"\r\n```\r\nIt will also support returning an awaitable, using the `await_me_maybe` pattern.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1306492437, "label": "`handle_exception` plugin hook for custom error handling"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1770#issuecomment-1186620168", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1770", "id": 1186620168, "node_id": "IC_kwDOBm6k_c5GumMI", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-17T22:37:01Z", "updated_at": "2022-07-17T22:37:01Z", "author_association": "OWNER", "body": "I need to refactor this code so that `Forbidden` exceptions are handled separately.\r\n\r\nReason is that those already have a plugin hook of their own:\r\n\r\nhttps://github.com/simonw/datasette/blob/8188f55efc0fcca1be692b0d0c875f2d1ee99f17/datasette/app.py#L1384-L1395\r\n\r\nMy first attempt at this refactored that entire `handle_exception` method to call the new plugin hook, moving its current implementation into a `datasette/handle_exception.py` default plugin implementation - but it felt weird having that plugin implementation then itself call the `pm.hook.forbidden()` hook.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1306492437, "label": "`handle_exception` plugin hook for custom error handling"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1770#issuecomment-1186620367", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1770", "id": 1186620367, "node_id": "IC_kwDOBm6k_c5GumPP", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-17T22:38:25Z", "updated_at": "2022-07-17T22:38:25Z", "author_association": "OWNER", "body": "I think this is the right place to move the code to catch `Forbidden` exceptions (and forwards them to that plugin hook): https://github.com/simonw/datasette/blob/8188f55efc0fcca1be692b0d0c875f2d1ee99f17/datasette/app.py#L1269-L1278", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1306492437, "label": "`handle_exception` plugin hook for custom error handling"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1770#issuecomment-1186629556", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1770", "id": 1186629556, "node_id": "IC_kwDOBm6k_c5Guoe0", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-17T23:25:08Z", "updated_at": "2022-07-17T23:25:08Z", "author_association": "OWNER", "body": "Keeping this issue open until I've proven the new plugin hook works by releasing a plugin that uses it.", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1306492437, "label": "`handle_exception` plugin hook for custom error handling"}, "performed_via_github_app": null} {"html_url": "https://github.com/simonw/datasette/issues/1770#issuecomment-1186630298", "issue_url": "https://api.github.com/repos/simonw/datasette/issues/1770", "id": 1186630298, "node_id": "IC_kwDOBm6k_c5Guoqa", "user": {"value": 9599, "label": "simonw"}, "created_at": "2022-07-17T23:29:37Z", "updated_at": "2022-07-17T23:29:37Z", "author_association": "OWNER", "body": "Documentation for the new hook: https://docs.datasette.io/en/latest/plugin_hooks.html#handle-exception-datasette-request-exception", "reactions": "{\"total_count\": 0, \"+1\": 0, \"-1\": 0, \"laugh\": 0, \"hooray\": 0, \"confused\": 0, \"heart\": 0, \"rocket\": 0, \"eyes\": 0}", "issue": {"value": 1306492437, "label": "`handle_exception` plugin hook for custom error handling"}, "performed_via_github_app": null}