| 921 | | e = doc.createElement('Summary') |
| 922 | | appendXMLChild(doc, e, 'Content', self.name) |
| 923 | | top.appendChild(e) |
| 924 | | |
| 925 | | e = doc.createElement('DateStarted') |
| 926 | | if isinstance(self.eventdt, datetime): |
| 927 | | dtstart = self.eventdt.strftime(VCAL_DATETIME) |
| 928 | | else: |
| 929 | | dtstart = self.eventdt.strftime(VCAL_DATE) |
| 930 | | e.setAttribute('Value', 'DATE') |
| 931 | | appendXMLChild(doc, e, 'Content', dtstart) |
| 932 | | top.appendChild(e) |
| 933 | | |
| 934 | | e = doc.createElement('DateEnd') |
| 935 | | endtime = self.eventdt + self.duration |
| 936 | | if isinstance(self.eventdt, datetime): |
| 937 | | dtend = endtime.strftime(VCAL_DATETIME) |
| 938 | | else: |
| 939 | | dtend = endtime.strftime(VCAL_DATE) |
| 940 | | e.setAttribute('Value', 'DATE') |
| 941 | | appendXMLChild(doc, e, 'Content', dtend) |
| 942 | | top.appendChild(e) |
| 943 | | |
| | 930 | |
| | 931 | e = doc.createElement('DateEnd') |
| | 932 | endtime = self.eventdt + self.duration |
| | 933 | if isinstance(self.eventdt, datetime): |
| | 934 | dtend = endtime.strftime(VCAL_DATETIME) |
| | 935 | else: |
| | 936 | dtend = endtime.strftime(VCAL_DATE) |
| | 937 | e.setAttribute('Value', 'DATE') |
| | 938 | appendXMLChild(doc, e, 'Content', dtend) |
| | 939 | top.appendChild(e) |
| | 940 | |
| | 941 | e = doc.createElement('DateStarted') |
| | 942 | if isinstance(self.eventdt, datetime): |
| | 943 | dtstart = self.eventdt.strftime(VCAL_DATETIME) |
| | 944 | else: |
| | 945 | dtstart = self.eventdt.strftime(VCAL_DATE) |
| | 946 | e.setAttribute('Value', 'DATE') |
| | 947 | appendXMLChild(doc, e, 'Content', dtstart) |
| | 948 | top.appendChild(e) |
| | 949 | |
| | 950 | if self.exceptions != []: |
| | 951 | assert(self.repeat_type != MOTO_REPEAT_NONE) |
| | 952 | |
| | 953 | # create an rrule object for this recurrence |
| | 954 | if self.repeat_type == MOTO_REPEAT_MONTHLY_DATE: |
| | 955 | rrule = dateutil.rrule.rrule(dateutil.rrule.MONTHLY, |
| | 956 | bymonthday=self.eventdt.day, |
| | 957 | dtstart=self.eventdt) |
| | 958 | elif self.repeat_type == MOTO_REPEAT_MONTHLY_DAY: |
| | 959 | weekday = dateutil.rrule.weekdays[self.eventdt.weekday()] |
| | 960 | # weeknum is calculated above in the XML generation |
| | 961 | rrule = dateutil.rrule.rrule(dateutil.rrule.MONTHLY, |
| | 962 | byweekday=weekday(+weeknum), |
| | 963 | dtstart=self.eventdt) |
| | 964 | else: |
| | 965 | if self.repeat_type == MOTO_REPEAT_DAILY: |
| | 966 | freq = dateutil.rrule.DAILY |
| | 967 | elif self.repeat_type == MOTO_REPEAT_WEEKLY: |
| | 968 | freq = dateutil.rrule.WEEKLY |
| | 969 | elif self.repeat_type == MOTO_REPEAT_YEARLY: |
| | 970 | freq = dateutil.rrule.YEARLY |
| | 971 | rrule = dateutil.rrule.rrule(freq, dtstart=self.eventdt) |
| | 972 | |
| | 973 | # work out which dates the exceptions correspond to and |
| | 974 | # generate ExceptionDate nodes for them |
| | 975 | e = doc.createElement('ExceptionDateTime') |
| | 976 | e.setAttribute('Value', 'DATE') |
| | 977 | for exnum in self.exceptions: |
| | 978 | appendXMLChild(doc, e, 'Content', format_time(rrule[exnum], VCAL_DATE)) |
| | 979 | if e.hasChildNodes(): |
| | 980 | top.appendChild(e) |
| 979 | | if self.exceptions != []: |
| 980 | | assert(self.repeat_type != MOTO_REPEAT_NONE) |
| 981 | | |
| 982 | | # create an rrule object for this recurrence |
| 983 | | if self.repeat_type == MOTO_REPEAT_MONTHLY_DATE: |
| 984 | | rrule = dateutil.rrule.rrule(dateutil.rrule.MONTHLY, |
| 985 | | bymonthday=self.eventdt.day, |
| 986 | | dtstart=self.eventdt) |
| 987 | | elif self.repeat_type == MOTO_REPEAT_MONTHLY_DAY: |
| 988 | | weekday = dateutil.rrule.weekdays[self.eventdt.weekday()] |
| 989 | | # weeknum is calculated above in the XML generation |
| 990 | | rrule = dateutil.rrule.rrule(dateutil.rrule.MONTHLY, |
| 991 | | byweekday=weekday(+weeknum), |
| 992 | | dtstart=self.eventdt) |
| 993 | | else: |
| 994 | | if self.repeat_type == MOTO_REPEAT_DAILY: |
| 995 | | freq = dateutil.rrule.DAILY |
| 996 | | elif self.repeat_type == MOTO_REPEAT_WEEKLY: |
| 997 | | freq = dateutil.rrule.WEEKLY |
| 998 | | elif self.repeat_type == MOTO_REPEAT_YEARLY: |
| 999 | | freq = dateutil.rrule.YEARLY |
| 1000 | | rrule = dateutil.rrule.rrule(freq, dtstart=self.eventdt) |
| 1001 | | |
| 1002 | | # work out which dates the exceptions correspond to and |
| 1003 | | # generate ExceptionDate nodes for them |
| 1004 | | e = doc.createElement('ExceptionDateTime') |
| 1005 | | e.setAttribute('Value', 'DATE') |
| 1006 | | for exnum in self.exceptions: |
| 1007 | | appendXMLChild(doc, e, 'Content', format_time(rrule[exnum], VCAL_DATE)) |
| 1008 | | if e.hasChildNodes(): |
| 1009 | | top.appendChild(e) |
| | 1007 | e = doc.createElement('Summary') |
| | 1008 | appendXMLChild(doc, e, 'Content', self.name) |
| | 1009 | top.appendChild(e) |