Show
Ignore:
Timestamp:
01/10/04 10:44:02 (20 years ago)
Author:
jalet
Message:

Fixed potential accuracy problem if a user printed on several printers at
the very same time.

Files:
1 modified

Legend:

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

    r1259 r1269  
    2222# 
    2323# $Log$ 
     24# Revision 1.47  2004/01/10 09:44:02  jalet 
     25# Fixed potential accuracy problem if a user printed on several printers at 
     26# the very same time. 
     27# 
    2428# Revision 1.46  2004/01/08 16:33:27  jalet 
    2529# Additionnal check to not create a circular printers group. 
     
    285289    def doModify(self, dn, fields, ignoreold=1) : 
    286290        """Modifies an entry in the LDAP directory.""" 
    287         fields = self.normalizeFields(fields) 
    288291        try : 
    289292            oldentry = self.doSearch("objectClass=*", base=dn, scope=ldap.SCOPE_BASE) 
     293            for (k, v) in fields.items() : 
     294                if type(v) == type({}) : 
     295                    try : 
     296                        oldvalue = v["convert"](oldentry[0][1].get(k, [0])[0]) 
     297                    except ValueError :     
     298                        self.tool.logdebug("Error converting %s with %s(%s)" % (oldentry[0][1].get(k), k, v)) 
     299                        oldvalue = 0 
     300                    if v["operator"] == '+' : 
     301                        newvalue = oldvalue + v["value"] 
     302                    else :     
     303                        newvalue = oldvalue - v["value"] 
     304                    fields[k] = str(newvalue) 
     305            fields = self.normalizeFields(fields) 
    290306            self.tool.logdebug("QUERY : Modify(%s, %s ==> %s)" % (dn, oldentry[0][1], fields)) 
    291307            self.database.modify_s(dn, modlist.modifyModlist(oldentry[0][1], fields, ignore_oldexistent=ignoreold)) 
     
    735751        return self.doModify(grouppquota.ident, fields) 
    736752         
     753    def increaseUserPQuotaPagesCounters(self, userpquota, nbpages) :     
     754        """Increase page counters for a user print quota.""" 
     755        fields = { 
     756                   "pykotaPageCounter" : { "operator" : "+", "value" : nbpages, "convert" : int }, 
     757                   "pykotaLifePageCounter" : { "operator" : "+", "value" : nbpages, "convert" : int }, 
     758                 } 
     759        return self.doModify(userpquota.ident, fields)          
     760         
    737761    def writeUserPQuotaPagesCounters(self, userpquota, newpagecounter, newlifepagecounter) :     
    738762        """Sets the new page counters permanently for a user print quota.""" 
     
    742766                 }   
    743767        return self.doModify(userpquota.ident, fields)          
     768        
     769    def decreaseUserAccountBalance(self, user, amount) :     
     770        """Decreases user's account balance from an amount.""" 
     771        fields = { 
     772                   "pykotaBalance" : { "operator" : "-", "value" : amount, "convert" : float }, 
     773                 } 
     774        return self.doModify(user.idbalance, fields)          
    744775        
    745776    def writeUserAccountBalance(self, user, newbalance, newlifetimepaid=None) :     
     
    825856        """Puts a printer into a printer group.""" 
    826857        if printer.ident not in pgroup.uniqueMember : 
     858            pgroup.uniqueMember.append(printer.ident) 
    827859            fields = { 
    828                        "uniqueMember" : pgroup.uniqueMember + [printer.ident] 
     860                       "uniqueMember" : pgroup.uniqueMember 
    829861                     }   
    830862            self.doModify(pgroup.ident, fields)