@@ -27,12 +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
3130from os import getenv
31+ from typing import Optional
32+
33+ from botocore.client import BaseClient
3234
3335from chalice.app import Request, Response, Chalice
34- from chalice.config import Config
35- from chalice.test import BaseClient, LambdaContext, InvokeResponse
3636
3737from slack_bolt.adapter.aws_lambda.chalice_lazy_listener_runner import (
3838 ChaliceLazyListenerRunner,
@@ -45,38 +45,22 @@ <h1 class="title">Module <code>slack_bolt.adapter.aws_lambda.chalice_handler</co
4545from slack_bolt.response import BoltResponse
4646
4747
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-
7148class ChaliceSlackRequestHandler:
72- def __init__(self, app: App, chalice: Chalice): # type: ignore
49+ def __init__(self, app: App, chalice: Chalice, lambda_client: Optional[BaseClient] = None ): # type: ignore
7350 self.app = app
7451 self.chalice = chalice
7552 self.logger = get_bolt_app_logger(app.name, ChaliceSlackRequestHandler)
7653
77- lambda_client = None
78- if getenv("AWS_CHALICE_CLI_MODE") == "true":
79- lambda_client = LocalLambdaClient(self.chalice, Config())
54+ if getenv("AWS_CHALICE_CLI_MODE") == "true" and lambda_client is None:
55+ try:
56+ from slack_bolt.adapter.aws_lambda.local_lambda_client import (
57+ LocalLambdaClient,
58+ )
59+
60+ lambda_client = LocalLambdaClient(self.chalice, None)
61+ except ImportError:
62+ logging.info("Failed to load LocalLambdaClient for CLI mode.")
63+ pass
8064
8165 self.app.listener_runner.lazy_listener_runner = ChaliceLazyListenerRunner(
8266 logger=self.logger, lambda_client=lambda_client
@@ -225,7 +209,7 @@ <h2 class="section-title" id="header-classes">Classes</h2>
225209< dl >
226210< dt id ="slack_bolt.adapter.aws_lambda.chalice_handler.ChaliceSlackRequestHandler "> < code class ="flex name class ">
227211< span > class < span class ="ident "> ChaliceSlackRequestHandler</ span > </ span >
228- < span > (</ span > < span > app: < a title ="slack_bolt.app.app.App " href ="../../app/app.html#slack_bolt.app.app.App "> App</ a > , chalice: chalice.app.Chalice)</ span >
212+ < span > (</ span > < span > app: < a title ="slack_bolt.app.app.App " href ="../../app/app.html#slack_bolt.app.app.App "> App</ a > , chalice: chalice.app.Chalice, lambda_client: Optional[botocore.client.BaseClient] = None )</ span >
229213</ code > </ dt >
230214< dd >
231215< div class ="desc "> </ div >
@@ -234,14 +218,21 @@ <h2 class="section-title" id="header-classes">Classes</h2>
234218< span > Expand source code</ span >
235219</ summary >
236220< pre > < code class ="python "> class ChaliceSlackRequestHandler:
237- def __init__(self, app: App, chalice: Chalice): # type: ignore
221+ def __init__(self, app: App, chalice: Chalice, lambda_client: Optional[BaseClient] = None ): # type: ignore
238222 self.app = app
239223 self.chalice = chalice
240224 self.logger = get_bolt_app_logger(app.name, ChaliceSlackRequestHandler)
241225
242- lambda_client = None
243- if getenv("AWS_CHALICE_CLI_MODE") == "true":
244- lambda_client = LocalLambdaClient(self.chalice, Config())
226+ if getenv("AWS_CHALICE_CLI_MODE") == "true" and lambda_client is None:
227+ try:
228+ from slack_bolt.adapter.aws_lambda.local_lambda_client import (
229+ LocalLambdaClient,
230+ )
231+
232+ lambda_client = LocalLambdaClient(self.chalice, None)
233+ except ImportError:
234+ logging.info("Failed to load LocalLambdaClient for CLI mode.")
235+ pass
245236
246237 self.app.listener_runner.lazy_listener_runner = ChaliceLazyListenerRunner(
247238 logger=self.logger, lambda_client=lambda_client
@@ -377,71 +368,6 @@ <h3>Methods</h3>
377368</ dd >
378369</ dl >
379370</ 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 >
445371</ dl >
446372</ section >
447373</ article >
@@ -472,12 +398,6 @@ <h4><code><a title="slack_bolt.adapter.aws_lambda.chalice_handler.ChaliceSlackRe
472398< 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 >
473399</ ul >
474400</ 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 >
481401</ ul >
482402</ li >
483403</ ul >
0 commit comments