From a7ad2333b18b74ef653b9deb264bb8a286893455 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Kalinowski?= Date: Thu, 24 Oct 2024 09:16:33 +0200 Subject: [PATCH] refactoring, date range feature --- month_view.py => dates.py | 43 +++++++++++++++++++++++++++++- main.py | 56 ++++++++++++++------------------------- 2 files changed, 62 insertions(+), 37 deletions(-) rename month_view.py => dates.py (56%) diff --git a/month_view.py b/dates.py similarity index 56% rename from month_view.py rename to dates.py index 4d93773..092ce6c 100755 --- a/month_view.py +++ b/dates.py @@ -13,7 +13,7 @@ def get_days_of_month(months_back=0): current_month = current_day.month months_back -= 1 while current_day.month == current_month: - days.append(str(current_day).split(' ')[0]) + days.append(current_day) current_day += datetime.timedelta(days=1) return days @@ -48,3 +48,44 @@ def get_month_view(worklogs): month_view += ticket+'\tdate '+date+'\ttime '+timespent + '\n' return month_view + + +def date_getter(worklog): + return worklog['date'] + + +def get_days(day, weeks_back=False): + if weeks_back: + day = day - datetime.timedelta(weeks=weeks_back) + + year, weeknum, day_of_week = day.isocalendar() + while day_of_week != 1: + day = day - datetime.timedelta(days=1) + year, weeknum, day_of_week = day.isocalendar() + days = [] + current_month = day.month + while day_of_week <= 7: + if day.month != current_month: + break # Stop collecting if month changes + days.append(day) + day = day + datetime.timedelta(days=1) + day_of_week += 1 + + 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(day) + day = day + datetime.timedelta(days=1) + day_of_week += 1 + + return days, days_second_part + +def get_days_for_range(date_from, date_to): + delta = datetime.timedelta(days=1) + days = [] + while date_from <= date_to: + days.append(date_from) + date_from += delta + + return days \ No newline at end of file diff --git a/main.py b/main.py index 74d24ac..353fb25 100755 --- a/main.py +++ b/main.py @@ -3,7 +3,7 @@ import json import datetime from dotenv import load_dotenv from os import getenv -from month_view import * +from dates import * import sys load_dotenv() @@ -16,6 +16,8 @@ WEEKS_BACK = 0 MONTH_VIEW = False MONTHS_BACK = 0 VERBOSE = True +DATE_FROM = None +DATE_TO = None def get_flag_value(flag): return flag.split("=")[1] @@ -31,6 +33,12 @@ for arg in sys.argv: USERNAMES[0] = get_flag_value(arg) if ',' in USERNAMES[0]: USERNAMES = USERNAMES[0].split(',') + if "--date-from" in arg: + DATE_FROM = datetime.datetime.strptime( + get_flag_value(arg), '%Y-%m-%d').date() + if "--date-to" in arg: + DATE_TO = datetime.datetime.strptime( + get_flag_value(arg), '%Y-%m-%d').date() if "--verbose" in sys.argv: VERBOSE = True @@ -93,45 +101,12 @@ def get_all_worklogs(issues): worklogs.sort(key=date_getter) return worklogs - -def date_getter(worklog): - return worklog['date'] - - -def get_days(day): - if WEEKS_BACK: - day = day - datetime.timedelta(weeks=WEEKS_BACK) - - year, weeknum, day_of_week = day.isocalendar() - while day_of_week != 1: - day = day - datetime.timedelta(days=1) - year, weeknum, day_of_week = day.isocalendar() - days = [] - 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 - - 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_worklogs_for_days(worklogs, days): timeperiod_tickets = [] for worklog in worklogs: worklog_date = datetime.datetime.strptime( worklog["date"].split('T')[0], '%Y-%m-%d').date() - if str(worklog_date) in days: + if worklog_date in days: timeperiod_tickets.append(worklog) return timeperiod_tickets @@ -150,11 +125,20 @@ def main(): month_view = get_month_view(worklogs) print(month_view) return + if DATE_FROM and DATE_TO: + for username in USERNAMES: + issues = get_issues(username) + all_worklogs = get_all_worklogs(issues) + days = get_days_for_range(DATE_FROM, DATE_TO) + print(all_worklogs) + worklogs = get_worklogs_for_days(all_worklogs, days) + print(worklogs) + return for username in USERNAMES: issues = get_issues(username) all_worklogs = get_all_worklogs(issues) today = datetime.date.today() - days, days_second_part = get_days(today) + days, days_second_part = get_days(today, WEEKS_BACK) worklogs = get_worklogs_for_days(all_worklogs, days) omnimat_string = ""