Skip to content

Commit 8efd599

Browse files
chore: fixes linting issues
1 parent d6beda2 commit 8efd599

File tree

21 files changed

+90
-68
lines changed

21 files changed

+90
-68
lines changed

packages/slackBotFunction/app/core/config.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
Sets up all the AWS and Slack connections we need.
44
"""
55

6-
from dataclasses import dataclass
7-
from functools import lru_cache
8-
import os
96
import json
7+
import os
108
import traceback
11-
from typing import Tuple
9+
from dataclasses import dataclass
10+
from functools import lru_cache
11+
from typing import tuple
12+
1213
import boto3
1314
from aws_lambda_powertools import Logger
1415
from aws_lambda_powertools.logging import utils
@@ -18,7 +19,7 @@
1819
# we use lru_cache for lots of configs so they are cached
1920

2021

21-
@lru_cache()
22+
@lru_cache
2223
def get_logger() -> Logger:
2324
powertools_logger = Logger(service="slackBotFunction")
2425
utils.copy_config_to_registered_loggers(source_logger=powertools_logger, ignore_log_level=True)
@@ -29,15 +30,15 @@ def get_logger() -> Logger:
2930
logger = get_logger()
3031

3132

32-
@lru_cache()
33+
@lru_cache
3334
def get_slack_bot_state_table() -> Table:
3435
# DynamoDB table for deduplication and session storage
3536
dynamodb = boto3.resource("dynamodb")
3637
return dynamodb.Table(os.environ["SLACK_BOT_STATE_TABLE"])
3738

3839

39-
@lru_cache()
40-
def get_ssm_params() -> Tuple[str, str]:
40+
@lru_cache
41+
def get_ssm_params() -> tuple[str, str]:
4142
bot_token_parameter = os.environ["SLACK_BOT_TOKEN_PARAMETER"]
4243
signing_secret_parameter = os.environ["SLACK_SIGNING_SECRET_PARAMETER"]
4344
try:
@@ -57,7 +58,7 @@ def get_ssm_params() -> Tuple[str, str]:
5758
raise ValueError("Missing required parameters: token or secret in Parameter Store values")
5859

5960
except json.JSONDecodeError as e:
60-
raise ValueError(f"Invalid JSON in Parameter Store: {e}")
61+
raise ValueError(f"Invalid JSON in Parameter Store: {e}") from e
6162
except Exception:
6263
logger.error("Configuration error", extra={"error": traceback.format_exc()})
6364
raise
@@ -71,7 +72,7 @@ def get_bot_token() -> str:
7172

7273

7374
@lru_cache
74-
def get_guardrail_config() -> Tuple[str, str, str, str, str]:
75+
def get_guardrail_config() -> tuple[str, str, str, str, str]:
7576
# Bedrock configuration from environment
7677
KNOWLEDGEBASE_ID = os.environ["KNOWLEDGEBASE_ID"]
7778
RAG_MODEL_ID = os.environ["RAG_MODEL_ID"]

packages/slackBotFunction/app/handler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
2. Processes async operations when invoked by itself to avoid timeouts
77
"""
88

9-
from slack_bolt.adapter.aws_lambda import SlackRequestHandler
109
from aws_lambda_powertools.utilities.typing import LambdaContext
10+
from slack_bolt.adapter.aws_lambda import SlackRequestHandler
1111

1212
from app.core.config import get_logger
1313
from app.services.app import get_app

packages/slackBotFunction/app/services/app.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
from functools import lru_cache
21
import logging
2+
from functools import lru_cache
33

4+
from aws_lambda_powertools import Logger
45
from slack_bolt import App
6+
57
from app.core.config import get_ssm_params
68
from app.slack.slack_handlers import setup_handlers
7-
from aws_lambda_powertools import Logger
89

910

1011
@lru_cache

packages/slackBotFunction/app/services/bedrock.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import json
22
from typing import Any
3+
34
import boto3
45
from mypy_boto3_bedrock_agent_runtime import AgentsforBedrockRuntimeClient
5-
from mypy_boto3_bedrock_runtime.client import BedrockRuntimeClient
66
from mypy_boto3_bedrock_agent_runtime.type_defs import RetrieveAndGenerateResponseTypeDef
7+
from mypy_boto3_bedrock_runtime.client import BedrockRuntimeClient
78

89
from app.core.config import get_guardrail_config, get_logger
910

10-
1111
logger = get_logger()
1212

1313

packages/slackBotFunction/app/services/dynamo.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
from typing import Any
2-
from app.core.config import get_logger, get_slack_bot_state_table
31
from time import time
2+
from typing import Any
3+
44
from mypy_boto3_dynamodb.type_defs import GetItemOutputTableTypeDef
55

6+
from app.core.config import get_logger, get_slack_bot_state_table
7+
68
logger = get_logger()
79

810

packages/slackBotFunction/app/services/prompt_loader.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import os
22
import traceback
3+
34
import boto3
45
from botocore.exceptions import ClientError
5-
from app.core.config import get_logger
6-
from app.services.exceptions import PromptNotFoundError, PromptLoadError
76
from mypy_boto3_bedrock_agent import AgentsforBedrockClient
87

8+
from app.core.config import get_logger
9+
from app.services.exceptions import PromptLoadError, PromptNotFoundError
10+
911
logger = get_logger()
1012

1113

@@ -66,14 +68,14 @@ def load_prompt(prompt_name: str, prompt_version: str = None) -> str:
6668
)
6769
raise PromptLoadError(
6870
f"Failed to load prompt '{prompt_name}' version '{prompt_version}': {error_code} - {error_message}"
69-
)
71+
) from e
7072

7173
except Exception as e:
7274
logger.error(
7375
"Unexpected error loading prompt",
7476
extra={"prompt_name": prompt_name, "error_type": type(e).__name__, "error": traceback.format_exc()},
7577
)
76-
raise PromptLoadError(f"Unexpected error loading prompt '{prompt_name}': {e}")
78+
raise PromptLoadError(f"Unexpected error loading prompt '{prompt_name}': {e}") from e
7779

7880

7981
def get_prompt_id_from_name(client: AgentsforBedrockClient, prompt_name: str) -> str | None:

packages/slackBotFunction/app/services/query_reformulator.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import os
22
import traceback
3+
34
import boto3
5+
from mypy_boto3_bedrock_runtime.client import BedrockRuntimeClient
46

57
from app.core.config import get_logger
68
from app.services.bedrock import invoke_model
7-
from .prompt_loader import load_prompt
9+
810
from .exceptions import ConfigurationError
9-
from mypy_boto3_bedrock_runtime.client import BedrockRuntimeClient
11+
from .prompt_loader import load_prompt
1012

1113
logger = get_logger()
1214

packages/slackBotFunction/app/services/slack.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import traceback
22

33
from slack_sdk import WebClient
4-
from app.core.config import bot_messages, get_logger
54

5+
from app.core.config import bot_messages, get_logger
66

77
logger = get_logger()
88

packages/slackBotFunction/app/slack/slack_events.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
Handles conversation memory, Bedrock queries, and responding back to Slack
44
"""
55

6+
import json
67
import re
78
import time
89
import traceback
9-
import json
10-
from typing import Any, Dict
10+
from typing import Any, dict
11+
1112
from botocore.exceptions import ClientError
1213
from slack_sdk import WebClient
14+
1315
from app.core.config import (
1416
bot_messages,
1517
constants,
@@ -43,7 +45,7 @@
4345

4446

4547
def cleanup_previous_unfeedback_qa(
46-
conversation_key: str, current_message_ts: str, session_data: Dict[str, Any]
48+
conversation_key: str, current_message_ts: str, session_data: dict[str, Any]
4749
) -> None:
4850
"""Delete previous Q&A pair if no feedback received using atomic operation"""
4951
try:
@@ -112,9 +114,9 @@ def _mark_qa_feedback_received(conversation_key: str, message_ts: str) -> None:
112114

113115
def _handle_session_management(
114116
conversation_key: str,
115-
session_data: Dict[str, Any],
117+
session_data: dict[str, Any],
116118
session_id: str,
117-
kb_response: Dict[str, Any],
119+
kb_response: dict[str, Any],
118120
user_id: str,
119121
channel: str,
120122
thread_ts: str,
@@ -184,7 +186,7 @@ def process_feedback_event(
184186
channel_id: str,
185187
thread_root: str,
186188
client: WebClient,
187-
event: Dict[str, Any],
189+
event: dict[str, Any],
188190
) -> None:
189191
feedback_text = message_text.split(":", 1)[1].strip() if ":" in message_text else ""
190192
try:
@@ -208,7 +210,7 @@ def process_feedback_event(
208210
post_error_message(channel=channel_id, thread_ts=thread_ts, client=client)
209211

210212

211-
def process_async_slack_action(body: Dict[str, Any], client: WebClient) -> None:
213+
def process_async_slack_action(body: dict[str, Any], client: WebClient) -> None:
212214
try:
213215
channel_id = body["channel"]["id"]
214216
action_id = body["actions"][0]["action_id"]
@@ -261,7 +263,7 @@ def process_async_slack_action(body: Dict[str, Any], client: WebClient) -> None:
261263
logger.error(f"Error handling feedback: {e}", extra={"error": traceback.format_exc()})
262264

263265

264-
def process_async_slack_event(event: Dict[str, Any], event_id: str, client: WebClient) -> None:
266+
def process_async_slack_event(event: dict[str, Any], event_id: str, client: WebClient) -> None:
265267
logger.debug("Processing async Slack event", extra={"event_id": event_id, "event": event})
266268
original_message_text = (event.get("text") or "").strip()
267269
message_text = strip_mentions(message_text=original_message_text)
@@ -293,7 +295,7 @@ def process_async_slack_event(event: Dict[str, Any], event_id: str, client: WebC
293295
process_slack_message(event=event, event_id=event_id, client=client)
294296

295297

296-
def process_slack_message(event: Dict[str, Any], event_id: str, client: WebClient) -> None:
298+
def process_slack_message(event: dict[str, Any], event_id: str, client: WebClient) -> None:
297299
"""
298300
Process Slack events asynchronously after initial acknowledgment
299301
@@ -369,7 +371,7 @@ def process_slack_message(event: Dict[str, Any], event_id: str, client: WebClien
369371
post_error_message(channel=channel, thread_ts=thread_ts, client=client)
370372

371373

372-
def process_pull_request_slack_event(slack_event_data: Dict[str, Any]) -> None:
374+
def process_pull_request_slack_event(slack_event_data: dict[str, Any]) -> None:
373375
# separate function to process pull requests so that we can ensure we store session information
374376
try:
375377
event_id = slack_event_data["event_id"]
@@ -384,7 +386,7 @@ def process_pull_request_slack_event(slack_event_data: Dict[str, Any]) -> None:
384386
logger.error("Error processing message", extra={"event_id": event_id, "error": traceback.format_exc()})
385387

386388

387-
def process_pull_request_slack_action(slack_body_data: Dict[str, Any]) -> None:
389+
def process_pull_request_slack_action(slack_body_data: dict[str, Any]) -> None:
388390
# separate function to process pull requests so that we can ensure we store session information
389391
try:
390392
token = get_bot_token()
@@ -395,7 +397,7 @@ def process_pull_request_slack_action(slack_body_data: Dict[str, Any]) -> None:
395397
logger.error("Error processing message", extra={"error": traceback.format_exc()})
396398

397399

398-
def log_query_stats(user_query: str, event: Dict[str, Any], channel: str, client: WebClient, thread_ts: str) -> None:
400+
def log_query_stats(user_query: str, event: dict[str, Any], channel: str, client: WebClient, thread_ts: str) -> None:
399401
query_length = len(user_query)
400402
start_time = float(event["event_ts"])
401403
end_time = time.time()
@@ -520,7 +522,7 @@ def get_conversation_session(conversation_key: str) -> str | None:
520522
return session_data.get("session_id") if session_data else None
521523

522524

523-
def get_conversation_session_data(conversation_key: str) -> Dict[str, Any]:
525+
def get_conversation_session_data(conversation_key: str) -> dict[str, Any]:
524526
"""
525527
Get full session data for this conversation
526528
"""

packages/slackBotFunction/app/slack/slack_handlers.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,17 @@
88
"""
99

1010
import json
11-
from functools import lru_cache
1211
import traceback
13-
from typing import Any, Dict
12+
from functools import lru_cache
13+
from typing import Any, dict
14+
1415
from slack_bolt import Ack, App
1516
from slack_sdk import WebClient
17+
1618
from app.core.config import (
1719
get_logger,
1820
)
21+
from app.slack.slack_events import process_async_slack_action, process_async_slack_event
1922
from app.utils.handler_utils import (
2023
conversation_key_and_root,
2124
extract_session_pull_request_id,
@@ -25,7 +28,6 @@
2528
respond_with_eyes,
2629
should_reply_to_message,
2730
)
28-
from app.slack.slack_events import process_async_slack_action, process_async_slack_event
2931

3032
logger = get_logger()
3133

@@ -49,7 +51,7 @@ def setup_handlers(app: App) -> None:
4951

5052

5153
# ack function for events where we respond with eyes
52-
def respond_to_events(event: Dict[str, Any], ack: Ack, client: WebClient):
54+
def respond_to_events(event: dict[str, Any], ack: Ack, client: WebClient):
5355
if should_reply_to_message(event):
5456
respond_with_eyes(event=event, client=client)
5557
logger.debug("Sending ack response")
@@ -62,7 +64,7 @@ def respond_to_action(ack: Ack):
6264
ack()
6365

6466

65-
def feedback_handler(body: Dict[str, Any], client: WebClient) -> None:
67+
def feedback_handler(body: dict[str, Any], client: WebClient) -> None:
6668
"""Handle feedback button clicks (both positive and negative)."""
6769
try:
6870
feedback_data = json.loads(body["actions"][0]["value"])
@@ -87,7 +89,7 @@ def feedback_handler(body: Dict[str, Any], client: WebClient) -> None:
8789
# ================================================================
8890

8991

90-
def unified_message_handler(client: WebClient, event: Dict[str, Any], body: Dict[str, Any]) -> None:
92+
def unified_message_handler(client: WebClient, event: dict[str, Any], body: dict[str, Any]) -> None:
9193
"""
9294
All messages get processed by this code
9395
If message starts with FEEDBACK_PREFIX then handle feedback message and return

0 commit comments

Comments
 (0)