1.1 --- a/imiptools/stores/__init__.py Mon Mar 07 00:09:59 2016 +0100
1.2 +++ b/imiptools/stores/__init__.py Mon Mar 07 17:34:01 2016 +0100
1.3 @@ -19,6 +19,8 @@
1.4 this program. If not, see <http://www.gnu.org/licenses/>.
1.5 """
1.6
1.7 +from imiptools.dates import format_datetime
1.8 +
1.9 class StoreBase:
1.10
1.11 "The core operations of a data store."
1.12 @@ -197,6 +199,17 @@
1.13
1.14 # Free/busy period providers, upon extension of the free/busy records.
1.15
1.16 + def _get_freebusy_providers(self, user):
1.17 +
1.18 + """
1.19 + Return the free/busy providers for the given 'user'.
1.20 +
1.21 + This function returns any stored datetime and a list of providers as a
1.22 + 2-tuple. Each provider is itself a (uid, recurrenceid) tuple.
1.23 + """
1.24 +
1.25 + pass
1.26 +
1.27 def get_freebusy_providers(self, user, dt=None):
1.28
1.29 """
1.30 @@ -211,6 +224,28 @@
1.31 This function returns a list of (uid, recurrenceid) tuples upon success.
1.32 """
1.33
1.34 + t = self._get_freebusy_providers(user)
1.35 + if not t:
1.36 + return None
1.37 +
1.38 + dt_string, t = t
1.39 +
1.40 + # If the requested datetime is earlier than the stated datetime, the
1.41 + # providers will need to be recomputed.
1.42 +
1.43 + if dt:
1.44 + providers_dt = get_datetime(dt_string)
1.45 + if not providers_dt or providers_dt > dt:
1.46 + return None
1.47 +
1.48 + # Otherwise, return the providers.
1.49 +
1.50 + return t[1:]
1.51 +
1.52 + def _set_freebusy_providers(self, user, dt_string, t):
1.53 +
1.54 + "Set the given provider timestamp 'dt_string' and table 't'."
1.55 +
1.56 pass
1.57
1.58 def set_freebusy_providers(self, user, dt, providers):
1.59 @@ -220,19 +255,41 @@
1.60 given datetime 'dt'.
1.61 """
1.62
1.63 - pass
1.64 + t = []
1.65 +
1.66 + for obj in providers:
1.67 + t.append((obj.get_uid(), obj.get_recurrenceid()))
1.68 +
1.69 + return self._set_freebusy_providers(user, format_datetime(dt), t)
1.70
1.71 def append_freebusy_provider(self, user, provider):
1.72
1.73 "For the given 'user', append the free/busy 'provider'."
1.74
1.75 - pass
1.76 + t = self._get_freebusy_providers(user)
1.77 + if not t:
1.78 + return False
1.79 +
1.80 + dt_string, t = t
1.81 + t.append((provider.get_uid(), provider.get_recurrenceid()))
1.82 +
1.83 + return self._set_freebusy_providers(user, dt_string, t)
1.84
1.85 def remove_freebusy_provider(self, user, provider):
1.86
1.87 "For the given 'user', remove the free/busy 'provider'."
1.88
1.89 - pass
1.90 + t = self._get_freebusy_providers(user)
1.91 + if not t:
1.92 + return False
1.93 +
1.94 + dt_string, t = t
1.95 + try:
1.96 + t.remove((provider.get_uid(), provider.get_recurrenceid()))
1.97 + except ValueError:
1.98 + return False
1.99 +
1.100 + return self._set_freebusy_providers(user, dt_string, t)
1.101
1.102 # Free/busy period access.
1.103