@@ -45,14 +45,34 @@ def handle(self, request: Request) -> Response:
4545 if self .app .oauth_flow is not None :
4646 oauth_flow : OAuthFlow = self .app .oauth_flow
4747 if request .path == oauth_flow .install_path :
48- bolt_resp = oauth_flow .handle_installation (to_bolt_request (request ))
48+ bolt_req = _attach_pyramid_request_to_context (to_bolt_request (request ), request )
49+ bolt_resp = oauth_flow .handle_installation (bolt_req )
4950 return to_pyramid_response (bolt_resp )
5051 elif request .path == oauth_flow .redirect_uri_path :
51- bolt_resp = oauth_flow .handle_callback (to_bolt_request (request ))
52+ bolt_req = _attach_pyramid_request_to_context (to_bolt_request (request ), request )
53+ bolt_resp = oauth_flow .handle_callback (bolt_req )
5254 return to_pyramid_response (bolt_resp )
5355 elif request .method == "POST" :
54- bolt_req = to_bolt_request (request )
56+ bolt_req = _attach_pyramid_request_to_context ( to_bolt_request (request ), request )
5557 bolt_resp = self .app .dispatch (bolt_req )
5658 return to_pyramid_response (bolt_resp )
5759
5860 return Response (status = 404 , body = "Not found" )
61+
62+
63+ def _attach_pyramid_request_to_context (
64+ bolt_req : BoltRequest ,
65+ request : Request ,
66+ ) -> BoltRequest :
67+ # To enable developers to access request-scope attributes such as dbsession,
68+ # this adapter exposes the underlying pyramid_request object to Bolt listeners
69+ #
70+ # Developers can access request props this way:
71+ # @app.event("app_mention")
72+ # def handle_app_mention_events(context, logger):
73+ # req = context["pyramid_request"]
74+ # all = req.dbsession.query(MyModel).all()
75+ # logger.info(all)
76+ #
77+ bolt_req .context ["pyramid_request" ] = request
78+ return bolt_req
0 commit comments