roboluke-tasks/app/commands/submit_task.py

214 lines
7.0 KiB
Python
Raw Normal View History

"""Submit task command."""
2023-04-05 21:57:31 +02:00
import logging
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,
)
2023-04-05 21:57:31 +02:00
from webexteamssdk.models.cards.actions import Submit
from app.utils.config import config
2023-05-08 19:16:43 +02:00
from app.utils.n8n import get_tasks, submit_task
2023-04-05 21:57:31 +02:00
log: logging.Logger = logging.getLogger(__name__)
if config.sentry_enabled:
import sentry_sdk
2023-04-05 21:57:31 +02:00
class SubmitTaskCommand(Command):
"""Submit task command."""
2023-04-05 21:57:31 +02:00
def __init__(self) -> None:
"""Submit task command."""
2023-04-05 21:57:31 +02:00
super().__init__(
command_keyword="submit_feedback_dstgmyn",
help_message="Submit Task",
2023-04-20 20:37:01 +02:00
chained_commands=[SubmitTaskCallback(), MyTasksCallback()],
2023-04-05 21:57:31 +02:00
delete_previous_message=True,
)
self.sender: str = ""
def pre_execute(self, message, attachment_actions, activity) -> None:
"""Pre-execute method."""
2023-04-05 21:57:31 +02:00
self.sender = activity.get("actor").get("id")
def execute(self, message, attachment_actions, activity) -> Response:
"""Execute method."""
2023-04-05 21:57:31 +02:00
card_body: list = [
ColumnSet(
columns=[
Column(
items=[
TextBlock(
"Submit Task",
weight=FontWeight.BOLDER,
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.",
2023-04-05 21:57:31 +02:00
wrap=True,
isSubtle=True,
),
],
width=2,
)
]
),
ColumnSet(
columns=[
Column(
width=2,
items=[
Text(
id="issue_title", placeholder="Summary", maxLength=100
),
2023-04-05 21:57:31 +02:00
Text(
id="issue_description",
placeholder="Description",
maxLength=1000,
isMultiline=True,
),
Date(id="completion_date", placeholder="Completion Date"),
],
),
]
),
]
if self.sender in config.admin_emails:
card_body.append(
ColumnSet(
columns=[
Column(
width=1,
items=[
Text(
id="issue_requester",
placeholder="Requester Email "
+ "(leave blank to submit for yourself)",
2023-04-05 21:57:31 +02:00
maxLength=100,
),
],
),
]
),
)
card: AdaptiveCard = AdaptiveCard(
body=card_body,
actions=[
Submit(
title="Submit",
data={
"callback_keyword": "submit_task_callback_rbamzfyx",
"sender": self.sender,
},
),
2023-04-20 20:37:01 +02:00
Submit(
title="My Submitted Tasks",
2023-04-20 20:37:01 +02:00
data={
"callback_keyword": "my_tasks_callback_rbamzfyx",
"sender": self.sender,
},
),
2023-04-05 21:57:31 +02:00
Submit(title="Cancel", data={"command_keyword": "exit"}),
],
)
_result = response_from_adaptive_card(card)
if not config.sentry_enabled:
return _result
with sentry_sdk.start_transaction(name="submit_task_command"):
return _result
2023-04-05 21:57:31 +02:00
class SubmitTaskCallback(Command):
"""Submit task callback."""
2023-04-05 21:57:31 +02:00
def __init__(self) -> None:
"""Submit task callback."""
2023-04-05 21:57:31 +02:00
super().__init__(
card_callback_keyword="submit_task_callback_rbamzfyx",
delete_previous_message=True,
2023-04-05 21:57:31 +02:00
)
self.msg: str = ""
def pre_execute(self, message, attachment_actions, activity) -> None:
"""Pre-execute method."""
2023-04-05 21:57:31 +02:00
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
)
2023-04-05 21:57:31 +02:00
if not issue_title or not issue_description or not completion_date:
self.msg = "Please complete all fields."
return
result: bool = submit_task(
requestor=issue_requester,
summary=issue_title,
description=issue_description,
completion_date=completion_date,
)
self.msg = (
"Submitting your task..."
if result
else "Failed to submit task. Please try again."
2023-04-05 21:57:31 +02:00
)
def execute(self, message, attachment_actions, activity) -> str:
"""Execute method."""
if not config.sentry_enabled:
return self.msg
with sentry_sdk.start_transaction(name="submit_task_callback"):
return self.msg
2023-04-20 20:37:01 +02:00
class MyTasksCallback(Command):
"""My tasks callback."""
2023-04-20 20:37:01 +02:00
def __init__(self) -> None:
"""My tasks callback."""
2023-04-20 20:37:01 +02:00
super().__init__(
card_callback_keyword="my_tasks_callback_rbamzfyx",
delete_previous_message=True,
2023-04-20 20:37:01 +02:00
)
self.msg: str = ""
def pre_execute(self, message, attachment_actions, activity) -> str:
"""Pre-execute method."""
_msg: str = "Getting your tasks..."
if not config.sentry_enabled:
return _msg
with sentry_sdk.start_transaction(name="my_tasks_preexec"):
return _msg
2023-04-20 20:37:01 +02:00
def execute(self, message, attachment_actions, activity) -> str | None:
"""Execute method."""
2023-04-20 20:37:01 +02:00
sender: str = attachment_actions.inputs.get("sender")
result: bool = get_tasks(requestor=sender)
_msg: str = "Failed to get tasks. Please try again."
if not config.sentry_enabled:
if not result:
return _msg
return None
with sentry_sdk.start_transaction(name="my_tasks_exec"):
if not result:
return _msg
return None