from dateutil import rrule import datetime import pickle # event = { # 'summary': 'Google I/O 2015', # 'location': '800 Howard St., San Francisco, CA 94103', # 'description': 'A chance to hear more about Google\'s developer products.', # 'start': { # 'dateTime': '2015-05-28T09:00:00-07:00', # 'timeZone': 'America/Los_Angeles', # }, # 'end': { # 'dateTime': '2015-05-28T17:00:00-07:00', # 'timeZone': 'America/Los_Angeles', # }, # 'recurrence': [ # 'RRULE:FREQ=DAILY;COUNT=2' # ], # 'attendees': [ # {'email': 'lpage@example.com'}, # {'email': 'sbrin@example.com'}, # ], # 'reminders': { # 'useDefault': False, # 'overrides': [ # {'method': 'email', 'minutes': 24 * 60}, # {'method': 'popup', 'minutes': 10}, # ], # }, # } def rrule_former(class_obj): days = class_obj.days start =datetime.datetime.combine(class_obj.date_range[0],class_obj.time_range[0]).astimezone() end =datetime.datetime.combine(class_obj.date_range[1],class_obj.time_range[1]).astimezone() days = list(map(lambda day: (day -1) % 7,days)) ret = rrule.rrule(freq=rrule.WEEKLY,dtstart=start,wkst=rrule.SU,until=end,byweekday=days) return ret def test(): #test now = datetime.datetime.now() from munch import Munch test_obj = Munch( days=[1,3,5], time_range=[ now.time(), (now+datetime.timedelta(seconds=50*60)).time() ], date_range=[ now.date(), (now+datetime.timedelta(days=20)).date() ], ) test_result = rrule_former(test_obj) return locals()