1.1 --- a/imiptools/stores/database/common.py Wed May 11 14:04:30 2016 +0200
1.2 +++ b/imiptools/stores/database/common.py Wed May 11 15:59:28 2016 +0200
1.3 @@ -24,7 +24,9 @@
1.4 from datetime import datetime
1.5 from imiptools.data import parse_string, to_string
1.6 from imiptools.dates import format_datetime, get_datetime, to_timezone
1.7 -from imiptools.period import FreeBusyDatabaseCollection
1.8 +from imiptools.period import FreeBusyDatabaseCollection, \
1.9 + FreeBusyGroupDatabaseCollection, \
1.10 + FreeBusyOffersDatabaseCollection
1.11 from imiptools.sql import DatabaseOperations
1.12
1.13 class DatabaseStoreBase(DatabaseOperations):
1.14 @@ -429,12 +431,13 @@
1.15
1.16 # Free/busy period access.
1.17
1.18 - def get_freebusy(self, user, name=None, mutable=False):
1.19 + def get_freebusy(self, user, name=None, mutable=False, cls=None):
1.20
1.21 "Get free/busy details for the given 'user'."
1.22
1.23 table = name or "freebusy"
1.24 - return FreeBusyDatabaseCollection(self.cursor, table, ["store_user"], [user], mutable, self.paramstyle)
1.25 + cls = cls or FreeBusyDatabaseCollection
1.26 + return cls(self.cursor, table, ["store_user"], [user], mutable, self.paramstyle)
1.27
1.28 def get_freebusy_for_other(self, user, other, mutable=False):
1.29
1.30 @@ -443,14 +446,15 @@
1.31 table = "freebusy_other"
1.32 return FreeBusyDatabaseCollection(self.cursor, table, ["store_user", "other"], [user, other], mutable, self.paramstyle)
1.33
1.34 - def set_freebusy(self, user, freebusy, name=None):
1.35 + def set_freebusy(self, user, freebusy, name=None, cls=None):
1.36
1.37 "For the given 'user', set 'freebusy' details."
1.38
1.39 table = name or "freebusy"
1.40 + cls = cls or FreeBusyDatabaseCollection
1.41
1.42 - if not isinstance(freebusy, FreeBusyDatabaseCollection) or freebusy.table_name != table:
1.43 - fbc = FreeBusyDatabaseCollection(self.cursor, table, ["store_user"], [user], True, self.paramstyle)
1.44 + if not isinstance(freebusy, cls) or freebusy.table_name != table:
1.45 + fbc = cls(self.cursor, table, ["store_user"], [user], True, self.paramstyle)
1.46 fbc += freebusy
1.47
1.48 return True
1.49 @@ -502,13 +506,13 @@
1.50
1.51 self.cursor.execute(query, values)
1.52
1.53 - return self.get_freebusy(user, "freebusy_offers", mutable)
1.54 + return self.get_freebusy(user, "freebusy_offers", mutable, FreeBusyOffersDatabaseCollection)
1.55
1.56 def set_freebusy_offers(self, user, freebusy):
1.57
1.58 "For the given 'user', set 'freebusy' offers."
1.59
1.60 - return self.set_freebusy(user, freebusy, "freebusy_offers")
1.61 + return self.set_freebusy(user, freebusy, "freebusy_offers", cls=FreeBusyOffersDatabaseCollection)
1.62
1.63 # Requests and counter-proposals.
1.64
1.65 @@ -952,21 +956,23 @@
1.66 self.cursor.execute(query, values)
1.67 return [r[0] for r in self.cursor.fetchall()]
1.68
1.69 - def get_freebusy(self, quota, user, mutable=False):
1.70 + def get_freebusy(self, quota, user, mutable=False, cls=None):
1.71
1.72 "Get free/busy details for the given 'quota' and 'user'."
1.73
1.74 table = "user_freebusy"
1.75 - return FreeBusyDatabaseCollection(self.cursor, table, ["quota", "store_user"], [quota, user], mutable, self.paramstyle)
1.76 + cls = cls or FreeBusyDatabaseCollection
1.77 + return cls(self.cursor, table, ["quota", "store_user"], [quota, user], mutable, self.paramstyle)
1.78
1.79 - def set_freebusy(self, quota, user, freebusy):
1.80 + def set_freebusy(self, quota, user, freebusy, cls=None):
1.81
1.82 "For the given 'quota' and 'user', set 'freebusy' details."
1.83
1.84 table = "user_freebusy"
1.85 + cls = cls or FreeBusyDatabaseCollection
1.86
1.87 - if not isinstance(freebusy, FreeBusyDatabaseCollection) or freebusy.table_name != table:
1.88 - fbc = FreeBusyDatabaseCollection(self.cursor, table, ["quota", "store_user"], [quota, user], True, self.paramstyle)
1.89 + if not isinstance(freebusy, cls) or freebusy.table_name != table:
1.90 + fbc = cls(self.cursor, table, ["quota", "store_user"], [quota, user], True, self.paramstyle)
1.91 fbc += freebusy
1.92
1.93 return True
1.94 @@ -981,7 +987,7 @@
1.95 """
1.96
1.97 table = "quota_freebusy"
1.98 - return FreeBusyDatabaseCollection(self.cursor, table, ["quota", "user_group"], [quota, group], mutable, self.paramstyle)
1.99 + return FreeBusyGroupDatabaseCollection(self.cursor, table, ["quota", "user_group"], [quota, group], mutable, self.paramstyle)
1.100
1.101 def set_entries(self, quota, group, entries):
1.102
1.103 @@ -992,8 +998,8 @@
1.104
1.105 table = "quota_freebusy"
1.106
1.107 - if not isinstance(entries, FreeBusyDatabaseCollection) or entries.table_name != table:
1.108 - fbc = FreeBusyDatabaseCollection(self.cursor, table, ["quota", "user_group"], [quota, group], True, self.paramstyle)
1.109 + if not isinstance(entries, FreeBusyGroupDatabaseCollection) or entries.table_name != table:
1.110 + fbc = FreeBusyGroupDatabaseCollection(self.cursor, table, ["quota", "user_group"], [quota, group], True, self.paramstyle)
1.111 fbc += entries
1.112
1.113 return True