1.1 --- a/imiptools/client.py Tue Sep 19 17:27:16 2017 +0200
1.2 +++ b/imiptools/client.py Tue Sep 19 23:45:57 2017 +0200
1.3 @@ -21,7 +21,7 @@
1.4
1.5 from datetime import datetime, timedelta
1.6 from imiptools.config import settings
1.7 -from imiptools.data import Object, check_delegation, get_address, get_uri, \
1.8 +from imiptools.data import check_delegation, get_address, get_uri, \
1.9 get_recurrence_periods, \
1.10 get_window_end, is_new_object, make_freebusy, \
1.11 make_uid, to_part, uri_dict, uri_item, uri_items, \
1.12 @@ -123,14 +123,17 @@
1.13 "Return the period window start as a datetime."
1.14
1.15 prefs = self.get_preferences()
1.16 - start = prefs and get_datetime(prefs.get("window_start"), {"TZID" : self.get_tzid()})
1.17 - return isinstance(start, datetime) and start or start and to_datetime(start, self.get_tzid())
1.18 + tzid = self.get_tzid()
1.19 + start = prefs and get_datetime(prefs.get("window_start"), {"TZID" : tzid})
1.20 + return isinstance(start, datetime) and start or start and to_datetime(start, tzid)
1.21
1.22 def get_window_end(self, size=None, start=None):
1.23
1.24 "Return the period window end as a datetime."
1.25
1.26 - return get_window_end(self.get_tzid(), size or self.get_window_size(), start or self.get_window_start())
1.27 + tzid = self.get_tzid()
1.28 + return get_window_end(tzid, size or self.get_window_size(),
1.29 + start or self.get_window_start())
1.30
1.31 def is_participating(self):
1.32
1.33 @@ -244,8 +247,7 @@
1.34 def get_periods(self, obj, explicit_only=False, future_only=False):
1.35
1.36 """
1.37 - Return periods for the given 'obj'. Interpretation of periods can depend
1.38 - on the time zone, which is obtained for the current user.
1.39 + Return periods for the given 'obj'.
1.40
1.41 If 'explicit_only' is set to a true value, only explicit periods will be
1.42 returned, not rule-based periods.
1.43 @@ -254,7 +256,7 @@
1.44 returned, not all periods defined by an event starting in the past.
1.45 """
1.46
1.47 - return obj.get_periods(self.get_tzid(),
1.48 + return obj.get_periods(
1.49 start=(future_only and self.get_window_start() or None),
1.50 end=(not explicit_only and self.get_window_end() or None))
1.51
1.52 @@ -262,7 +264,7 @@
1.53
1.54 "Return the main period defined by 'obj'."
1.55
1.56 - return obj.get_main_period(self.get_tzid())
1.57 + return obj.get_main_period()
1.58
1.59 def get_recurrence_periods(self, obj):
1.60
1.61 @@ -281,9 +283,16 @@
1.62 """
1.63
1.64 if section == "counters":
1.65 - return self.store.get_counter(self.user, username, uid, recurrenceid)
1.66 + obj = self.store.get_counter(self.user, username, uid, recurrenceid)
1.67 else:
1.68 - return self.store.get_event(self.user, uid, recurrenceid, section)
1.69 + obj = self.store.get_event(self.user, uid, recurrenceid, section)
1.70 +
1.71 + # Set the fallback time zone.
1.72 +
1.73 + if obj:
1.74 + obj.set_tzid(self.get_tzid())
1.75 +
1.76 + return obj
1.77
1.78 # Free/busy operations.
1.79
1.80 @@ -422,6 +431,11 @@
1.81 self.sequence = obj and self.obj.get_value("SEQUENCE")
1.82 self.dtstamp = obj and self.obj.get_value("DTSTAMP")
1.83
1.84 + # Set the fallback time zone.
1.85 +
1.86 + if obj:
1.87 + self.obj.set_tzid(self.get_tzid())
1.88 +
1.89 def load_object(self, uid, recurrenceid):
1.90
1.91 "Load the object with the given 'uid' and 'recurrenceid'."
1.92 @@ -458,7 +472,7 @@
1.93 "Return whether the current object is a recurrence of its parent."
1.94
1.95 parent = self.get_parent_object()
1.96 - return parent and parent.has_recurrence(self.get_tzid(), self.obj.get_recurrenceid())
1.97 + return parent and parent.has_recurrence(self.obj.get_recurrenceid())
1.98
1.99 def get_recurrences(self):
1.100
1.101 @@ -1096,7 +1110,7 @@
1.102
1.103 invalid = []
1.104
1.105 - for period in self.obj.get_periods(self.get_tzid()):
1.106 + for period in self.obj.get_periods():
1.107 errors = period.check_permitted(permitted_values)
1.108 if errors:
1.109 start_errors, end_errors = errors
1.110 @@ -1109,7 +1123,7 @@
1.111 "Correct the object according to any scheduling constraints."
1.112
1.113 permitted_values = self.get_permitted_values()
1.114 - return permitted_values and self.obj.correct_object(self.get_tzid(), permitted_values)
1.115 + return permitted_values and self.obj.correct_object(permitted_values)
1.116
1.117 def correct_period(self, period):
1.118
1.119 @@ -1157,7 +1171,7 @@
1.120
1.121 "Get 'recurrenceid' in a form suitable for matching free/busy entries."
1.122
1.123 - return self.obj.get_recurrence_start_point(recurrenceid, self.get_tzid())
1.124 + return self.obj.get_recurrence_start_point(recurrenceid)
1.125
1.126 def remove_from_freebusy(self, freebusy, participant=None):
1.127