chiark / gitweb /
handle weekly recurrence pattern
authorMatthew Vernon <mv3@sanger.ac.uk>
Fri, 19 Oct 2018 11:42:17 +0000 (12:42 +0100)
committerMatthew Vernon <mv3@sanger.ac.uk>
Fri, 19 Oct 2018 11:42:17 +0000 (12:42 +0100)
gooswapper.py

index 75edd3febb2c54bcd77979cfadd513b4268f169e..e18da2f470c0d569ee7426aa6f1fc077c8b82746 100644 (file)
@@ -136,6 +136,12 @@ def ex_event_changes(old,new):
                                                               len(deleted)))
     return added, deleted, changed
 
+#exchangelib gives us days in recurrence patterns as integers,
+#RFC5545 wants SU,MO,TU,WE,TH,FR,SA
+#it has a utility function to convert to Monday, Tuesday, ...
+def rr_daystr_from_int(i):
+    return exchangelib.recurrence._weekday_to_str(i).upper()[:2]
+
 def rrule_from_ex(event,gcal_tz):
     if event.type != "RecurringMaster":
         logger.error("Cannot make recurrence from not-recurring event")
@@ -146,6 +152,12 @@ def rrule_from_ex(event,gcal_tz):
     if isinstance(event.recurrence.pattern,
                   exchangelib.recurrence.DailyPattern):
         rr = "RRULE:FREQ=DAILY;INTERVAL=%d" % event.recurrence.pattern.interval
+    elif isinstance(event.recurrence.pattern,
+                    exchangelib.recurrence.WeeklyPattern):
+        rr = "RRULE:FREQ=WEEKLY;INTERVAL=%d;BYDAY=%s;WKST=%s" % \
+                          (event.recurrence.pattern.interval,
+                           ",".join([rr_daystr_from_int(x) for x in event.recurrence.pattern.weekdays]),
+                           rr_daystr_from_int(event.recurrence.pattern.first_day_of_week) )
     else:
         logger.error("Recurrence %s not supported" % event.recurrence)
         return None