1.1 --- a/imiptools/data.py Fri Mar 06 23:48:54 2015 +0100
1.2 +++ b/imiptools/data.py Sat Mar 07 00:08:46 2015 +0100
1.3 @@ -21,8 +21,9 @@
1.4
1.5 from datetime import datetime, timedelta
1.6 from email.mime.text import MIMEText
1.7 -from imiptools.dates import format_datetime, get_datetime, get_freebusy_period, \
1.8 - get_period, to_timezone, to_utc_datetime
1.9 +from imiptools.dates import format_datetime, get_datetime, get_duration, \
1.10 + get_freebusy_period, get_period, to_timezone, \
1.11 + to_utc_datetime
1.12 from imiptools.period import period_overlaps
1.13 from pytz import timezone
1.14 from vCalendar import iterwrite, parse, ParseError, to_dict, to_node
1.15 @@ -73,6 +74,9 @@
1.16 def get_datetime_item(self, name):
1.17 return get_datetime_item(self.details, name)
1.18
1.19 + def get_duration(self, name):
1.20 + return get_duration(self.get_value(name))
1.21 +
1.22 def to_node(self):
1.23 return to_node({self.objtype : [(self.details, self.attr)]})
1.24
1.25 @@ -81,6 +85,9 @@
1.26
1.27 # Direct access to the structure.
1.28
1.29 + def has_key(self, name):
1.30 + return self.details.has_key(name)
1.31 +
1.32 def __getitem__(self, name):
1.33 return self.details[name]
1.34
1.35 @@ -361,13 +368,19 @@
1.36
1.37 # Use localised datetimes.
1.38
1.39 - dtstart, start_attr = obj.get_datetime_item("DTSTART")
1.40 - dtend, end_attr = obj.get_datetime_item("DTEND")
1.41 - tzid = start_attr.get("TZID") or end_attr.get("TZID") or tzid
1.42 + dtstart, dtstart_attr = obj.get_datetime_item("DTSTART")
1.43
1.44 - # NOTE: Need also DURATION support.
1.45 + if obj.has_key("DTEND"):
1.46 + dtend, dtend_attr = obj.get_datetime_item("DTEND")
1.47 + duration = dtend - dtstart
1.48 + elif obj.has_key("DURATION"):
1.49 + duration = obj.get_duration("DURATION")
1.50 + dtend = dtstart + duration
1.51 + dtend_attr = dtstart_attr
1.52 + else:
1.53 + dtend, dtend_attr = dtstart, dtstart_attr
1.54
1.55 - duration = dtend - dtstart
1.56 + tzid = dtstart_attr.get("TZID") or dtend_attr.get("TZID") or tzid
1.57
1.58 if not rrule:
1.59 periods = [(dtstart, dtend)]
1.60 @@ -425,7 +438,13 @@
1.61 """
1.62
1.63 start, start_attr = obj.get_datetime_item("DTSTART")
1.64 - end, end_attr = obj.get_datetime_item("DTEND")
1.65 + if obj.has_key("DTEND"):
1.66 + end, end_attr = obj.get_datetime_item("DTEND")
1.67 + elif obj.has_key("DURATION"):
1.68 + duration = obj.get_duration("DURATION")
1.69 + end = start + duration
1.70 + else:
1.71 + end, end_attr = start, start_attr
1.72
1.73 tzid = start_attr.get("TZID") or end_attr.get("TZID") or tzid
1.74