1.1 --- a/imiptools/data.py Fri Mar 06 23:32:08 2015 +0100
1.2 +++ b/imiptools/data.py Fri Mar 06 23:44:47 2015 +0100
1.3 @@ -22,7 +22,7 @@
1.4 from datetime import datetime, timedelta
1.5 from email.mime.text import MIMEText
1.6 from imiptools.dates import format_datetime, get_datetime, get_freebusy_period, \
1.7 - to_timezone, to_utc_datetime
1.8 + get_period, to_timezone, to_utc_datetime
1.9 from imiptools.period import period_overlaps
1.10 from pytz import timezone
1.11 from vCalendar import iterwrite, parse, ParseError, to_dict, to_node
1.12 @@ -59,12 +59,12 @@
1.13 def get_utc_datetime(self, name):
1.14 return get_utc_datetime(self.details, name)
1.15
1.16 - def get_item_datetimes(self, name):
1.17 - items = get_item_datetime_items(self.details, name)
1.18 - return items and [dt for dt, attr in items]
1.19 + def get_item_values(self, name):
1.20 + items = get_item_value_items(self.details, name)
1.21 + return items and [value for value, attr in items]
1.22
1.23 - def get_item_datetime_items(self, name):
1.24 - return get_item_datetime_items(self.details, name)
1.25 + def get_item_value_items(self, name):
1.26 + return get_item_value_items(self.details, name)
1.27
1.28 def get_datetime(self, name):
1.29 dt, attr = get_datetime_item(self.details, name)
1.30 @@ -259,12 +259,12 @@
1.31 def get_value(d, name):
1.32 return get_values(d, name, False)
1.33
1.34 -def get_item_datetime_items(d, name):
1.35 +def get_item_value_items(d, name):
1.36
1.37 """
1.38 - Return datetime items from 'd' having the given 'name', where a single item
1.39 - yields potentially many datetime values, each employing the attributes given
1.40 - for the principal item.
1.41 + Obtain items from 'd' having the given 'name', where a single item yields
1.42 + potentially many values. Return a list of tuples of the form (value,
1.43 + attributes) where the attributes have been given for the property in 'd'.
1.44 """
1.45
1.46 item = get_item(d, name)
1.47 @@ -272,7 +272,10 @@
1.48 values, attr = item
1.49 if not isinstance(values, list):
1.50 values = [values]
1.51 - return [(get_datetime(value, attr), attr) for value in values]
1.52 + items = []
1.53 + for value in values:
1.54 + items.append((get_datetime(value, attr) or get_period(value, attr), attr))
1.55 + return items
1.56 else:
1.57 return None
1.58
1.59 @@ -386,19 +389,25 @@
1.60 # Add recurrence dates.
1.61
1.62 periods = set(periods)
1.63 - rdates = obj.get_item_datetimes("RDATE")
1.64 + rdates = obj.get_item_values("RDATE")
1.65
1.66 if rdates:
1.67 for rdate in rdates:
1.68 - periods.add((rdate, rdate + duration))
1.69 + if isinstance(rdate, tuple):
1.70 + periods.add(rdate)
1.71 + else:
1.72 + periods.add((rdate, rdate + duration))
1.73
1.74 # Exclude exception dates.
1.75
1.76 - exdates = obj.get_item_datetimes("EXDATE")
1.77 + exdates = obj.get_item_values("EXDATE")
1.78
1.79 if exdates:
1.80 for exdate in exdates:
1.81 - period = (exdate, exdate + duration)
1.82 + if isinstance(exdate, tuple):
1.83 + period = exdate
1.84 + else:
1.85 + period = (exdate, exdate + duration)
1.86 if period in periods:
1.87 periods.remove(period)
1.88