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
2.1 --- a/imiptools/stores/file.py Mon Mar 07 00:09:59 2016 +0100
2.2 +++ b/imiptools/stores/file.py Mon Mar 07 17:34:01 2016 +0100
2.3 @@ -436,38 +436,6 @@
2.4
2.5 return dt_string, t[1:]
2.6
2.7 - def get_freebusy_providers(self, user, dt=None):
2.8 -
2.9 - """
2.10 - Return a set of uncancelled events of the form (uid, recurrenceid)
2.11 - providing free/busy details beyond the given datetime 'dt'.
2.12 -
2.13 - If 'dt' is not specified, all events previously found to provide
2.14 - details will be returned. Otherwise, if 'dt' is earlier than the
2.15 - datetime recorded for the known providers, None is returned, indicating
2.16 - that the list of providers must be recomputed.
2.17 -
2.18 - This function returns a list of (uid, recurrenceid) tuples upon success.
2.19 - """
2.20 -
2.21 - t = self._get_freebusy_providers(user)
2.22 - if not t:
2.23 - return None
2.24 -
2.25 - dt_string, t = t
2.26 -
2.27 - # If the requested datetime is earlier than the stated datetime, the
2.28 - # providers will need to be recomputed.
2.29 -
2.30 - if dt:
2.31 - providers_dt = get_datetime(dt_string)
2.32 - if not providers_dt or providers_dt > dt:
2.33 - return None
2.34 -
2.35 - # Otherwise, return the providers.
2.36 -
2.37 - return t[1:]
2.38 -
2.39 def _set_freebusy_providers(self, user, dt_string, t):
2.40
2.41 "Set the given provider timestamp 'dt_string' and table 't'."
2.42 @@ -480,49 +448,6 @@
2.43 self._set_table_atomic(user, filename, t, [(1, "")])
2.44 return True
2.45
2.46 - def set_freebusy_providers(self, user, dt, providers):
2.47 -
2.48 - """
2.49 - Define the uncancelled events providing free/busy details beyond the
2.50 - given datetime 'dt'.
2.51 - """
2.52 -
2.53 - t = []
2.54 -
2.55 - for obj in providers:
2.56 - t.append((obj.get_uid(), obj.get_recurrenceid()))
2.57 -
2.58 - return self._set_freebusy_providers(user, format_datetime(dt), t)
2.59 -
2.60 - def append_freebusy_provider(self, user, provider):
2.61 -
2.62 - "For the given 'user', append the free/busy 'provider'."
2.63 -
2.64 - t = self._get_freebusy_providers(user)
2.65 - if not t:
2.66 - return False
2.67 -
2.68 - dt_string, t = t
2.69 - t.append((provider.get_uid(), provider.get_recurrenceid()))
2.70 -
2.71 - return self._set_freebusy_providers(user, dt_string, t)
2.72 -
2.73 - def remove_freebusy_provider(self, user, provider):
2.74 -
2.75 - "For the given 'user', remove the free/busy 'provider'."
2.76 -
2.77 - t = self._get_freebusy_providers(user)
2.78 - if not t:
2.79 - return False
2.80 -
2.81 - dt_string, t = t
2.82 - try:
2.83 - t.remove((provider.get_uid(), provider.get_recurrenceid()))
2.84 - except ValueError:
2.85 - return False
2.86 -
2.87 - return self._set_freebusy_providers(user, dt_string, t)
2.88 -
2.89 # Free/busy period access.
2.90
2.91 def get_freebusy(self, user, name=None, mutable=False):