From 8105fd0d729e0b0bb70b181d4223b19f0cb3b950 Mon Sep 17 00:00:00 2001 From: Luke Tainton Date: Thu, 21 Nov 2024 21:57:39 +0000 Subject: [PATCH] chore: fix pylint issues --- app/commands/exit.py | 11 ++++--- app/commands/submit_task.py | 57 ++++++++++++++++++++++++------------- app/main.py | 6 ++-- app/utils/datetime.py | 2 +- app/utils/n8n.py | 2 ++ tests/test_config.py | 31 +++++++++++--------- tests/test_datetime.py | 2 ++ 7 files changed, 70 insertions(+), 41 deletions(-) diff --git a/app/commands/exit.py b/app/commands/exit.py index 2bc52cd..8d28cee 100644 --- a/app/commands/exit.py +++ b/app/commands/exit.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +"""Exit command.""" import logging @@ -8,7 +8,10 @@ log: logging.Logger = logging.getLogger(__name__) class ExitCommand(Command): + """Exit command class.""" + def __init__(self) -> None: + """Exit command class.""" super().__init__( command_keyword="exit", help_message="Exit", @@ -17,10 +20,10 @@ class ExitCommand(Command): self.sender: str = "" def pre_execute(self, message, attachment_actions, activity) -> None: - pass + """Pre-execute method.""" def execute(self, message, attachment_actions, activity) -> None: - pass + """Execute method.""" def post_execute(self, message, attachment_actions, activity) -> None: - pass + """Post-execute method.""" diff --git a/app/commands/submit_task.py b/app/commands/submit_task.py index 70ef360..89c619d 100644 --- a/app/commands/submit_task.py +++ b/app/commands/submit_task.py @@ -1,20 +1,12 @@ -#!/usr/bin/env python3 +"""Submit task command.""" import logging -import sentry_sdk +import sentry_sdk from webex_bot.models.command import Command from webex_bot.models.response import Response, response_from_adaptive_card -from webexteamssdk.models.cards import ( - AdaptiveCard, - Column, - ColumnSet, - Date, - FontSize, - FontWeight, - Text, - TextBlock, -) +from webexteamssdk.models.cards import (AdaptiveCard, Column, ColumnSet, Date, + FontSize, FontWeight, Text, TextBlock) from webexteamssdk.models.cards.actions import Submit from app.utils.config import config @@ -24,7 +16,10 @@ log: logging.Logger = logging.getLogger(__name__) class SubmitTaskCommand(Command): + """Submit task command.""" + def __init__(self) -> None: + """Submit task command.""" super().__init__( command_keyword="submit_feedback_dstgmyn", help_message="Submit Task", @@ -34,9 +29,11 @@ class SubmitTaskCommand(Command): self.sender: str = "" def pre_execute(self, message, attachment_actions, activity) -> None: + """Pre-execute method.""" self.sender = activity.get("actor").get("id") def execute(self, message, attachment_actions, activity) -> Response: + """Execute method.""" card_body: list = [ ColumnSet( columns=[ @@ -48,7 +45,8 @@ class SubmitTaskCommand(Command): size=FontSize.MEDIUM, ), TextBlock( - f"Add a task to {config.admin_first_name}'s To Do list. All fields are required. Please don't use special characters.", + f"Add a task to {config.admin_first_name}'s To Do list. " + + "All fields are required. Please don't use special characters.", wrap=True, isSubtle=True, ), @@ -62,7 +60,9 @@ class SubmitTaskCommand(Command): Column( width=2, items=[ - Text(id="issue_title", placeholder="Summary", maxLength=100), + Text( + id="issue_title", placeholder="Summary", maxLength=100 + ), Text( id="issue_description", placeholder="Description", @@ -85,7 +85,8 @@ class SubmitTaskCommand(Command): items=[ Text( id="issue_requester", - placeholder="Requester Email (leave blank to submit for yourself)", + placeholder="Requester Email " + + "(leave blank to submit for yourself)", maxLength=100, ), ], @@ -119,19 +120,26 @@ class SubmitTaskCommand(Command): class SubmitTaskCallback(Command): + """Submit task callback.""" + def __init__(self) -> None: + """Submit task callback.""" super().__init__( - card_callback_keyword="submit_task_callback_rbamzfyx", delete_previous_message=True + card_callback_keyword="submit_task_callback_rbamzfyx", + delete_previous_message=True, ) self.msg: str = "" def pre_execute(self, message, attachment_actions, activity) -> None: + """Pre-execute method.""" issue_title: str = attachment_actions.inputs.get("issue_title") issue_description: str = attachment_actions.inputs.get("issue_description") completion_date: str = attachment_actions.inputs.get("completion_date") sender: str = attachment_actions.inputs.get("sender") - issue_requester: str = attachment_actions.inputs.get("issue_requester") or sender + issue_requester: str = ( + attachment_actions.inputs.get("issue_requester") or sender + ) if not issue_title or not issue_description or not completion_date: self.msg = "Please complete all fields." @@ -145,29 +153,38 @@ class SubmitTaskCallback(Command): ) self.msg = ( - "Submitting your task..." if result else "Failed to submit task. Please try again." + "Submitting your task..." + if result + else "Failed to submit task. Please try again." ) def execute(self, message, attachment_actions, activity) -> str: + """Execute method.""" with sentry_sdk.start_transaction(name="submit_task_callback"): return self.msg class MyTasksCallback(Command): + """My tasks callback.""" + def __init__(self) -> None: + """My tasks callback.""" super().__init__( - card_callback_keyword="my_tasks_callback_rbamzfyx", delete_previous_message=True + card_callback_keyword="my_tasks_callback_rbamzfyx", + delete_previous_message=True, ) self.msg: str = "" def pre_execute(self, message, attachment_actions, activity) -> str: + """Pre-execute method.""" with sentry_sdk.start_transaction(name="my_tasks_preexec"): return "Getting your tasks..." def execute(self, message, attachment_actions, activity) -> str | None: + """Execute method.""" sender: str = attachment_actions.inputs.get("sender") result: bool = get_tasks(requestor=sender) with sentry_sdk.start_transaction(name="my_tasks_exec"): if not result: return "Failed to get tasks. Please try again." - return + return None diff --git a/app/main.py b/app/main.py index c222c89..0e94a6f 100644 --- a/app/main.py +++ b/app/main.py @@ -1,4 +1,6 @@ -#!/usr/bin/env python3 +"""Main module.""" + +import sys import sentry_sdk from sentry_sdk.integrations.stdlib import StdlibIntegration @@ -43,4 +45,4 @@ if __name__ == "__main__": bot.run() except KeyboardInterrupt: print("Shutting down bot...") - exit() + sys.exit(0) diff --git a/app/utils/datetime.py b/app/utils/datetime.py index f645d3b..8c86270 100644 --- a/app/utils/datetime.py +++ b/app/utils/datetime.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 +"""Provides functions for converting timestamps to dates.""" from datetime import datetime from zoneinfo import ZoneInfo diff --git a/app/utils/n8n.py b/app/utils/n8n.py index 6940174..2b59057 100644 --- a/app/utils/n8n.py +++ b/app/utils/n8n.py @@ -1,3 +1,5 @@ +"""N8N utils module.""" + import requests import sentry_sdk diff --git a/tests/test_config.py b/tests/test_config.py index 070f734..63622c6 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -6,7 +6,7 @@ import os -vars: dict = { +config_vars: dict = { "APP_VERSION": "dev", "BOT_NAME": "TestBot", "WEBEX_API_KEY": "testing", @@ -21,26 +21,29 @@ vars: dict = { } -for var, value in vars.items(): - os.environ[var] = value +for config_var, value in config_vars.items(): + os.environ[config_var] = value # needs to be imported AFTER environment variables are set from app.utils.config import config # pragma: no cover def test_config() -> None: - assert config.admin_emails == vars["ADMIN_EMAIL"].split(",") - assert config.admin_first_name == vars["ADMIN_FIRST_NAME"] - assert config.approved_domains == vars["APPROVED_DOMAINS"].split(",") - assert config.approved_rooms == vars["APPROVED_ROOMS"].split(",") - assert config.approved_users == vars["APPROVED_USERS"].split(",") - assert config.bot_name == vars["BOT_NAME"] - assert config.n8n_webhook_url == vars["N8N_WEBHOOK_URL"] - assert config.sentry_enabled == bool(vars["SENTRY_ENABLED"].upper() == "TRUE") - assert config.version == vars["APP_VERSION"] - assert config.webex_token == vars["WEBEX_API_KEY"] + """Test config module.""" + assert config.admin_emails == config_vars["ADMIN_EMAIL"].split(",") + assert config.admin_first_name == config_vars["ADMIN_FIRST_NAME"] + assert config.approved_domains == config_vars["APPROVED_DOMAINS"].split(",") + assert config.approved_rooms == config_vars["APPROVED_ROOMS"].split(",") + assert config.approved_users == config_vars["APPROVED_USERS"].split(",") + assert config.bot_name == config_vars["BOT_NAME"] + assert config.n8n_webhook_url == config_vars["N8N_WEBHOOK_URL"] + assert config.sentry_enabled == bool( + config_vars["SENTRY_ENABLED"].upper() == "TRUE" + ) + assert config.version == config_vars["APP_VERSION"] + assert config.webex_token == config_vars["WEBEX_API_KEY"] if config.sentry_enabled: - assert config.sentry_dsn == vars["SENTRY_DSN"] + assert config.sentry_dsn == config_vars["SENTRY_DSN"] else: assert config.sentry_dsn == "" diff --git a/tests/test_datetime.py b/tests/test_datetime.py index 263cc3d..8da21d1 100644 --- a/tests/test_datetime.py +++ b/tests/test_datetime.py @@ -8,12 +8,14 @@ from app.utils.datetime import timestamp_to_date # pragma: no cover def test_correct() -> None: + """Test timestamp_to_date() with a correct timestamp.""" timestamp: int = 1680722218 result: str = timestamp_to_date(timestamp) assert result == "2023-04-05" def test_invalid() -> None: + """Test timestamp_to_date() with an invalid timestamp.""" timestamp: str = "hello" with pytest.raises(TypeError) as excinfo: timestamp_to_date(timestamp)