Show
Ignore:
Timestamp:
01/18/08 23:39:41 (16 years ago)
Author:
jerome
Message:

Added modules to store utility functions and application
intialization code, which has nothing to do in classes.
Modified tool.py accordingly (far from being finished)
Use these new modules where necessary.
Now converts all command line arguments to unicode before
beginning to work. Added a proper logging method for already
encoded query strings.

Files:
1 modified

Legend:

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

    r3293 r3294  
    2626                           StorageJob, StorageLastJob, StorageUserPQuota, \ 
    2727                           StorageGroupPQuota, StorageBillingCode 
     28                            
     29from pykota.utils import *                            
    2830 
    2931class SQLStorage : 
     
    3638        user.LifeTimePaid = record.get("lifetimepaid") 
    3739        user.Email = record.get("email") 
    38         user.Description = self.databaseToUnicode(record.get("description")) 
     40        user.Description = databaseToUnicode(record.get("description")) 
    3941        user.OverCharge = record.get("overcharge", 1.0) 
    4042        user.Exists = True 
     
    4850        group.AccountBalance = record.get("balance") 
    4951        group.LifeTimePaid = record.get("lifetimepaid") 
    50         group.Description = self.databaseToUnicode(record.get("description")) 
     52        group.Description = databaseToUnicode(record.get("description")) 
    5153        group.Exists = True 
    5254        return group 
     
    6466        else : 
    6567            printer.PassThrough = False 
    66         printer.Description = self.databaseToUnicode(record.get("description") or "") # TODO : is 'or ""' still needed ? 
     68        printer.Description = databaseToUnicode(record.get("description") or "") # TODO : is 'or ""' still needed ? 
    6769        printer.Exists = True 
    6870        return printer 
     
    7678        job.JobPrice = record.get("jobprice") 
    7779        job.JobAction = record.get("action") 
    78         job.JobFileName = self.databaseToUnicode(record.get("filename") or "")  
    79         job.JobTitle = self.databaseToUnicode(record.get("title") or "")  
     80        job.JobFileName = databaseToUnicode(record.get("filename") or "")  
     81        job.JobTitle = databaseToUnicode(record.get("title") or "")  
    8082        job.JobCopies = record.get("copies") 
    81         job.JobOptions = self.databaseToUnicode(record.get("options") or "")  
     83        job.JobOptions = databaseToUnicode(record.get("options") or "")  
    8284        job.JobDate = record.get("jobdate") 
    8385        job.JobHostName = record.get("hostname") 
     
    8587        job.JobMD5Sum = record.get("md5sum") 
    8688        job.JobPages = record.get("pages") 
    87         job.JobBillingCode = self.databaseToUnicode(record.get("billingcode") or "") 
     89        job.JobBillingCode = databaseToUnicode(record.get("billingcode") or "") 
    8890        job.PrecomputedJobSize = record.get("precomputedjobsize") 
    8991        job.PrecomputedJobPrice = record.get("precomputedjobprice") 
    90         job.UserName = self.databaseToUnicode(record.get("username")) 
    91         job.PrinterName = self.databaseToUnicode(record.get("printername")) 
     92        job.UserName = databaseToUnicode(record.get("username")) 
     93        job.PrinterName = databaseToUnicode(record.get("printername")) 
    9294        if job.JobTitle == job.JobFileName == job.JobOptions == "hidden" : 
    9395            (job.JobTitle, job.JobFileName, job.JobOptions) = (_("Hidden because of privacy concerns"),) * 3 
     
    138140        code = StorageBillingCode(self, billingcode) 
    139141        code.ident = record.get("id") 
    140         code.Description = self.databaseToUnicode(record.get("description") or "") # TODO : is 'or ""' still needed ? 
     142        code.Description = databaseToUnicode(record.get("description") or "") # TODO : is 'or ""' still needed ? 
    141143        code.Balance = record.get("balance") or 0.0 
    142144        code.PageCounter = record.get("pagecounter") or 0 
     
    149151            expressions = [] 
    150152            for (k, v) in only.items() : 
    151                 expressions.append("%s=%s" % (k, self.doQuote(self.unicodeToDatabase(v)))) 
     153                expressions.append("%s=%s" % (k, self.doQuote(unicodeToDatabase(v)))) 
    152154            return " AND ".join(expressions)      
    153155        return ""         
     
    299301                self.tool.printInfo("Object %s has no %s attribute !" % (repr(record), attribute), "error") 
    300302            else : 
    301                 attrval = self.databaseToUnicode(attrval) 
     303                attrval = databaseToUnicode(attrval) 
    302304                if patterns : 
    303305                    if (not isinstance(patterns, type([]))) and (not isinstance(patterns, type(()))) : 
     
    351353        """Extracts user information given its name.""" 
    352354        result = self.doSearch("SELECT * FROM users WHERE username=%s"\ 
    353                       % self.doQuote(self.unicodeToDatabase(username))) 
     355                      % self.doQuote(unicodeToDatabase(username))) 
    354356        if result : 
    355357            return self.storageUserFromRecord(username, result[0]) 
     
    360362        """Extracts group information given its name.""" 
    361363        result = self.doSearch("SELECT groups.*,COALESCE(SUM(balance), 0.0) AS balance, COALESCE(SUM(lifetimepaid), 0.0) AS lifetimepaid FROM groups LEFT OUTER JOIN users ON users.id IN (SELECT userid FROM groupsmembers WHERE groupid=groups.id) WHERE groupname=%s GROUP BY groups.id,groups.groupname,groups.limitby,groups.description" \ 
    362                       % self.doQuote(self.unicodeToDatabase(groupname))) 
     364                      % self.doQuote(unicodeToDatabase(groupname))) 
    363365        if result : 
    364366            return self.storageGroupFromRecord(groupname, result[0]) 
     
    369371        """Extracts printer information given its name.""" 
    370372        result = self.doSearch("SELECT * FROM printers WHERE printername=%s" \ 
    371                       % self.doQuote(self.unicodeToDatabase(printername))) 
     373                      % self.doQuote(unicodeToDatabase(printername))) 
    372374        if result : 
    373375            return self.storagePrinterFromRecord(printername, result[0]) 
     
    378380        """Extracts a billing code information given its name.""" 
    379381        result = self.doSearch("SELECT * FROM billingcodes WHERE billingcode=%s" \ 
    380                       % self.doQuote(self.unicodeToDatabase(label))) 
     382                      % self.doQuote(unicodeToDatabase(label))) 
    381383        if result : 
    382384            return self.storageBillingCodeFromRecord(label, result[0]) 
     
    416418        if result : 
    417419            for record in result : 
    418                 user = self.storageUserFromRecord(self.databaseToUnicode(record.get("username")), \ 
     420                user = self.storageUserFromRecord(databaseToUnicode(record.get("username")), \ 
    419421                                                  record) 
    420422                groupmembers.append(user) 
     
    428430        if result : 
    429431            for record in result : 
    430                 groups.append(self.getGroup(self.databaseToUnicode(record.get("groupname")))) 
     432                groups.append(self.getGroup(databaseToUnicode(record.get("groupname")))) 
    431433        return groups         
    432434         
     
    438440            for record in result : 
    439441                if record["groupid"] != printer.ident : # in case of integrity violation 
    440                     parentprinter = self.getPrinter(self.databaseToUnicode(record.get("printername"))) 
     442                    parentprinter = self.getPrinter(databaseToUnicode(record.get("printername"))) 
    441443                    if parentprinter.Exists : 
    442444                        pgroups.append(parentprinter) 
     
    460462                    patdict[p] = None 
    461463            for record in result : 
    462                 pname = self.databaseToUnicode(record["printername"]) 
     464                pname = databaseToUnicode(record["printername"]) 
    463465                if patdict.has_key(pname) or self.tool.matchString(pname, patterns) : 
    464466                    printer = self.storagePrinterFromRecord(pname, record) 
     
    484486                    patdict[p] = None 
    485487            for record in result : 
    486                 uname = self.databaseToUnicode(record["username"]) 
     488                uname = databaseToUnicode(record["username"]) 
    487489                if patdict.has_key(uname) or self.tool.matchString(uname, patterns) : 
    488490                    user = self.storageUserFromRecord(uname, record) 
     
    508510                    patdict[p] = None 
    509511            for record in result : 
    510                 gname = self.databaseToUnicode(record["groupname"]) 
     512                gname = databaseToUnicode(record["groupname"]) 
    511513                if patdict.has_key(gname) or self.tool.matchString(gname, patterns) : 
    512514                    group = self.storageGroupFromRecord(gname, record) 
     
    529531                    patdict[p] = None 
    530532            for record in result : 
    531                 codename = self.databaseToUnicode(record["billingcode"]) 
     533                codename = databaseToUnicode(record["billingcode"]) 
    532534                if patdict.has_key(codename) or self.tool.matchString(codename, patterns) : 
    533535                    code = self.storageBillingCodeFromRecord(codename, record) 
     
    542544        if result : 
    543545            for record in result : 
    544                 uname = self.databaseToUnicode(record.get("username")) 
     546                uname = databaseToUnicode(record.get("username")) 
    545547                if self.tool.matchString(uname, names) : 
    546548                    user = self.storageUserFromRecord(uname, record) 
     
    557559        if result : 
    558560            for record in result : 
    559                 gname = self.databaseToUnicode(record.get("groupname")) 
     561                gname = databaseToUnicode(record.get("groupname")) 
    560562                if self.tool.matchString(gname, names) : 
    561563                    group = self.getGroup(gname) 
     
    570572            return oldentry 
    571573        self.doModify("INSERT INTO printers (printername, passthrough, maxjobsize, description, priceperpage, priceperjob) VALUES (%s, %s, %s, %s, %s, %s)" \ 
    572                           % (self.doQuote(self.unicodeToDatabase(printer.Name)), \ 
     574                          % (self.doQuote(unicodeToDatabase(printer.Name)), \ 
    573575                             self.doQuote((printer.PassThrough and "t") or "f"), \ 
    574576                             self.doQuote(printer.MaxJobSize or 0), \ 
    575                              self.doQuote(self.unicodeToDatabase(printer.Description)), \ 
     577                             self.doQuote(unicodeToDatabase(printer.Description)), \ 
    576578                             self.doQuote(printer.PricePerPage or 0.0), \ 
    577579                             self.doQuote(printer.PricePerJob or 0.0))) 
     
    585587            return oldentry 
    586588        self.doModify("INSERT INTO billingcodes (billingcode, balance, pagecounter, description) VALUES (%s, %s, %s, %s)" \ 
    587                            % (self.doQuote(self.unicodeToDatabase(bcode.BillingCode)),  
     589                           % (self.doQuote(unicodeToDatabase(bcode.BillingCode)),  
    588590                              self.doQuote(bcode.Balance or 0.0), \ 
    589591                              self.doQuote(bcode.PageCounter or 0), \ 
    590                               self.doQuote(self.unicodeToDatabase(bcode.Description)))) 
     592                              self.doQuote(unicodeToDatabase(bcode.Description)))) 
    591593        bcode.isDirty = False 
    592594        return None # the entry created doesn't need further modification 
     
    598600            return oldentry 
    599601        self.doModify("INSERT INTO users (username, limitby, balance, lifetimepaid, email, overcharge, description) VALUES (%s, %s, %s, %s, %s, %s, %s)" % \ 
    600                                      (self.doQuote(self.unicodeToDatabase(user.Name)), \ 
     602                                     (self.doQuote(unicodeToDatabase(user.Name)), \ 
    601603                                      self.doQuote(user.LimitBy or 'quota'), \ 
    602604                                      self.doQuote(user.AccountBalance or 0.0), \ 
     
    604606                                      self.doQuote(user.Email), \ 
    605607                                      self.doQuote(user.OverCharge), \ 
    606                                       self.doQuote(self.unicodeToDatabase(user.Description)))) 
     608                                      self.doQuote(unicodeToDatabase(user.Description)))) 
    607609        if user.PaymentsBacklog : 
    608610            for (value, comment) in user.PaymentsBacklog : 
     
    618620            return oldentry 
    619621        self.doModify("INSERT INTO groups (groupname, limitby, description) VALUES (%s, %s, %s)" % \ 
    620                               (self.doQuote(self.unicodeToDatabase(group.Name)), \ 
     622                              (self.doQuote(unicodeToDatabase(group.Name)), \ 
    621623                               self.doQuote(group.LimitBy or "quota"), \ 
    622                                self.doQuote(self.unicodeToDatabase(group.Description)))) 
     624                               self.doQuote(unicodeToDatabase(group.Description)))) 
    623625        group.isDirty = False 
    624626        return None # the entry created doesn't need further modification 
     
    677679                              % (self.doQuote((printer.PassThrough and "t") or "f"), \ 
    678680                                 self.doQuote(printer.MaxJobSize or 0), \ 
    679                                  self.doQuote(self.unicodeToDatabase(printer.Description)), \ 
     681                                 self.doQuote(unicodeToDatabase(printer.Description)), \ 
    680682                                 self.doQuote(printer.PricePerPage or 0.0), \ 
    681683                                 self.doQuote(printer.PricePerJob or 0.0), \ 
     
    690692                                  self.doQuote(user.Email), \ 
    691693                                  self.doQuote(user.OverCharge), \ 
    692                                   self.doQuote(self.unicodeToDatabase(user.Description)), \ 
     694                                  self.doQuote(unicodeToDatabase(user.Description)), \ 
    693695                                  self.doQuote(user.ident))) 
    694696                                   
     
    697699        self.doModify("UPDATE groups SET limitby=%s, description=%s WHERE id=%s" \ 
    698700                               % (self.doQuote(group.LimitBy or 'quota'), \ 
    699                                   self.doQuote(self.unicodeToDatabase(group.Description)), \ 
     701                                  self.doQuote(unicodeToDatabase(group.Description)), \ 
    700702                                  self.doQuote(group.ident))) 
    701703         
     
    717719                            % (self.doQuote(bcode.Balance or 0.0), \ 
    718720                               self.doQuote(bcode.PageCounter or 0), \ 
    719                                self.doQuote(self.unicodeToDatabase(bcode.Description)), \ 
     721                               self.doQuote(unicodeToDatabase(bcode.Description)), \ 
    720722                               self.doQuote(bcode.ident))) 
    721723        
     
    735737        """Adds a new payment to the payments history.""" 
    736738        if user.ident is not None : 
    737             self.doModify("INSERT INTO payments (userid, amount, description) VALUES (%s, %s, %s)" % (self.doQuote(user.ident), self.doQuote(amount), self.doQuote(self.unicodeToDatabase(comment)))) 
     739            self.doModify("INSERT INTO payments (userid, amount, description) VALUES (%s, %s, %s)" % (self.doQuote(user.ident), self.doQuote(amount), self.doQuote(unicodeToDatabase(comment)))) 
    738740        else :     
    739             self.doModify("INSERT INTO payments (userid, amount, description) VALUES ((SELECT id FROM users WHERE username=%s), %s, %s)" % (self.doQuote(self.unicodeToDatabase(user.Name)), self.doQuote(amount), self.doQuote(self.unicodeToDatabase(comment)))) 
     741            self.doModify("INSERT INTO payments (userid, amount, description) VALUES ((SELECT id FROM users WHERE username=%s), %s, %s)" % (self.doQuote(unicodeToDatabase(user.Name)), self.doQuote(amount), self.doQuote(unicodeToDatabase(comment)))) 
    740742         
    741743    def writeLastJobSize(self, lastjob, jobsize, jobprice) :         
     
    748750            # For legal reasons, we want to hide the title, filename and options 
    749751            title = filename = options = "hidden" 
    750         filename = self.unicodeToDatabase(filename) 
    751         title = self.unicodeToDatabase(title) 
    752         options = self.unicodeToDatabase(options) 
    753         jobbilling = self.unicodeToDatabase(jobbilling) 
     752        filename = unicodeToDatabase(filename) 
     753        title = unicodeToDatabase(title) 
     754        options = unicodeToDatabase(options) 
     755        jobbilling = unicodeToDatabase(jobbilling) 
    754756        if (not self.disablehistory) or (not printer.LastJob.Exists) : 
    755757            if jobsize is not None : 
     
    814816            where.append("hostname=%s" % self.doQuote(hostname)) 
    815817        if billingcode is not None :     
    816             where.append("billingcode=%s" % self.doQuote(self.unicodeToDatabase(billingcode))) 
     818            where.append("billingcode=%s" % self.doQuote(unicodeToDatabase(billingcode))) 
    817819        if jobid is not None :     
    818             where.append("jobid=%s" % self.doQuote(jobid)) # TODO : jobid is text, so self.unicodeToDatabase(jobid) but do all of them as well. 
     820            where.append("jobid=%s" % self.doQuote(jobid)) # TODO : jobid is text, so unicodeToDatabase(jobid) but do all of them as well. 
    819821        if start is not None :     
    820822            where.append("jobdate>=%s" % self.doQuote(start))