diff --git a/requirements.txt b/requirements.txt index f0b0cf987..c8d66106a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1 @@ -slack_sdk>=3.33.5,<4 +slack_sdk>=3.35.0,<4 diff --git a/slack_bolt/app/app.py b/slack_bolt/app/app.py index 3d5532b7b..69da0a0d8 100644 --- a/slack_bolt/app/app.py +++ b/slack_bolt/app/app.py @@ -1381,6 +1381,7 @@ def _init_context(self, req: BoltRequest): proxy=self._client.proxy, headers=self._client.headers, team_id=req.context.team_id, + logger=self._client.logger, retry_handlers=self._client.retry_handlers.copy() if self._client.retry_handlers is not None else None, ) req.context["client"] = client_per_request diff --git a/slack_bolt/app/async_app.py b/slack_bolt/app/async_app.py index 50a36e5dd..3fcc3d955 100644 --- a/slack_bolt/app/async_app.py +++ b/slack_bolt/app/async_app.py @@ -1413,6 +1413,7 @@ def _init_context(self, req: AsyncBoltRequest): trust_env_in_session=self._async_client.trust_env_in_session, headers=self._async_client.headers, team_id=req.context.team_id, + logger=self._async_client.logger, retry_handlers=( self._async_client.retry_handlers.copy() if self._async_client.retry_handlers is not None else None ), diff --git a/tests/scenario_tests/test_web_client_customization.py b/tests/scenario_tests/test_web_client_customization.py index 3caf536e3..f78c7747a 100644 --- a/tests/scenario_tests/test_web_client_customization.py +++ b/tests/scenario_tests/test_web_client_customization.py @@ -73,7 +73,7 @@ def listener(ack, client): def test_web_client_logger_is_default_app_logger(self): app = App(token=self.valid_token, signing_secret=self.signing_secret, token_verification_enabled=False) - assert app.client._logger == app.logger # TODO: use client.logger when available + assert app.client.logger == app.logger def test_web_client_logger_is_app_logger(self): app = App( @@ -82,8 +82,65 @@ def test_web_client_logger_is_app_logger(self): logger=self.test_logger, token_verification_enabled=False, ) - assert app.client._logger == app.logger # TODO: use client.logger when available - assert app.client._logger == self.test_logger # TODO: use client.logger when available + assert app.client.logger == app.logger + assert app.client.logger == self.test_logger + + def test_default_web_client_uses_bolt_framework_logger(self): + app = App(token=self.valid_token, signing_secret=self.signing_secret, token_verification_enabled=False) + app.client.base_url = self.mock_api_server_base_url + + @app.action("a") + def listener(ack, client: WebClient): + assert client.logger == app.logger + ack() + + request = self.build_valid_request() + response = app.dispatch(request) + assert response.status == 200 + assert response.body == "" + assert_auth_test_count(self, 1) + + def test_default_web_client_uses_bolt_app_custom_logger(self): + app = App( + token=self.valid_token, + signing_secret=self.signing_secret, + token_verification_enabled=False, + logger=self.test_logger, + ) + app.client.base_url = self.mock_api_server_base_url + + assert app.client.logger == app.logger + + @app.action("a") + def listener(ack, client: WebClient): + assert client.logger == app.logger + assert client.logger == self.test_logger + ack() + + request = self.build_valid_request() + response = app.dispatch(request) + assert response.status == 200 + assert response.body == "" + assert_auth_test_count(self, 1) + + def test_custom_web_client_logger_is_used_instead_of_bolt_app_logger(self): + web_client = WebClient(token=self.valid_token, base_url=self.mock_api_server_base_url, logger=self.test_logger) + app = App( + client=web_client, + signing_secret=self.signing_secret, + ) + + @app.action("a") + def listener(ack, client: WebClient): + assert client.logger == self.test_logger + assert app.logger != self.test_logger + ack() + + request = self.build_valid_request() + response = app.dispatch(request) + assert response.status == 200 + assert response.body == "" + assert_auth_test_count(self, 1) block_actions_body = { diff --git a/tests/scenario_tests_async/test_web_client_customization.py b/tests/scenario_tests_async/test_web_client_customization.py index fd95ed5a8..c9b42a617 100644 --- a/tests/scenario_tests_async/test_web_client_customization.py +++ b/tests/scenario_tests_async/test_web_client_customization.py @@ -91,12 +91,71 @@ async def listener(ack, client): def test_web_client_logger_is_default_app_logger(self): app = AsyncApp(token=self.valid_token, signing_secret=self.signing_secret) - assert app.client._logger == app.logger # TODO: use client.logger when available + assert app.client.logger == app.logger def test_web_client_logger_is_app_logger(self): app = AsyncApp(token=self.valid_token, signing_secret=self.signing_secret, logger=self.test_logger) - assert app.client._logger == app.logger # TODO: use client.logger when available - assert app.client._logger == self.test_logger # TODO: use client.logger when available + assert app.client.logger == app.logger + assert app.client.logger == self.test_logger + + @pytest.mark.asyncio + async def test_default_web_client_uses_bolt_framework_logger(self): + app = AsyncApp(token=self.valid_token, signing_secret=self.signing_secret) + app.client.base_url = self.mock_api_server_base_url + + @app.action("a") + async def listener(ack, client: AsyncWebClient): + assert client.logger == app.logger + await ack() + + request = self.build_valid_request() + response = await app.async_dispatch(request) + assert response.status == 200 + assert response.body == "" + await assert_auth_test_count_async(self, 1) + + @pytest.mark.asyncio + async def test_default_web_client_uses_bolt_app_custom_logger(self): + app = AsyncApp( + token=self.valid_token, + signing_secret=self.signing_secret, + logger=self.test_logger, + ) + app.client.base_url = self.mock_api_server_base_url + + assert app.client.logger == app.logger + + @app.action("a") + async def listener(ack, client: AsyncWebClient): + assert client.logger == app.logger + assert client.logger == self.test_logger + await ack() + + request = self.build_valid_request() + response = await app.async_dispatch(request) + assert response.status == 200 + assert response.body == "" + await assert_auth_test_count_async(self, 1) + + @pytest.mark.asyncio + async def test_custom_web_client_logger_is_used_instead_of_bolt_app_logger(self): + web_client = AsyncWebClient(token=self.valid_token, base_url=self.mock_api_server_base_url, logger=self.test_logger) + app = AsyncApp( + client=web_client, + signing_secret=self.signing_secret, + ) + + @app.action("a") + async def listener(ack, client: AsyncWebClient): + assert client.logger == self.test_logger + assert app.logger != self.test_logger + await ack() + + request = self.build_valid_request() + response = await app.async_dispatch(request) + assert response.status == 200 + assert response.body == "" + await assert_auth_test_count_async(self, 1) block_actions_body = {