1.1 --- a/imiptools/stores/database/common.py Thu May 12 23:05:48 2016 +0200
1.2 +++ b/imiptools/stores/database/common.py Thu May 12 23:15:18 2016 +0200
1.3 @@ -831,18 +831,62 @@
1.4
1.5 def get_quota_users(self, quota):
1.6
1.7 - "Return a list of quota users."
1.8 + "Return a list of quota users for the 'quota'."
1.9 +
1.10 + columns = ["quota"]
1.11 + values = [quota]
1.12 +
1.13 + query, values = self.get_query(
1.14 + "select distinct user_group from (" \
1.15 + "select user_group from quota_freebusy :condition " \
1.16 + "union all select user_group from quota_delegates :condition" \
1.17 + ") as users",
1.18 + columns, values)
1.19 +
1.20 + self.cursor.execute(query, values)
1.21 + return [r[0] for r in self.cursor.fetchall()]
1.22 +
1.23 + # Delegate information for the quota.
1.24 +
1.25 + def get_delegates(self, quota):
1.26 +
1.27 + "Return a list of delegates for 'quota'."
1.28
1.29 columns = ["quota"]
1.30 values = [quota]
1.31
1.32 query, values = self.get_query(
1.33 - "select distinct user_group from quota_freebusy :condition",
1.34 + "select distinct store_user from quota_delegates :condition",
1.35 columns, values)
1.36
1.37 self.cursor.execute(query, values)
1.38 return [r[0] for r in self.cursor.fetchall()]
1.39
1.40 + def set_delegates(self, quota, delegates):
1.41 +
1.42 + "For the given 'quota', set the list of 'delegates'."
1.43 +
1.44 + columns = ["quota"]
1.45 + values = [quota]
1.46 +
1.47 + query, values = self.get_query(
1.48 + "delete from quota_delegates :condition",
1.49 + columns, values)
1.50 +
1.51 + self.cursor.execute(query, values)
1.52 +
1.53 + for store_user in delegates:
1.54 +
1.55 + columns = ["quota", "store_user"]
1.56 + values = [quota, store_user]
1.57 +
1.58 + query, values = self.get_query(
1.59 + "insert into quota_delegates (:columns) values (:values)",
1.60 + columns, values)
1.61 +
1.62 + self.cursor.execute(query, values)
1.63 + return True
1.64 +
1.65 # Groups of users sharing quotas.
1.66
1.67 def get_groups(self, quota):
1.68 @@ -859,32 +903,27 @@
1.69 self.cursor.execute(query, values)
1.70 return dict(self.cursor.fetchall())
1.71
1.72 - def set_group(self, quota, store_user, user_group):
1.73 + def set_groups(self, quota, groups):
1.74
1.75 - """
1.76 - For the given 'quota', set a mapping from 'store_user' to 'user_group'.
1.77 - """
1.78 + "For the given 'quota', set 'groups' mapping users to groups."
1.79
1.80 - columns = ["quota", "store_user"]
1.81 - values = [quota, store_user]
1.82 - setcolumns = ["user_group"]
1.83 - setvalues = [user_group]
1.84 + columns = ["quota"]
1.85 + values = [quota]
1.86
1.87 query, values = self.get_query(
1.88 - "update user_groups :set :condition",
1.89 - columns, values, setcolumns, setvalues)
1.90 + "delete from user_groups :condition",
1.91 + columns, values)
1.92
1.93 self.cursor.execute(query, values)
1.94
1.95 - if self.cursor.rowcount > 0:
1.96 - return True
1.97 + for store_user, user_group in groups.items():
1.98
1.99 - columns = ["quota", "store_user", "user_group"]
1.100 - values = [quota, store_user, user_group]
1.101 + columns = ["quota", "store_user", "user_group"]
1.102 + values = [quota, store_user, user_group]
1.103
1.104 - query, values = self.get_query(
1.105 - "insert into user_groups (:columns) values (:values)",
1.106 - columns, values)
1.107 + query, values = self.get_query(
1.108 + "insert into user_groups (:columns) values (:values)",
1.109 + columns, values)
1.110
1.111 self.cursor.execute(query, values)
1.112 return True
1.113 @@ -906,33 +945,30 @@
1.114 self.cursor.execute(query, values)
1.115 return dict(self.cursor.fetchall())
1.116
1.117 - def set_limit(self, quota, group, limit):
1.118 + def set_limits(self, quota, limits):
1.119
1.120 """
1.121 - For the given 'quota', set for a user 'group' the given 'limit' on
1.122 - resource usage.
1.123 + For the given 'quota', set the given 'limits' on resource usage mapping
1.124 + groups to limits.
1.125 """
1.126
1.127 - columns = ["quota", "user_group"]
1.128 - values = [quota, group]
1.129 - setcolumns = ["quota_limit"]
1.130 - setvalues = [limit]
1.131 + columns = ["quota"]
1.132 + values = [quota]
1.133
1.134 query, values = self.get_query(
1.135 - "update quota_limits :set :condition",
1.136 - columns, values, setcolumns, setvalues)
1.137 + "delete from quota_limits :condition",
1.138 + columns, values)
1.139
1.140 self.cursor.execute(query, values)
1.141
1.142 - if self.cursor.rowcount > 0:
1.143 - return True
1.144 + for user_group, limit in limits.items():
1.145
1.146 - columns = ["quota", "user_group", "quota_limit"]
1.147 - values = [quota, group, limit]
1.148 + columns = ["quota", "user_group", "quota_limit"]
1.149 + values = [quota, user_group, limit]
1.150
1.151 - query, values = self.get_query(
1.152 - "insert into quota_limits (:columns) values (:values)",
1.153 - columns, values)
1.154 + query, values = self.get_query(
1.155 + "insert into quota_limits (:columns) values (:values)",
1.156 + columns, values)
1.157
1.158 self.cursor.execute(query, values)
1.159 return True