Changeset 927 for pykota/trunk/pykota/storages
- Timestamp:
- 04/16/03 14:35:49 (21 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
pykota/trunk/pykota/storages/sql.py
r925 r927 21 21 # 22 22 # $Log$ 23 # Revision 1.27 2003/04/16 12:35:49 jalet 24 # Groups quota work now ! 25 # 23 26 # Revision 1.26 2003/04/16 08:53:14 jalet 24 27 # Printing can now be limited either by user's account balance or by … … 196 199 return [(record["id"], record["groupname"]) for record in result] 197 200 201 def getGroupMembersNames(self, groupname) : 202 """Returns the list of user's names which are member of this group.""" 203 groupid = self.getGroupId(groupname) 204 if groupid is None : 205 return [] 206 else : 207 result = self.doQuery("SELECT DISTINCT username FROM users WHERE id IN (SELECT userid FROM groupsmembers WHERE groupid=%s)" % self.doQuote(groupid)) 208 return [record["username"] for record in (self.doParseResult(result) or [])] 209 210 def getUserGroupsNames(self, userid) : 211 """Returns the list of groups' names the user is a member of.""" 212 result = self.doQuery("SELECT DISTINCT groupname FROM groups WHERE id IN (SELECT groupid FROM groupsmembers WHERE userid=%s)" % self.doQuote(userid)) 213 return [record["groupname"] for record in (self.doParseResult(result) or [])] 214 198 215 def addPrinter(self, printername) : 199 216 """Adds a printer to the quota storage, returns its id.""" … … 216 233 if userid is None : 217 234 userid = self.addUser(username) 218 self.doQuery("INSERT INTO userpquota (userid, printerid) VALUES (%s, %s)" % (self.doQuote(userid), self.doQuote(printerid))) 235 uqexists = (self.getUserPQuota(userid, printerid) is not None) 236 if not uqexists : 237 self.doQuery("INSERT INTO userpquota (userid, printerid) VALUES (%s, %s)" % (self.doQuote(userid), self.doQuote(printerid))) 219 238 return (userid, printerid) 220 239 … … 223 242 groupid = self.getGroupId(groupname) 224 243 if groupid is None : 225 groupid = self.addUser(groupname) 226 self.doQuery("INSERT INTO grouppquota (groupid, printerid) VALUES (%s, %s)" % (self.doQuote(groupid), self.doQuote(printerid))) 244 groupid = self.addGroup(groupname) 245 gqexists = (self.getGroupPQuota(groupid, printerid) is not None) 246 if not gqexists : 247 self.doQuery("INSERT INTO grouppquota (groupid, printerid) VALUES (%s, %s)" % (self.doQuote(groupid), self.doQuote(printerid))) 227 248 return (groupid, printerid) 228 249 … … 234 255 """Returns the current account balance for a given user.""" 235 256 result = self.doQuery("SELECT balance FROM users WHERE id=%s" % self.doQuote(userid)) 257 try : 258 return self.doParseResult(result)[0]["balance"] 259 except TypeError : # Not found 260 return 261 262 def getGroupBalance(self, groupid) : 263 """Returns the current account balance for a given group, as the sum of each of its users' account balance.""" 264 result = self.doQuery("SELECT SUM(balance) AS balance FROM users WHERE id in (SELECT userid FROM groupsmembers WHERE groupid=%s)" % self.doQuote(groupid)) 236 265 try : 237 266 return self.doParseResult(result)[0]["balance"] … … 273 302 self.doQuery("UPDATE userpquota SET softlimit=%s, hardlimit=%s, datelimit=NULL WHERE userid=%s AND printerid=%s" % (self.doQuote(softlimit), self.doQuote(hardlimit), self.doQuote(userid), self.doQuote(printerid))) 274 303 304 def setGroupPQuota(self, groupid, printerid, softlimit, hardlimit) : 305 """Sets soft and hard limits for a group quota on a specific printer given (groupid, printerid).""" 306 self.doQuery("UPDATE grouppquota SET softlimit=%s, hardlimit=%s, datelimit=NULL WHERE groupid=%s AND printerid=%s" % (self.doQuote(softlimit), self.doQuote(hardlimit), self.doQuote(groupid), self.doQuote(printerid))) 307 275 308 def resetUserPQuota(self, userid, printerid) : 276 309 """Resets the page counter to zero for a user on a printer. Life time page counter is kept unchanged.""" 277 310 self.doQuery("UPDATE userpquota SET pagecounter=0, datelimit=NULL WHERE userid=%s AND printerid=%s" % (self.doQuote(userid), self.doQuote(printerid))) 311 312 def resetGroupPQuota(self, groupid, printerid) : 313 """Resets the page counter to zero for a group on a printer. Life time page counter is kept unchanged.""" 314 self.doQuery("UPDATE grouppquota SET pagecounter=0, datelimit=NULL WHERE groupid=%s AND printerid=%s" % (self.doQuote(groupid), self.doQuote(printerid))) 278 315 279 316 def updateUserPQuota(self, userid, printerid, pagecount) : … … 293 330 return 294 331 332 def getGroupPQuota(self, groupid, printerid) : 333 """Returns the Print Quota information for a given (groupid, printerid).""" 334 result = self.doQuery("SELECT softlimit, hardlimit, datelimit FROM grouppquota WHERE groupid=%s AND printerid=%s" % (self.doQuote(groupid), self.doQuote(printerid))) 335 try : 336 grouppquota = self.doParseResult(result)[0] 337 except TypeError : 338 return 339 else : 340 result = self.doQuery("SELECT SUM(lifepagecounter) as lifepagecounter, SUM(pagecounter) as pagecounter FROM userpquota WHERE printerid=%s AND userid in (SELECT userid FROM groupsmembers WHERE groupid=%s)" % (self.doQuote(printerid), self.doQuote(groupid))) 341 try : 342 result = self.doParseResult(result)[0] 343 except TypeError : # Not found 344 return 345 else : 346 grouppquota.update({"lifepagecounter": result["lifepagecounter"], "pagecounter": result["pagecounter"]}) 347 return grouppquota 348 295 349 def setUserDateLimit(self, userid, printerid, datelimit) : 296 350 """Sets the limit date for a soft limit to become an hard one given (userid, printerid).""" 297 351 self.doQuery("UPDATE userpquota SET datelimit=%s::TIMESTAMP WHERE userid=%s AND printerid=%s" % (self.doQuote("%04i-%02i-%02i %02i:%02i:%02i" % (datelimit.year, datelimit.month, datelimit.day, datelimit.hour, datelimit.minute, datelimit.second)), self.doQuote(userid), self.doQuote(printerid))) 352 353 def setGroupDateLimit(self, groupid, printerid, datelimit) : 354 """Sets the limit date for a soft limit to become an hard one given (groupid, printerid).""" 355 self.doQuery("UPDATE grouppquota SET datelimit=%s::TIMESTAMP WHERE groupid=%s AND printerid=%s" % (self.doQuote("%04i-%02i-%02i %02i:%02i:%02i" % (datelimit.year, datelimit.month, datelimit.day, datelimit.hour, datelimit.minute, datelimit.second)), self.doQuote(groupid), self.doQuote(printerid))) 298 356 299 357 def addJobToHistory(self, jobid, userid, printerid, pagecounter, action) : … … 314 372 return 315 373 374 def addUserToGroup(self, userid, groupid) : 375 """Adds an user to a group.""" 376 result = self.doQuery("SELECT COUNT(*) AS mexists FROM groupsmembers WHERE groupid=%s AND userid=%s" % (self.doQuote(groupid), self.doQuote(userid))) 377 try : 378 mexists = self.doParseResult(result)[0]["mexists"] 379 except TypeError : 380 mexists = 0 381 if not mexists : 382 self.doQuery("INSERT INTO groupsmembers (groupid, userid) VALUES (%s, %s)" % (self.doQuote(groupid), self.doQuote(userid))) 383 316 384 def deleteUser(self, userid) : 317 385 """Completely deletes an user from the Quota Storage."""