1.1 --- a/imipweb/data.py Mon Sep 11 16:39:20 2017 +0200
1.2 +++ b/imipweb/data.py Mon Sep 11 22:31:35 2017 +0200
1.3 @@ -35,7 +35,8 @@
1.4 intended to represent information obtained from an iCalendar resource.
1.5 """
1.6
1.7 - def __init__(self, start, end, tzid=None, origin=None, start_attr=None, end_attr=None, form_start=None, form_end=None, replaced=False):
1.8 + def __init__(self, start, end, tzid=None, origin=None, start_attr=None,
1.9 + end_attr=None, form_start=None, form_end=None, replaced=False):
1.10
1.11 """
1.12 Initialise a period with the given 'start' and 'end' datetimes, together
1.13 @@ -50,7 +51,8 @@
1.14 self.replaced = replaced
1.15
1.16 def as_tuple(self):
1.17 - return self.start, self.end, self.tzid, self.origin, self.start_attr, self.end_attr, self.form_start, self.form_end, self.replaced
1.18 + return self.start, self.end, self.tzid, self.origin, self.start_attr, \
1.19 + self.end_attr, self.form_start, self.form_end, self.replaced
1.20
1.21 def __repr__(self):
1.22 return "EventPeriod%r" % (self.as_tuple(),)
1.23 @@ -101,7 +103,8 @@
1.24
1.25 "A period whose information originates from a form."
1.26
1.27 - def __init__(self, start, end, end_enabled=True, times_enabled=True, tzid=None, origin=None, replaced=False):
1.28 + def __init__(self, start, end, end_enabled=True, times_enabled=True,
1.29 + tzid=None, origin=None, replaced=False):
1.30 self.start = start
1.31 self.end = end
1.32 self.end_enabled = end_enabled
1.33 @@ -138,12 +141,14 @@
1.34 index is not None and ("dtend", index) or "dtend"
1.35 ])
1.36
1.37 - return EventPeriod(dtstart, end_date_to_calendar(dtend), self.tzid, self.origin, dtstart_attr, dtend_attr, self.start, self.end, self.replaced)
1.38 + return EventPeriod(dtstart, end_date_to_calendar(dtend), self.tzid,
1.39 + self.origin, dtstart_attr, dtend_attr,
1.40 + self.start, self.end, self.replaced)
1.41
1.42 # Period data methods.
1.43
1.44 def get_start(self):
1.45 - return self.start.as_datetime(self.times_enabled)
1.46 + return self.start and self.start.as_datetime(self.times_enabled) or None
1.47
1.48 def get_end(self):
1.49
1.50 @@ -178,10 +183,10 @@
1.51 return dtend
1.52
1.53 def get_start_attr(self):
1.54 - return self.start.get_attributes(self.times_enabled)
1.55 + return self.start and self.start.get_attributes(self.times_enabled) or {}
1.56
1.57 def get_end_attr(self):
1.58 - return self.end.get_attributes(self.times_enabled)
1.59 + return self.end and self.end.get_attributes(self.times_enabled) or {}
1.60
1.61 # Form data methods.
1.62
1.63 @@ -323,8 +328,26 @@
1.64 else:
1.65 return event_period_from_period(period).as_form_period()
1.66
1.67 +
1.68 +
1.69 # Form field extraction and serialisation.
1.70
1.71 +def get_date_control_inputs(args, name, tzid_name=None):
1.72 +
1.73 + """
1.74 + Return a tuple of date control inputs taken from 'args' for field names
1.75 + starting with 'name'.
1.76 +
1.77 + If 'tzid_name' is specified, the time zone information will be acquired
1.78 + from fields starting with 'tzid_name' instead of 'name'.
1.79 + """
1.80 +
1.81 + return args.get("%s-date" % name, []), \
1.82 + args.get("%s-hour" % name, []), \
1.83 + args.get("%s-minute" % name, []), \
1.84 + args.get("%s-second" % name, []), \
1.85 + args.get("%s-tzid" % (tzid_name or name), [])
1.86 +
1.87 def get_date_control_values(args, name, multiple=False, tzid_name=None, tzid=None):
1.88
1.89 """
1.90 @@ -341,11 +364,7 @@
1.91 time zone information is indicated in the field data.
1.92 """
1.93
1.94 - dates = args.get("%s-date" % name, [])
1.95 - hours = args.get("%s-hour" % name, [])
1.96 - minutes = args.get("%s-minute" % name, [])
1.97 - seconds = args.get("%s-second" % name, [])
1.98 - tzids = args.get("%s-tzid" % (tzid_name or name), [])
1.99 + dates, hours, minutes, seconds, tzids = get_date_control_inputs(args, name, tzid_name)
1.100
1.101 # Handle absent values by employing None values.
1.102
1.103 @@ -384,11 +403,11 @@
1.104 args["%s-tzid" % (tzid_name or name)] = []
1.105
1.106 for d in formdates:
1.107 - args["%s-date" % name].append(d.date)
1.108 - args["%s-hour" % name].append(d.hour)
1.109 - args["%s-minute" % name].append(d.minute)
1.110 - args["%s-second" % name].append(d.second)
1.111 - args["%s-tzid" % (tzid_name or name)].append(d.tzid)
1.112 + args["%s-date" % name].append(d and d.date or "")
1.113 + args["%s-hour" % name].append(d and d.hour or "")
1.114 + args["%s-minute" % name].append(d and d.minute or "")
1.115 + args["%s-second" % name].append(d and d.second or "")
1.116 + args["%s-tzid" % (tzid_name or name)].append(d and d.tzid or "")
1.117
1.118 def get_period_control_values(args, start_name, end_name,
1.119 end_enabled_name, times_enabled_name,