# HG changeset patch # User Paul Boddie # Date 1457368398 -3600 # Node ID 9c9c0a802ad12c68032b20c3983cba8d61c76e9f # Parent 37921ab84c01296d3b04e4e3e4eafd5728ed6023 Moved free/busy provider methods into the store base class. diff -r 37921ab84c01 -r 9c9c0a802ad1 imiptools/stores/__init__.py --- a/imiptools/stores/__init__.py Sun Mar 06 00:44:42 2016 +0100 +++ b/imiptools/stores/__init__.py Mon Mar 07 17:33:18 2016 +0100 @@ -19,6 +19,8 @@ this program. If not, see . """ +from imiptools.dates import format_datetime + class StoreBase: "The core operations of a data store." @@ -197,6 +199,17 @@ # Free/busy period providers, upon extension of the free/busy records. + def _get_freebusy_providers(self, user): + + """ + Return the free/busy providers for the given 'user'. + + This function returns any stored datetime and a list of providers as a + 2-tuple. Each provider is itself a (uid, recurrenceid) tuple. + """ + + pass + def get_freebusy_providers(self, user, dt=None): """ @@ -211,6 +224,28 @@ This function returns a list of (uid, recurrenceid) tuples upon success. """ + t = self._get_freebusy_providers(user) + if not t: + return None + + dt_string, t = t + + # If the requested datetime is earlier than the stated datetime, the + # providers will need to be recomputed. + + if dt: + providers_dt = get_datetime(dt_string) + if not providers_dt or providers_dt > dt: + return None + + # Otherwise, return the providers. + + return t[1:] + + def _set_freebusy_providers(self, user, dt_string, t): + + "Set the given provider timestamp 'dt_string' and table 't'." + pass def set_freebusy_providers(self, user, dt, providers): @@ -220,19 +255,41 @@ given datetime 'dt'. """ - pass + t = [] + + for obj in providers: + t.append((obj.get_uid(), obj.get_recurrenceid())) + + return self._set_freebusy_providers(user, format_datetime(dt), t) def append_freebusy_provider(self, user, provider): "For the given 'user', append the free/busy 'provider'." - pass + t = self._get_freebusy_providers(user) + if not t: + return False + + dt_string, t = t + t.append((provider.get_uid(), provider.get_recurrenceid())) + + return self._set_freebusy_providers(user, dt_string, t) def remove_freebusy_provider(self, user, provider): "For the given 'user', remove the free/busy 'provider'." - pass + t = self._get_freebusy_providers(user) + if not t: + return False + + dt_string, t = t + try: + t.remove((provider.get_uid(), provider.get_recurrenceid())) + except ValueError: + return False + + return self._set_freebusy_providers(user, dt_string, t) # Free/busy period access. diff -r 37921ab84c01 -r 9c9c0a802ad1 imiptools/stores/file.py --- a/imiptools/stores/file.py Sun Mar 06 00:44:42 2016 +0100 +++ b/imiptools/stores/file.py Mon Mar 07 17:33:18 2016 +0100 @@ -436,38 +436,6 @@ return dt_string, t[1:] - def get_freebusy_providers(self, user, dt=None): - - """ - Return a set of uncancelled events of the form (uid, recurrenceid) - providing free/busy details beyond the given datetime 'dt'. - - If 'dt' is not specified, all events previously found to provide - details will be returned. Otherwise, if 'dt' is earlier than the - datetime recorded for the known providers, None is returned, indicating - that the list of providers must be recomputed. - - This function returns a list of (uid, recurrenceid) tuples upon success. - """ - - t = self._get_freebusy_providers(user) - if not t: - return None - - dt_string, t = t - - # If the requested datetime is earlier than the stated datetime, the - # providers will need to be recomputed. - - if dt: - providers_dt = get_datetime(dt_string) - if not providers_dt or providers_dt > dt: - return None - - # Otherwise, return the providers. - - return t[1:] - def _set_freebusy_providers(self, user, dt_string, t): "Set the given provider timestamp 'dt_string' and table 't'." @@ -480,49 +448,6 @@ self._set_table_atomic(user, filename, t, [(1, "")]) return True - def set_freebusy_providers(self, user, dt, providers): - - """ - Define the uncancelled events providing free/busy details beyond the - given datetime 'dt'. - """ - - t = [] - - for obj in providers: - t.append((obj.get_uid(), obj.get_recurrenceid())) - - return self._set_freebusy_providers(user, format_datetime(dt), t) - - def append_freebusy_provider(self, user, provider): - - "For the given 'user', append the free/busy 'provider'." - - t = self._get_freebusy_providers(user) - if not t: - return False - - dt_string, t = t - t.append((provider.get_uid(), provider.get_recurrenceid())) - - return self._set_freebusy_providers(user, dt_string, t) - - def remove_freebusy_provider(self, user, provider): - - "For the given 'user', remove the free/busy 'provider'." - - t = self._get_freebusy_providers(user) - if not t: - return False - - dt_string, t = t - try: - t.remove((provider.get_uid(), provider.get_recurrenceid())) - except ValueError: - return False - - return self._set_freebusy_providers(user, dt_string, t) - # Free/busy period access. def get_freebusy(self, user, name=None):