Show
Ignore:
Timestamp:
04/16/03 14:35:49 (21 years ago)
Author:
jalet
Message:

Groups quota work now !

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • pykota/trunk/pykota/storages/sql.py

    r925 r927  
    2121# 
    2222# $Log$ 
     23# Revision 1.27  2003/04/16 12:35:49  jalet 
     24# Groups quota work now ! 
     25# 
    2326# Revision 1.26  2003/04/16 08:53:14  jalet 
    2427# Printing can now be limited either by user's account balance or by 
     
    196199            return [(record["id"], record["groupname"]) for record in result] 
    197200         
     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         
    198215    def addPrinter(self, printername) :         
    199216        """Adds a printer to the quota storage, returns its id.""" 
     
    216233        if userid is None :     
    217234            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))) 
    219238        return (userid, printerid) 
    220239         
     
    223242        groupid = self.getGroupId(groupname)      
    224243        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))) 
    227248        return (groupid, printerid) 
    228249         
     
    234255        """Returns the current account balance for a given user.""" 
    235256        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)) 
    236265        try : 
    237266            return self.doParseResult(result)[0]["balance"] 
     
    273302        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))) 
    274303         
     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         
    275308    def resetUserPQuota(self, userid, printerid) :     
    276309        """Resets the page counter to zero for a user on a printer. Life time page counter is kept unchanged.""" 
    277310        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))) 
    278315         
    279316    def updateUserPQuota(self, userid, printerid, pagecount) : 
     
    293330            return 
    294331         
     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         
    295349    def setUserDateLimit(self, userid, printerid, datelimit) : 
    296350        """Sets the limit date for a soft limit to become an hard one given (userid, printerid).""" 
    297351        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))) 
    298356         
    299357    def addJobToHistory(self, jobid, userid, printerid, pagecounter, action) : 
     
    314372            return 
    315373         
     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         
    316384    def deleteUser(self, userid) :     
    317385        """Completely deletes an user from the Quota Storage."""