From 5e80a8426b0389bb2753d85feaa65e871d92b28f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Kalinowski?= Date: Thu, 17 Oct 2024 18:02:41 +0200 Subject: [PATCH] fixing bugs with 2-different-month weeks --- main.py | 64 +++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 24 deletions(-) mode change 100644 => 100755 main.py diff --git a/main.py b/main.py old mode 100644 new mode 100755 index 933dadf..5201d87 --- a/main.py +++ b/main.py @@ -65,40 +65,41 @@ def get_worklogs(issues): worklogs.append(worklog) return worklogs -def get_days(day, weeks_back=WEEKS_BACK): +def get_days(day): if WEEKS_BACK: - day = day - datetime.timedelta(weeks=weeks_back) + day = day - datetime.timedelta(weeks=WEEKS_BACK) + year, weeknum, day_of_week = day.isocalendar() - # start at monday while day_of_week != 1: day = day - datetime.timedelta(days=1) - day_of_week -= 1 + year, weeknum, day_of_week = day.isocalendar() days = [] - # end at sunday + current_month = day.month while day_of_week <= 7: + if day.month != current_month: + break # Stop collecting if month changes days.append(str(day)) day = day + datetime.timedelta(days=1) day_of_week += 1 - return days + + days_second_part = [] + if day_of_week <= 7: # This condition means the loop ended because the month changed + next_month = day.month + while day_of_week <= 7 and day.month == next_month: + days_second_part.append(str(day)) + day = day + datetime.timedelta(days=1) + day_of_week += 1 + + return days, days_second_part def get_week_tickets(worklogs, days): this_week_tickets = [] for worklog in worklogs: worklog_date = datetime.datetime.strptime(worklog["date"].split('T')[0], '%Y-%m-%d').date() - current_month = get_max_month(days) - worklog_month = str(worklog_date).split('-')[1] - if str(worklog_date) in days and int(worklog_month) == current_month: + if str(worklog_date) in days: this_week_tickets.append(worklog) return this_week_tickets -def get_max_month(days): - max = 0 - for day in days: - month = int(day.split('-')[1]) - if month > max: - max = month - return max - def main(): print('The script starts its work...') @@ -106,22 +107,37 @@ def main(): issues = get_issues(username) worklogs = get_worklogs(issues) today = datetime.date.today() - days = get_days(today) - worklogs = get_week_tickets(worklogs, days) + days, days_second_part = get_days(today) + week_worklogs = get_week_tickets(worklogs, days) omnimat_string = "" - for worklog in worklogs: + for worklog in week_worklogs: if worklog["ticket_id"] not in omnimat_string: omnimat_string += worklog["ticket_id"] + '\n' + if days_second_part: + second_omnimat_string = "" + worklogs_second_part = get_week_tickets(worklogs, days_second_part) + for worklog in week_worklogs: + if worklog["ticket_id"] not in second_omnimat_string: + second_omnimat_string += worklog["ticket_id"] + '\n' + if VERBOSE: print('Issues of the user:') print(json.dumps(issues, indent=4)) - print(f"Worklogs for the current week:") - print(json.dumps(worklogs, indent=4)) - print("Days:") - print(days) + print(f"Worklogs for the week:") + print(json.dumps(week_worklogs, indent=4)) + print("Days:") + print(days) print(f"Omnimat string:") print(omnimat_string) + if days_second_part: + if VERBOSE: + print(f"Worklogs for the weeks 2nd part:") + print(json.dumps(worklogs_second_part, indent=4)) + print("Days:") + print(days_second_part) + print(f"Omnimat string:") + print(omnimat_string) if __name__ == '__main__': main() \ No newline at end of file