Merge pull request 'refactoring, date range feature' (#11) from development into main

Reviewed-on: #11
This commit is contained in:
2024-10-24 09:17:22 +02:00
2 changed files with 62 additions and 37 deletions

View File

@@ -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

56
main.py
View File

@@ -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 = ""