refactoring, date range feature #11
| @@ -13,7 +13,7 @@ def get_days_of_month(months_back=0): | |||||||
|         current_month = current_day.month |         current_month = current_day.month | ||||||
|         months_back -= 1 |         months_back -= 1 | ||||||
|     while current_day.month == current_month: |     while current_day.month == current_month: | ||||||
|         days.append(str(current_day).split(' ')[0]) |         days.append(current_day) | ||||||
|         current_day += datetime.timedelta(days=1) |         current_day += datetime.timedelta(days=1) | ||||||
| 
 | 
 | ||||||
|     return days |     return days | ||||||
| @@ -48,3 +48,44 @@ def get_month_view(worklogs): | |||||||
|         month_view += ticket+'\tdate '+date+'\ttime '+timespent + '\n' |         month_view += ticket+'\tdate '+date+'\ttime '+timespent + '\n' | ||||||
| 
 | 
 | ||||||
|     return month_view |     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 | ||||||
							
								
								
									
										56
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								main.py
									
									
									
									
									
								
							| @@ -3,7 +3,7 @@ import json | |||||||
| import datetime | import datetime | ||||||
| from dotenv import load_dotenv | from dotenv import load_dotenv | ||||||
| from os import getenv | from os import getenv | ||||||
| from month_view import * | from dates import * | ||||||
| import sys | import sys | ||||||
|  |  | ||||||
| load_dotenv() | load_dotenv() | ||||||
| @@ -16,6 +16,8 @@ WEEKS_BACK = 0 | |||||||
| MONTH_VIEW = False | MONTH_VIEW = False | ||||||
| MONTHS_BACK = 0 | MONTHS_BACK = 0 | ||||||
| VERBOSE = True | VERBOSE = True | ||||||
|  | DATE_FROM = None | ||||||
|  | DATE_TO = None | ||||||
|  |  | ||||||
| def get_flag_value(flag): | def get_flag_value(flag): | ||||||
|     return flag.split("=")[1] |     return flag.split("=")[1] | ||||||
| @@ -31,6 +33,12 @@ for arg in sys.argv: | |||||||
|         USERNAMES[0] = get_flag_value(arg) |         USERNAMES[0] = get_flag_value(arg) | ||||||
|         if ',' in USERNAMES[0]: |         if ',' in USERNAMES[0]: | ||||||
|             USERNAMES = USERNAMES[0].split(',') |             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: | if "--verbose" in sys.argv: | ||||||
|     VERBOSE = True |     VERBOSE = True | ||||||
|  |  | ||||||
| @@ -93,45 +101,12 @@ def get_all_worklogs(issues): | |||||||
|     worklogs.sort(key=date_getter) |     worklogs.sort(key=date_getter) | ||||||
|     return worklogs |     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): | def get_worklogs_for_days(worklogs, days): | ||||||
|     timeperiod_tickets = [] |     timeperiod_tickets = [] | ||||||
|     for worklog in worklogs: |     for worklog in worklogs: | ||||||
|         worklog_date = datetime.datetime.strptime( |         worklog_date = datetime.datetime.strptime( | ||||||
|             worklog["date"].split('T')[0], '%Y-%m-%d').date() |             worklog["date"].split('T')[0], '%Y-%m-%d').date() | ||||||
|         if str(worklog_date) in days: |         if worklog_date in days: | ||||||
|             timeperiod_tickets.append(worklog) |             timeperiod_tickets.append(worklog) | ||||||
|     return timeperiod_tickets |     return timeperiod_tickets | ||||||
|  |  | ||||||
| @@ -150,11 +125,20 @@ def main(): | |||||||
|             month_view = get_month_view(worklogs) |             month_view = get_month_view(worklogs) | ||||||
|             print(month_view) |             print(month_view) | ||||||
|         return |         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: |     for username in USERNAMES: | ||||||
|         issues = get_issues(username) |         issues = get_issues(username) | ||||||
|         all_worklogs = get_all_worklogs(issues) |         all_worklogs = get_all_worklogs(issues) | ||||||
|         today = datetime.date.today() |         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) |         worklogs = get_worklogs_for_days(all_worklogs, days) | ||||||
|         omnimat_string = "" |         omnimat_string = "" | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user