from datetime import date, timedelta,datetime import calendar import sys def read_date_from_argument(value, default_value): if value is not None: if type(value) is list: value = value[0] return datetime.strptime(value, "%Y-%m-%d").date() return default_value def get_time(args, def_start=date.today(), def_end=date.today()): if (args.start is not None or args.end is not None) and (args.date is not None or args.week is True or args.month is True): print "Either specify period options or reference options" sys.exit(1) if args.start is not None or args.end is not None: return read_date_from_argument(args.start, def_start),read_date_from_argument(args.end, def_end) if args.date is not None or args.week is True or args.month is True: base_date = read_date_from_argument(args.date, def_start) if args.week is True: return get_week_dates(base_date) if args.month is True: return get_month_dates(base_date) return base_date, base_date return def_start, def_end def get_month_dates(base_date): last_day_of_the_month = calendar.monthrange(base_date.year, base_date.month)[1] start_date = datetime.strptime(str(base_date.year) + "-" + str(base_date.month) + "-1", "%Y-%m-%d").date() end_date = datetime.strptime(str(base_date.year) + "-" + str(base_date.month) + "-" + str(last_day_of_the_month), "%Y-%m-%d").date() if start_date > date.today(): start_date = date.today() if end_date > date.today(): end_date = date.today() return start_date, end_date def get_week_dates(base_date): monday = base_date - timedelta(days=base_date.isoweekday() - 1) week_dates = [monday + timedelta(days=i) for i in range(7)] start_date = week_dates[0] end_date = week_dates[6] if start_date > date.today(): start_date = date.today() if end_date > date.today(): end_date = date.today() return start_date, end_date def add_time_options(parser): group1 = parser.add_argument_group('period', 'Period Selection') group1.add_argument('--start', nargs=1, help='Start Date') group1.add_argument('--end', nargs=1, help='End Date') group2 = parser.add_argument_group('reference', 'Reference date selection') group2.add_argument('--date', nargs=1, help='Reference date/today') group2.add_argument('--month', action='store_true', help='Display the month of the reference') group2.add_argument('--week', action='store_true', help='Display the week of the reference')