From f202722f973b41a3bcc9ed695cdd53886fecfef7 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Fri, 31 Jul 2026 18:34:51 -0700 Subject: [PATCH] fix(mcp-client): make slackbot MCP examples pass ruff 0.16 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ruff 0.16 expands the default rule set and drops E402 from it, which broke CI on the ruff-0.16 bump (e.g. #150): - RUF100 'unused noqa (non-enabled: E402)' — E402 is no longer a default rule, so the '# noqa: E402' on the post-mock `from src.app import app` imports is now unused. Remove it from all three test files. - BLE001 'do not catch blind exception' (slack-identity/src/app.py) — narrow `except Exception` to `(SlackApiError, ValueError, KeyError)`, the errors the WebClient/profile lookup can actually raise. Bumps ruff to 0.16.0 in all three mcp-client requirements so each dir is internally consistent (0.16 + no E402 noqa), superseding the partial Dependabot bump in #150. Verified per dir: ruff check + ruff format --check + mypy + pytest all pass. Co-Authored-By: Claude --- ai/slackbot-mcp-client/no-auth/requirements.txt | 2 +- ai/slackbot-mcp-client/no-auth/tests/test_app.py | 2 +- .../rich-responses/mcp-apps/requirements.txt | 2 +- .../rich-responses/mcp-apps/tests/test_app.py | 2 +- ai/slackbot-mcp-client/slack-identity/requirements.txt | 2 +- ai/slackbot-mcp-client/slack-identity/src/app.py | 3 ++- ai/slackbot-mcp-client/slack-identity/tests/test_app.py | 2 +- 7 files changed, 8 insertions(+), 7 deletions(-) diff --git a/ai/slackbot-mcp-client/no-auth/requirements.txt b/ai/slackbot-mcp-client/no-auth/requirements.txt index 13803da..95fdecc 100644 --- a/ai/slackbot-mcp-client/no-auth/requirements.txt +++ b/ai/slackbot-mcp-client/no-auth/requirements.txt @@ -2,7 +2,7 @@ httpx2==2.9.1 mcp==1.28.1 mypy==2.3.0 pytest==9.1.1 -ruff==0.15.22 +ruff==0.16.0 slack_bolt==1.30.0 slack_cli_hooks==0.3.0 slack_sdk==3.43.0 diff --git a/ai/slackbot-mcp-client/no-auth/tests/test_app.py b/ai/slackbot-mcp-client/no-auth/tests/test_app.py index a9c824c..cdd43be 100644 --- a/ai/slackbot-mcp-client/no-auth/tests/test_app.py +++ b/ai/slackbot-mcp-client/no-auth/tests/test_app.py @@ -17,7 +17,7 @@ ) _mock_auth.start() -from src.app import app # noqa: E402 +from src.app import app SIGNING_SECRET = "test_signing_secret" diff --git a/ai/slackbot-mcp-client/rich-responses/mcp-apps/requirements.txt b/ai/slackbot-mcp-client/rich-responses/mcp-apps/requirements.txt index 13803da..95fdecc 100644 --- a/ai/slackbot-mcp-client/rich-responses/mcp-apps/requirements.txt +++ b/ai/slackbot-mcp-client/rich-responses/mcp-apps/requirements.txt @@ -2,7 +2,7 @@ httpx2==2.9.1 mcp==1.28.1 mypy==2.3.0 pytest==9.1.1 -ruff==0.15.22 +ruff==0.16.0 slack_bolt==1.30.0 slack_cli_hooks==0.3.0 slack_sdk==3.43.0 diff --git a/ai/slackbot-mcp-client/rich-responses/mcp-apps/tests/test_app.py b/ai/slackbot-mcp-client/rich-responses/mcp-apps/tests/test_app.py index 7210e8e..2bdd8ce 100644 --- a/ai/slackbot-mcp-client/rich-responses/mcp-apps/tests/test_app.py +++ b/ai/slackbot-mcp-client/rich-responses/mcp-apps/tests/test_app.py @@ -17,7 +17,7 @@ ) _mock_auth.start() -from src.app import app # noqa: E402 +from src.app import app SIGNING_SECRET = "test_signing_secret" diff --git a/ai/slackbot-mcp-client/slack-identity/requirements.txt b/ai/slackbot-mcp-client/slack-identity/requirements.txt index 13803da..95fdecc 100644 --- a/ai/slackbot-mcp-client/slack-identity/requirements.txt +++ b/ai/slackbot-mcp-client/slack-identity/requirements.txt @@ -2,7 +2,7 @@ httpx2==2.9.1 mcp==1.28.1 mypy==2.3.0 pytest==9.1.1 -ruff==0.15.22 +ruff==0.16.0 slack_bolt==1.30.0 slack_cli_hooks==0.3.0 slack_sdk==3.43.0 diff --git a/ai/slackbot-mcp-client/slack-identity/src/app.py b/ai/slackbot-mcp-client/slack-identity/src/app.py index a409e62..b2b190b 100644 --- a/ai/slackbot-mcp-client/slack-identity/src/app.py +++ b/ai/slackbot-mcp-client/slack-identity/src/app.py @@ -7,6 +7,7 @@ from slack_bolt import App from slack_bolt.adapter.starlette import SlackRequestHandler from slack_bolt.oauth.oauth_settings import OAuthSettings +from slack_sdk.errors import SlackApiError from slack_sdk.oauth.installation_store import FileInstallationStore from slack_sdk.oauth.state_store import FileOAuthStateStore from slack_sdk.signature import SignatureVerifier @@ -71,7 +72,7 @@ async def get_profile_card( profile = (result["user"] or {}).get("profile") if not profile: raise ValueError("No profile found") - except Exception: + except (SlackApiError, ValueError, KeyError): return CallToolResult( content=[ TextContent( diff --git a/ai/slackbot-mcp-client/slack-identity/tests/test_app.py b/ai/slackbot-mcp-client/slack-identity/tests/test_app.py index f2dcd56..6b2f08c 100644 --- a/ai/slackbot-mcp-client/slack-identity/tests/test_app.py +++ b/ai/slackbot-mcp-client/slack-identity/tests/test_app.py @@ -12,7 +12,7 @@ os.environ["SLACK_CLIENT_ID"] = "111.222" os.environ["SLACK_CLIENT_SECRET"] = "client_secret" -from src.app import app # noqa: E402 +from src.app import app SIGNING_SECRET = "test_signing_secret" TEAM_ID = "T0001"