You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.6 KiB

7 years ago
  1. from dateutil import rrule
  2. import datetime
  3. import pickle
  4. # event = {
  5. # 'summary': 'Google I/O 2015',
  6. # 'location': '800 Howard St., San Francisco, CA 94103',
  7. # 'description': 'A chance to hear more about Google\'s developer products.',
  8. # 'start': {
  9. # 'dateTime': '2015-05-28T09:00:00-07:00',
  10. # 'timeZone': 'America/Los_Angeles',
  11. # },
  12. # 'end': {
  13. # 'dateTime': '2015-05-28T17:00:00-07:00',
  14. # 'timeZone': 'America/Los_Angeles',
  15. # },
  16. # 'recurrence': [
  17. # 'RRULE:FREQ=DAILY;COUNT=2'
  18. # ],
  19. # 'attendees': [
  20. # {'email': 'lpage@example.com'},
  21. # {'email': 'sbrin@example.com'},
  22. # ],
  23. # 'reminders': {
  24. # 'useDefault': False,
  25. # 'overrides': [
  26. # {'method': 'email', 'minutes': 24 * 60},
  27. # {'method': 'popup', 'minutes': 10},
  28. # ],
  29. # },
  30. # }
  31. def rrule_former(class_obj):
  32. days = class_obj.days
  33. start =datetime.datetime.combine(class_obj.date_range[0],class_obj.time_range[0]).astimezone()
  34. end =datetime.datetime.combine(class_obj.date_range[1],class_obj.time_range[1]).astimezone()
  35. days = list(map(lambda day: (day -1) % 7,days))
  36. ret = rrule.rrule(freq=rrule.WEEKLY,dtstart=start,wkst=rrule.SU,until=end,byweekday=days)
  37. return ret
  38. def test():
  39. #test
  40. now = datetime.datetime.now()
  41. from munch import Munch
  42. test_obj = Munch(
  43. days=[1,3,5],
  44. time_range=[
  45. now.time(),
  46. (now+datetime.timedelta(seconds=50*60)).time()
  47. ],
  48. date_range=[
  49. now.date(),
  50. (now+datetime.timedelta(days=20)).date()
  51. ],
  52. )
  53. test_result = rrule_former(test_obj)
  54. return locals()