Skip to content

Commit fc58fbf

Browse files
fix: honor passing bolt logger in default web client installation (#1272)
1 parent 4c237fe commit fc58fbf

File tree

5 files changed

+125
-7
lines changed

5 files changed

+125
-7
lines changed

requirements.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
slack_sdk>=3.33.5,<4
1+
slack_sdk>=3.35.0,<4

slack_bolt/app/app.py

+1
Original file line numberDiff line numberDiff line change
@@ -1381,6 +1381,7 @@ def _init_context(self, req: BoltRequest):
13811381
proxy=self._client.proxy,
13821382
headers=self._client.headers,
13831383
team_id=req.context.team_id,
1384+
logger=self._client.logger,
13841385
retry_handlers=self._client.retry_handlers.copy() if self._client.retry_handlers is not None else None,
13851386
)
13861387
req.context["client"] = client_per_request

slack_bolt/app/async_app.py

+1
Original file line numberDiff line numberDiff line change
@@ -1413,6 +1413,7 @@ def _init_context(self, req: AsyncBoltRequest):
14131413
trust_env_in_session=self._async_client.trust_env_in_session,
14141414
headers=self._async_client.headers,
14151415
team_id=req.context.team_id,
1416+
logger=self._async_client.logger,
14161417
retry_handlers=(
14171418
self._async_client.retry_handlers.copy() if self._async_client.retry_handlers is not None else None
14181419
),

tests/scenario_tests/test_web_client_customization.py

+60-3
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def listener(ack, client):
7373

7474
def test_web_client_logger_is_default_app_logger(self):
7575
app = App(token=self.valid_token, signing_secret=self.signing_secret, token_verification_enabled=False)
76-
assert app.client._logger == app.logger # TODO: use client.logger when available
76+
assert app.client.logger == app.logger
7777

7878
def test_web_client_logger_is_app_logger(self):
7979
app = App(
@@ -82,8 +82,65 @@ def test_web_client_logger_is_app_logger(self):
8282
logger=self.test_logger,
8383
token_verification_enabled=False,
8484
)
85-
assert app.client._logger == app.logger # TODO: use client.logger when available
86-
assert app.client._logger == self.test_logger # TODO: use client.logger when available
85+
assert app.client.logger == app.logger
86+
assert app.client.logger == self.test_logger
87+
88+
def test_default_web_client_uses_bolt_framework_logger(self):
89+
app = App(token=self.valid_token, signing_secret=self.signing_secret, token_verification_enabled=False)
90+
app.client.base_url = self.mock_api_server_base_url
91+
92+
@app.action("a")
93+
def listener(ack, client: WebClient):
94+
assert client.logger == app.logger
95+
ack()
96+
97+
request = self.build_valid_request()
98+
response = app.dispatch(request)
99+
assert response.status == 200
100+
assert response.body == ""
101+
assert_auth_test_count(self, 1)
102+
103+
def test_default_web_client_uses_bolt_app_custom_logger(self):
104+
app = App(
105+
token=self.valid_token,
106+
signing_secret=self.signing_secret,
107+
token_verification_enabled=False,
108+
logger=self.test_logger,
109+
)
110+
app.client.base_url = self.mock_api_server_base_url
111+
112+
assert app.client.logger == app.logger
113+
114+
@app.action("a")
115+
def listener(ack, client: WebClient):
116+
assert client.logger == app.logger
117+
assert client.logger == self.test_logger
118+
ack()
119+
120+
request = self.build_valid_request()
121+
response = app.dispatch(request)
122+
assert response.status == 200
123+
assert response.body == ""
124+
assert_auth_test_count(self, 1)
125+
126+
def test_custom_web_client_logger_is_used_instead_of_bolt_app_logger(self):
127+
web_client = WebClient(token=self.valid_token, base_url=self.mock_api_server_base_url, logger=self.test_logger)
128+
app = App(
129+
client=web_client,
130+
signing_secret=self.signing_secret,
131+
)
132+
133+
@app.action("a")
134+
def listener(ack, client: WebClient):
135+
assert client.logger == self.test_logger
136+
assert app.logger != self.test_logger
137+
ack()
138+
139+
request = self.build_valid_request()
140+
response = app.dispatch(request)
141+
assert response.status == 200
142+
assert response.body == ""
143+
assert_auth_test_count(self, 1)
87144

88145

89146
block_actions_body = {

tests/scenario_tests_async/test_web_client_customization.py

+62-3
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,71 @@ async def listener(ack, client):
9191

9292
def test_web_client_logger_is_default_app_logger(self):
9393
app = AsyncApp(token=self.valid_token, signing_secret=self.signing_secret)
94-
assert app.client._logger == app.logger # TODO: use client.logger when available
94+
assert app.client.logger == app.logger
9595

9696
def test_web_client_logger_is_app_logger(self):
9797
app = AsyncApp(token=self.valid_token, signing_secret=self.signing_secret, logger=self.test_logger)
98-
assert app.client._logger == app.logger # TODO: use client.logger when available
99-
assert app.client._logger == self.test_logger # TODO: use client.logger when available
98+
assert app.client.logger == app.logger
99+
assert app.client.logger == self.test_logger
100+
101+
@pytest.mark.asyncio
102+
async def test_default_web_client_uses_bolt_framework_logger(self):
103+
app = AsyncApp(token=self.valid_token, signing_secret=self.signing_secret)
104+
app.client.base_url = self.mock_api_server_base_url
105+
106+
@app.action("a")
107+
async def listener(ack, client: AsyncWebClient):
108+
assert client.logger == app.logger
109+
await ack()
110+
111+
request = self.build_valid_request()
112+
response = await app.async_dispatch(request)
113+
assert response.status == 200
114+
assert response.body == ""
115+
await assert_auth_test_count_async(self, 1)
116+
117+
@pytest.mark.asyncio
118+
async def test_default_web_client_uses_bolt_app_custom_logger(self):
119+
app = AsyncApp(
120+
token=self.valid_token,
121+
signing_secret=self.signing_secret,
122+
logger=self.test_logger,
123+
)
124+
app.client.base_url = self.mock_api_server_base_url
125+
126+
assert app.client.logger == app.logger
127+
128+
@app.action("a")
129+
async def listener(ack, client: AsyncWebClient):
130+
assert client.logger == app.logger
131+
assert client.logger == self.test_logger
132+
await ack()
133+
134+
request = self.build_valid_request()
135+
response = await app.async_dispatch(request)
136+
assert response.status == 200
137+
assert response.body == ""
138+
await assert_auth_test_count_async(self, 1)
139+
140+
@pytest.mark.asyncio
141+
async def test_custom_web_client_logger_is_used_instead_of_bolt_app_logger(self):
142+
web_client = AsyncWebClient(token=self.valid_token, base_url=self.mock_api_server_base_url, logger=self.test_logger)
143+
app = AsyncApp(
144+
client=web_client,
145+
signing_secret=self.signing_secret,
146+
)
147+
148+
@app.action("a")
149+
async def listener(ack, client: AsyncWebClient):
150+
assert client.logger == self.test_logger
151+
assert app.logger != self.test_logger
152+
await ack()
153+
154+
request = self.build_valid_request()
155+
response = await app.async_dispatch(request)
156+
assert response.status == 200
157+
assert response.body == ""
158+
await assert_auth_test_count_async(self, 1)
100159

101160

102161
block_actions_body = {

0 commit comments

Comments
 (0)