Changeset 2743

Show
Ignore:
Timestamp:
02/21/06 21:57:12 (18 years ago)
Author:
jerome
Message:

Big improvement for data extraction.

Location:
pykota/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • pykota/trunk/bin/edpykota

    r2742 r2743  
    160160        suffix = (options["groups"] and "Group") or "User"         
    161161        printernames = options["printer"].split(",") 
     162        if not names : 
     163            names = ["*"] 
     164             
     165        before = time.time() 
     166        (printers, entries, pqentries) = getattr(self.storage, "getPrinters%ssAndPQuotas" % suffix)(printernames, names) 
     167        after = time.time() 
     168        self.printInfo("Data extraction took : %.4f seconds" % (after - before)) 
    162169         
    163170        if options["delete"] :     
    164171            self.display("%s...\n" % _("Deletion")) 
    165             #printers = self.storage.getMatchingPrinters(options["printer"]) 
    166             #entries = getattr(self.storage, "getMatching%ss" % suffix)(",".join(names)) 
    167             before = time.time() 
    168             (printers, entries, pqentries) = getattr(self.storage, "getPrinters%ssAndPQuotas" % suffix)(printernames, names) 
    169             after = time.time() 
    170             self.printInfo("Data extraction took %.4f seconds" % (after - before)) 
    171172            nbtotal = len(pqentries) 
    172173            for i in range(nbtotal) : 
     
    177178                self.display("\r%.02f%%" % percent) 
    178179        else : 
    179             if not names : 
    180                 names = ["*"] 
    181             (printers, entries, pqentries) = getattr(self.storage, "getPrinters%ssAndPQuotas" % suffix)(printernames, names) 
    182180            skipexisting = options["skipexisting"] 
    183181            if options["add"] : 
     
    319317                      
    320318if __name__ == "__main__" :  
    321     try :  
    322        import psyco 
    323        psyco.profile() 
    324     except :    
    325        pass 
    326319    retcode = 0 
    327320    try : 
  • pykota/trunk/pykota/storages/sql.py

    r2742 r2743  
    464464    def getPrintersUsersAndPQuotas(self, pnames = ["*"], unames=["*"]) :     
    465465        """Returns all printers, users and users print quota entries which match a set of names.""" 
     466        matchunames = {} 
     467        matchpnames = {} 
    466468        printers = {} 
    467469        users = {} 
    468470        upquotas = {} 
    469         import time 
    470         before = time.time() 
    471471        result = self.doSearch("SELECT users.id AS uid, users.description AS udesc, printers.id AS pid, printers.description AS pdesc, printers.maxjobsize AS pmaxjobsize, userpquota.id AS upqid, userpquota.maxjobsize AS upqmaxjobsize, users.*, printers.*, userpquota.* FROM users, printers, userpquota WHERE users.id=userpquota.userid AND printers.id=userpquota.printerid;") 
    472         after = time.time() 
    473         self.tool.printInfo("SELECT took %.4f seconds." % (after - before)) 
    474472        if result : 
    475473            for record in result : 
    476474                uname = self.databaseToUserCharset(record.get("username")) 
    477475                pname = self.databaseToUserCharset(record.get("printername")) 
    478                 if self.tool.matchString(pname, pnames) and self.tool.matchString(uname, unames) : 
    479                     printer = StoragePrinter(self, pname) 
    480                     printer.ident = record.get("pid") 
    481                     printer.PricePerJob = record.get("priceperjob") or 0.0 
    482                     printer.PricePerPage = record.get("priceperpage") or 0.0 
    483                     printer.Description = self.databaseToUserCharset(record.get("pdesc") or "")  
    484                     printer.MaxJobSize = record.get("pmaxjobsize") or 0 
    485                     printer.PassThrough = record.get("passthrough") or 0 
    486                     if printer.PassThrough in (1, "1", "t", "true", "TRUE", "True") : 
    487                         printer.PassThrough = 1 
    488                     else : 
    489                         printer.PassThrough = 0 
    490                     printer.Exists = 1 
    491                     printers[pname] = printer 
    492                     self.cacheEntry("PRINTERS", pname, printer) 
    493                      
    494                     user = StorageUser(self, uname) 
    495                     user.ident = record.get("uid") 
    496                     user.LimitBy = record.get("limitby") or "quota" 
    497                     user.AccountBalance = record.get("balance") 
    498                     user.LifeTimePaid = record.get("lifetimepaid") 
    499                     user.Email = record.get("email")  
    500                     user.OverCharge = record.get("overcharge") 
    501                     user.Description = self.databaseToUserCharset(record.get("udesc")) 
    502                     user.Exists = 1 
    503                     users[uname] = user 
    504                     self.cacheEntry("USERS", uname, user) 
    505                      
    506                     upqkey = "%s@%s" % (uname, pname) 
    507                     userpquota = StorageUserPQuota(self, user, printer) 
    508                     userpquota.ident = record.get("id") 
    509                     userpquota.PageCounter = record.get("pagecounter") 
    510                     userpquota.LifePageCounter = record.get("lifepagecounter") 
    511                     userpquota.SoftLimit = record.get("softlimit") 
    512                     userpquota.HardLimit = record.get("hardlimit") 
    513                     userpquota.DateLimit = record.get("datelimit") 
    514                     userpquota.WarnCount = record.get("warncount") 
    515                     userpquota.Exists = 1 
    516                     upquotas[upqkey] = userpquota 
    517                     self.cacheEntry("USERPQUOTAS", upqkey, userpquota) 
     476                if not matchpnames.has_key(pname) : 
     477                    matchpnames[pname] = printermatches = self.tool.matchString(pname, pnames) 
     478                else :     
     479                    printermatches = matchpnames[pname] 
     480                if printermatches :     
     481                    if not matchunames.has_key(uname) : 
     482                        matchunames[uname] = usermatches = self.tool.matchString(uname, unames) 
     483                    else :     
     484                        usermatches = matchunames[uname] 
     485                    if usermatches :     
     486                        printer = StoragePrinter(self, pname) 
     487                        printer.ident = record.get("pid") 
     488                        printer.PricePerJob = record.get("priceperjob") or 0.0 
     489                        printer.PricePerPage = record.get("priceperpage") or 0.0 
     490                        printer.Description = self.databaseToUserCharset(record.get("pdesc") or "")  
     491                        printer.MaxJobSize = record.get("pmaxjobsize") or 0 
     492                        printer.PassThrough = record.get("passthrough") or 0 
     493                        if printer.PassThrough in (1, "1", "t", "true", "TRUE", "True") : 
     494                            printer.PassThrough = 1 
     495                        else : 
     496                            printer.PassThrough = 0 
     497                        printer.Exists = 1 
     498                        printers[pname] = printer 
     499                        self.cacheEntry("PRINTERS", pname, printer) 
     500                         
     501                        user = StorageUser(self, uname) 
     502                        user.ident = record.get("uid") 
     503                        user.LimitBy = record.get("limitby") or "quota" 
     504                        user.AccountBalance = record.get("balance") 
     505                        user.LifeTimePaid = record.get("lifetimepaid") 
     506                        user.Email = record.get("email")  
     507                        user.OverCharge = record.get("overcharge") 
     508                        user.Description = self.databaseToUserCharset(record.get("udesc")) 
     509                        user.Exists = 1 
     510                        users[uname] = user 
     511                        self.cacheEntry("USERS", uname, user) 
     512                         
     513                        upqkey = "%s@%s" % (uname, pname) 
     514                        userpquota = StorageUserPQuota(self, user, printer) 
     515                        userpquota.ident = record.get("id") 
     516                        userpquota.PageCounter = record.get("pagecounter") 
     517                        userpquota.LifePageCounter = record.get("lifepagecounter") 
     518                        userpquota.SoftLimit = record.get("softlimit") 
     519                        userpquota.HardLimit = record.get("hardlimit") 
     520                        userpquota.DateLimit = record.get("datelimit") 
     521                        userpquota.WarnCount = record.get("warncount") 
     522                        userpquota.Exists = 1 
     523                        upquotas[upqkey] = userpquota 
     524                        self.cacheEntry("USERPQUOTAS", upqkey, userpquota) 
    518525        return (printers, users, upquotas) 
    519526         
    520527    def getPrintersGroupsAndPQuotas(self, pnames = ["*"], gnames=["*"]) :     
    521528        """Returns all printers, groups and groups print quota entries which match a set of names.""" 
     529        matchgnames = {} 
     530        matchpnames = {} 
    522531        printers = {} 
    523532        groups = {} 
     
    528537                gname = self.databaseToUserCharset(record.get("groupname")) 
    529538                pname = self.databaseToUserCharset(record.get("printername")) 
    530                 if self.tool.matchString(pname, pnames) and self.tool.matchString(gname, gnames) : 
    531                     printer = self.getPrinter(pname) 
    532                     printers[pname] = printer 
    533                     group = self.getGroup(gname) 
    534                     groups[gname] = group 
    535                     gpqkey = "%s@%s" % (gname, pname) 
    536                     gpquotas[upqkey] = self.getGroupPQuota(group, printer) 
     539                if not matchpnames.has_key(pname) : 
     540                    matchpnames[pname] = printermatches = self.tool.matchString(pname, pnames) 
     541                else :     
     542                    printermatches = matchpnames[pname] 
     543                if printermatches :     
     544                    if not matchgnames.has_key(gname) : 
     545                        matchgnames[gname] = groupmatches = self.tool.matchString(gname, gnames) 
     546                    else :     
     547                        groupmatches = matchgnames[gname] 
     548                    if groupmatches :     
     549                        printer = self.getPrinter(pname) 
     550                        printers[pname] = printer 
     551                        group = self.getGroup(gname) 
     552                        groups[gname] = group 
     553                        gpqkey = "%s@%s" % (gname, pname) 
     554                        gpquotas[upqkey] = self.getGroupPQuota(group, printer) 
    537555        return (printers, groups, gpquotas) 
    538556