diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..62c8935 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea/ \ No newline at end of file diff --git a/cloud-chatops/requirements.txt b/cloud-chatops/requirements.txt index b51826d..59fd58e 100644 --- a/cloud-chatops/requirements.txt +++ b/cloud-chatops/requirements.txt @@ -3,6 +3,7 @@ schedule slack-bolt aiohttp requests +python-dateutil pytest pytest-cov pylint diff --git a/cloud-chatops/src/features/commands.py b/cloud-chatops/src/features/commands.py index 753cf91..7cca1cb 100644 --- a/cloud-chatops/src/features/commands.py +++ b/cloud-chatops/src/features/commands.py @@ -2,6 +2,7 @@ from typing import List from datetime import datetime, timedelta +from dateutil import parser as datetime_parser from slack_sdk import WebClient from slack_sdk.errors import SlackApiError from enum_states import PRsFoundState @@ -29,6 +30,7 @@ def __init__(self): self.prs = GetGitHubPRs(get_repos(), "stfc").run() self.channel = DEFAULT_CHANNEL self.thread_ts = None + self.user = None def run(self, channel: str, post_all: bool) -> None: """ @@ -37,6 +39,7 @@ def run(self, channel: str, post_all: bool) -> None: :param post_all: To post all PRs found or only ones authored by the user. """ self.channel = channel + self.user = channel self.post_reminder_message() self.post_thread_messages(self.prs, post_all) @@ -62,7 +65,9 @@ def post_thread_messages(self, prs: List[PrData], post_all: bool) -> None: prs_posted = PRsFoundState.NONE_FOUND for pr in prs: checked_pr = self.check_pr(pr) - prs_posted = self.filter_thread_message(checked_pr, post_all) + post_status = self.filter_thread_message(checked_pr, post_all) + if post_status == PRsFoundState.PRS_FOUND: + prs_posted = PRsFoundState.PRS_FOUND if prs_posted == PRsFoundState.NONE_FOUND: self.send_no_prs() @@ -77,11 +82,10 @@ def filter_thread_message(self, info: PrData, post_all: bool) -> PRsFoundState: :return: Returns an Enum state. """ pr_author = info.user - slack_member = self.channel if post_all: self.send_thread(info) return PRsFoundState.PRS_FOUND - if not post_all and pr_author == slack_member: + if not post_all and pr_author == self.user: self.send_thread(info) return PRsFoundState.PRS_FOUND return PRsFoundState.NONE_FOUND @@ -109,7 +113,7 @@ def check_pr(self, info: PrData) -> PrData: info.user = DEFAULT_AUTHOR else: info.user = self._github_to_slack_username(info.user) - opened_date = datetime.fromisoformat(info.created_at).replace(tzinfo=None) + opened_date = datetime_parser.parse(info.created_at).replace(tzinfo=None) datetime_now = datetime.now().replace(tzinfo=None) time_cutoff = datetime_now - timedelta(days=30 * 6) if opened_date < time_cutoff: