@@ -27,8 +27,12 @@ <h1 class="title">Module <code>slack_bolt.adapter.aws_lambda.chalice_handler</co
2727< span > Expand source code</ span >
2828</ summary >
2929< pre > < code class ="python "> import logging
30+ import json
31+ from os import getenv
3032
3133from chalice.app import Request, Response, Chalice
34+ from chalice.config import Config
35+ from chalice.test import BaseClient, LambdaContext, InvokeResponse
3236
3337from slack_bolt.adapter.aws_lambda.chalice_lazy_listener_runner import (
3438 ChaliceLazyListenerRunner,
@@ -41,14 +45,43 @@ <h1 class="title">Module <code>slack_bolt.adapter.aws_lambda.chalice_handler</co
4145from slack_bolt.response import BoltResponse
4246
4347
48+ class LocalLambdaClient(BaseClient):
49+ """Lambda client implementing `invoke` for use when running with Chalice CLI"""
50+
51+ def __init__(self, app: Chalice, config: Config) -> None:
52+ self._app = app
53+ self._config = config
54+
55+ def invoke(
56+ self,
57+ FunctionName: str = None,
58+ InvocationType: str = "Event",
59+ Payload: str = "{}",
60+ ) -> InvokeResponse:
61+ scoped = self._config.scope(self._config.chalice_stage, FunctionName)
62+ lambda_context = LambdaContext(
63+ FunctionName, memory_size=scoped.lambda_memory_size
64+ )
65+
66+ with self._patched_env_vars(scoped.environment_variables):
67+ response = self._app(json.loads(Payload), lambda_context)
68+ return InvokeResponse(payload=response)
69+
70+
4471class ChaliceSlackRequestHandler:
4572 def __init__(self, app: App, chalice: Chalice): # type: ignore
4673 self.app = app
4774 self.chalice = chalice
4875 self.logger = get_bolt_app_logger(app.name, ChaliceSlackRequestHandler)
76+
77+ lambda_client = None
78+ if getenv("AWS_CHALICE_CLI_MODE") == "true":
79+ lambda_client = LocalLambdaClient(self.chalice, Config())
80+
4981 self.app.listener_runner.lazy_listener_runner = ChaliceLazyListenerRunner(
50- logger=self.logger
82+ logger=self.logger, lambda_client=lambda_client
5183 )
84+
5285 if self.app.oauth_flow is not None:
5386 self.app.oauth_flow.settings.redirect_uri_page_renderer.install_path = "?"
5487
@@ -205,9 +238,15 @@ <h2 class="section-title" id="header-classes">Classes</h2>
205238 self.app = app
206239 self.chalice = chalice
207240 self.logger = get_bolt_app_logger(app.name, ChaliceSlackRequestHandler)
241+
242+ lambda_client = None
243+ if getenv("AWS_CHALICE_CLI_MODE") == "true":
244+ lambda_client = LocalLambdaClient(self.chalice, Config())
245+
208246 self.app.listener_runner.lazy_listener_runner = ChaliceLazyListenerRunner(
209- logger=self.logger
247+ logger=self.logger, lambda_client=lambda_client
210248 )
249+
211250 if self.app.oauth_flow is not None:
212251 self.app.oauth_flow.settings.redirect_uri_page_renderer.install_path = "?"
213252
@@ -338,6 +377,71 @@ <h3>Methods</h3>
338377</ dd >
339378</ dl >
340379</ dd >
380+ < dt id ="slack_bolt.adapter.aws_lambda.chalice_handler.LocalLambdaClient "> < code class ="flex name class ">
381+ < span > class < span class ="ident "> LocalLambdaClient</ span > </ span >
382+ < span > (</ span > < span > app: chalice.app.Chalice, config: chalice.config.Config)</ span >
383+ </ code > </ dt >
384+ < dd >
385+ < div class ="desc "> < p > Lambda client implementing < code > invoke</ code > for use when running with Chalice CLI</ p > </ div >
386+ < details class ="source ">
387+ < summary >
388+ < span > Expand source code</ span >
389+ </ summary >
390+ < pre > < code class ="python "> class LocalLambdaClient(BaseClient):
391+ """Lambda client implementing `invoke` for use when running with Chalice CLI"""
392+
393+ def __init__(self, app: Chalice, config: Config) -> None:
394+ self._app = app
395+ self._config = config
396+
397+ def invoke(
398+ self,
399+ FunctionName: str = None,
400+ InvocationType: str = "Event",
401+ Payload: str = "{}",
402+ ) -> InvokeResponse:
403+ scoped = self._config.scope(self._config.chalice_stage, FunctionName)
404+ lambda_context = LambdaContext(
405+ FunctionName, memory_size=scoped.lambda_memory_size
406+ )
407+
408+ with self._patched_env_vars(scoped.environment_variables):
409+ response = self._app(json.loads(Payload), lambda_context)
410+ return InvokeResponse(payload=response)</ code > </ pre >
411+ </ details >
412+ < h3 > Ancestors</ h3 >
413+ < ul class ="hlist ">
414+ < li > chalice.test.BaseClient</ li >
415+ </ ul >
416+ < h3 > Methods</ h3 >
417+ < dl >
418+ < dt id ="slack_bolt.adapter.aws_lambda.chalice_handler.LocalLambdaClient.invoke "> < code class ="name flex ">
419+ < span > def < span class ="ident "> invoke</ span > </ span > (< span > self, FunctionName: str = None, InvocationType: str = 'Event', Payload: str = '{}') ‑> chalice.test.InvokeResponse</ span >
420+ </ code > </ dt >
421+ < dd >
422+ < div class ="desc "> </ div >
423+ < details class ="source ">
424+ < summary >
425+ < span > Expand source code</ span >
426+ </ summary >
427+ < pre > < code class ="python "> def invoke(
428+ self,
429+ FunctionName: str = None,
430+ InvocationType: str = "Event",
431+ Payload: str = "{}",
432+ ) -> InvokeResponse:
433+ scoped = self._config.scope(self._config.chalice_stage, FunctionName)
434+ lambda_context = LambdaContext(
435+ FunctionName, memory_size=scoped.lambda_memory_size
436+ )
437+
438+ with self._patched_env_vars(scoped.environment_variables):
439+ response = self._app(json.loads(Payload), lambda_context)
440+ return InvokeResponse(payload=response)</ code > </ pre >
441+ </ details >
442+ </ dd >
443+ </ dl >
444+ </ dd >
341445</ dl >
342446</ section >
343447</ article >
@@ -368,6 +472,12 @@ <h4><code><a title="slack_bolt.adapter.aws_lambda.chalice_handler.ChaliceSlackRe
368472< li > < code > < a title ="slack_bolt.adapter.aws_lambda.chalice_handler.ChaliceSlackRequestHandler.handle " href ="#slack_bolt.adapter.aws_lambda.chalice_handler.ChaliceSlackRequestHandler.handle "> handle</ a > </ code > </ li >
369473</ ul >
370474</ li >
475+ < li >
476+ < h4 > < code > < a title ="slack_bolt.adapter.aws_lambda.chalice_handler.LocalLambdaClient " href ="#slack_bolt.adapter.aws_lambda.chalice_handler.LocalLambdaClient "> LocalLambdaClient</ a > </ code > </ h4 >
477+ < ul class ="">
478+ < li > < code > < a title ="slack_bolt.adapter.aws_lambda.chalice_handler.LocalLambdaClient.invoke " href ="#slack_bolt.adapter.aws_lambda.chalice_handler.LocalLambdaClient.invoke "> invoke</ a > </ code > </ li >
479+ </ ul >
480+ </ li >
371481</ ul >
372482</ li >
373483</ ul >
0 commit comments