Skip to content

Commit 7bf508f

Browse files
authored
Improve the default handler when raise_error_for_unhandled_request is true (#885)
1 parent f8c1b86 commit 7bf508f

File tree

5 files changed

+58
-24
lines changed

5 files changed

+58
-24
lines changed

slack_bolt/app/app.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -511,15 +511,18 @@ def middleware_next():
511511
# This should not be an intentional handling in usual use cases.
512512
resp = BoltResponse(status=404, body={"error": "no next() calls in middleware"})
513513
if self._raise_error_for_unhandled_request is True:
514-
self._listener_runner.listener_error_handler.handle(
515-
error=BoltUnhandledRequestError(
514+
try:
515+
raise BoltUnhandledRequestError(
516516
request=req,
517517
current_response=resp,
518518
last_global_middleware_name=middleware.name,
519-
),
520-
request=req,
521-
response=resp,
522-
)
519+
)
520+
except BoltUnhandledRequestError as e:
521+
self._listener_runner.listener_error_handler.handle(
522+
error=e,
523+
request=req,
524+
response=resp,
525+
)
523526
return resp
524527
self._framework_logger.warning(warning_unhandled_by_global_middleware(middleware.name, req))
525528
return resp
@@ -562,14 +565,17 @@ def middleware_next():
562565
if resp is None:
563566
resp = BoltResponse(status=404, body={"error": "unhandled request"})
564567
if self._raise_error_for_unhandled_request is True:
565-
self._listener_runner.listener_error_handler.handle(
566-
error=BoltUnhandledRequestError(
568+
try:
569+
raise BoltUnhandledRequestError(
567570
request=req,
568571
current_response=resp,
569-
),
570-
request=req,
571-
response=resp,
572-
)
572+
)
573+
except BoltUnhandledRequestError as e:
574+
self._listener_runner.listener_error_handler.handle(
575+
error=e,
576+
request=req,
577+
response=resp,
578+
)
573579
return resp
574580
return self._handle_unmatched_requests(req, resp)
575581
except Exception as error:

slack_bolt/app/async_app.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -535,15 +535,18 @@ async def async_middleware_next():
535535
# This should not be an intentional handling in usual use cases.
536536
resp = BoltResponse(status=404, body={"error": "no next() calls in middleware"})
537537
if self._raise_error_for_unhandled_request is True:
538-
await self._async_listener_runner.listener_error_handler.handle(
539-
error=BoltUnhandledRequestError(
538+
try:
539+
raise BoltUnhandledRequestError(
540540
request=req,
541541
current_response=resp,
542542
last_global_middleware_name=middleware.name,
543-
),
544-
request=req,
545-
response=resp,
546-
)
543+
)
544+
except BoltUnhandledRequestError as e:
545+
await self._async_listener_runner.listener_error_handler.handle(
546+
error=e,
547+
request=req,
548+
response=resp,
549+
)
547550
return resp
548551
self._framework_logger.warning(warning_unhandled_by_global_middleware(middleware.name, req))
549552
return resp
@@ -589,14 +592,17 @@ async def async_middleware_next():
589592
if resp is None:
590593
resp = BoltResponse(status=404, body={"error": "unhandled request"})
591594
if self._raise_error_for_unhandled_request is True:
592-
await self._async_listener_runner.listener_error_handler.handle(
593-
error=BoltUnhandledRequestError(
595+
try:
596+
raise BoltUnhandledRequestError(
594597
request=req,
595598
current_response=resp,
596-
),
597-
request=req,
598-
response=resp,
599-
)
599+
)
600+
except BoltUnhandledRequestError as e:
601+
await self._async_listener_runner.listener_error_handler.handle(
602+
error=e,
603+
request=req,
604+
response=resp,
605+
)
600606
return resp
601607
return self._handle_unmatched_requests(req, resp)
602608

slack_bolt/error/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,6 @@ def __init__( # type: ignore
2323
self.body = request.body if request is not None else {}
2424
self.current_response = current_response
2525
self.last_global_middleware_name = last_global_middleware_name
26+
27+
def __str__(self) -> str:
28+
return "unhandled request error"

tests/slack_bolt/error/__init__.py

Whitespace-only changes.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from slack_bolt import BoltRequest
2+
from slack_bolt.error import BoltUnhandledRequestError
3+
4+
5+
class TestErrors:
6+
def setup_method(self):
7+
pass
8+
9+
def teardown_method(self):
10+
pass
11+
12+
def test_say(self):
13+
request = BoltRequest(body="foo=bar")
14+
exception = BoltUnhandledRequestError(
15+
request=request,
16+
current_response={},
17+
last_global_middleware_name="last_middleware",
18+
)
19+
assert str(exception) == "unhandled request error"

0 commit comments

Comments
 (0)