1.1 --- a/imiptools/stores/file.py Sat Jun 04 17:16:36 2016 +0200
1.2 +++ b/imiptools/stores/file.py Sat Jun 04 18:42:53 2016 +0200
1.3 @@ -471,7 +471,7 @@
1.4
1.5 return FreeBusyCollection(periods, mutable)
1.6
1.7 - def get_freebusy_for_other(self, user, other, mutable=False):
1.8 + def get_freebusy_for_other(self, user, other, mutable=False, cls=None, collection=None):
1.9
1.10 "For the given 'user', get free/busy details for the 'other' user."
1.11
1.12 @@ -480,10 +480,12 @@
1.13 if not filename or not isfile(filename):
1.14 periods = []
1.15 else:
1.16 - periods = map(lambda t: FreeBusyPeriod(*t),
1.17 + cls = cls or FreeBusyPeriod
1.18 + periods = map(lambda t: cls(*t),
1.19 self._get_table_atomic(user, filename))
1.20
1.21 - return FreeBusyCollection(periods, mutable)
1.22 + collection = collection or FreeBusyCollection
1.23 + return collection(periods, mutable)
1.24
1.25 def set_freebusy(self, user, freebusy, name=None):
1.26
1.27 @@ -779,13 +781,10 @@
1.28
1.29 return True
1.30
1.31 -class Journal(FileStoreBase, JournalBase):
1.32 +class Journal(Store, JournalBase):
1.33
1.34 "A journal system to support quotas."
1.35
1.36 - def __init__(self, store_dir=None):
1.37 - FileBase.__init__(self, store_dir or JOURNAL_DIR)
1.38 -
1.39 # Quota and user identity/group discovery.
1.40
1.41 def get_quotas(self):
1.42 @@ -877,47 +876,6 @@
1.43 self._set_table_atomic(quota, filename, limits.items())
1.44 return True
1.45
1.46 - # Free/busy period access for users within quota groups.
1.47 -
1.48 - def get_freebusy_users(self, quota):
1.49 -
1.50 - """
1.51 - Return a list of users whose free/busy details are retained for the
1.52 - given 'quota'.
1.53 - """
1.54 -
1.55 - filename = self.get_object_in_store(quota, "freebusy")
1.56 - if not filename or not isdir(filename):
1.57 - return []
1.58 -
1.59 - return listdir(filename)
1.60 -
1.61 - def get_freebusy(self, quota, user, mutable=False, cls=None):
1.62 -
1.63 - "Get free/busy details for the given 'quota' and 'user'."
1.64 -
1.65 - filename = self.get_object_in_store(quota, "freebusy", user)
1.66 -
1.67 - if not filename or not isfile(filename):
1.68 - periods = []
1.69 - else:
1.70 - cls = cls or FreeBusyPeriod
1.71 - periods = map(lambda t: cls(*t),
1.72 - self._get_table_atomic(quota, filename))
1.73 -
1.74 - return FreeBusyCollection(periods, mutable)
1.75 -
1.76 - def set_freebusy(self, quota, user, freebusy):
1.77 -
1.78 - "For the given 'quota' and 'user', set 'freebusy' details."
1.79 -
1.80 - filename = self.get_object_in_store(quota, "freebusy", user)
1.81 - if not filename:
1.82 - return False
1.83 -
1.84 - self._set_freebusy(quota, freebusy, filename)
1.85 - return True
1.86 -
1.87 # Journal entry methods.
1.88
1.89 def get_entries(self, quota, group, mutable=False):
1.90 @@ -927,15 +885,7 @@
1.91 'group'.
1.92 """
1.93
1.94 - filename = self.get_object_in_store(quota, "journal", group)
1.95 -
1.96 - if not filename or not isfile(filename):
1.97 - periods = []
1.98 - else:
1.99 - periods = map(lambda t: FreeBusyGroupPeriod(*t),
1.100 - self._get_table_atomic(quota, filename))
1.101 -
1.102 - return FreeBusyGroupCollection(periods, mutable)
1.103 + return self.get_freebusy_for_other(quota, group, mutable, cls=FreeBusyGroupPeriod, collection=FreeBusyGroupCollection)
1.104
1.105 def set_entries(self, quota, group, entries):
1.106
1.107 @@ -944,11 +894,6 @@
1.108 'entries'.
1.109 """
1.110
1.111 - filename = self.get_object_in_store(quota, "journal", group)
1.112 - if not filename:
1.113 - return False
1.114 -
1.115 - self._set_freebusy(quota, entries, filename)
1.116 - return True
1.117 + return self.set_freebusy_for_other(quota, entries, group)
1.118
1.119 # vim: tabstop=4 expandtab shiftwidth=4