import datetime def get_days_of_month(months_back=0): # set the current day to the first day of the current month # and loop for the days until the month changes current_day = datetime.datetime.today().replace(day=1) current_month = current_day.month days = [] while months_back: current_day = datetime.datetime.today().replace(day=1) current_day -= datetime.timedelta(days=1) current_day = current_day.replace(day=1) current_month = current_day.month months_back -= 1 while current_day.month == current_month: days.append(current_day) current_day += datetime.timedelta(days=1) return days def get_month_view(worklogs): week = datetime.datetime.strptime( worklogs[0]["date"][0:10], '%Y-%m-%d').date() week_number_start = week to_monday = week_number_start.weekday() week_number_start -= datetime.timedelta(days=to_monday) week_number_end = week_number_start+datetime.timedelta(days=6) week_iso = week.isocalendar().week month_view = worklogs[0]["author"] for worklog in worklogs: ticket = worklog["ticket_id"] date = worklog["date"][0:10] timespent = worklog["time_spent"] week_day = datetime.datetime.strptime(date, '%Y-%m-%d').date() if (week_day.isocalendar().week == week_iso): month_view += "\nWeek " + str(week_iso)+"\tfrom "+week_number_start.__str__() + \ "\tto "+week_number_end.__str__()+"\n\n" week_iso += 1 week_number_start += datetime.timedelta(days=7) week_number_end += datetime.timedelta(days=7) 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