Changeset 2782

Show
Ignore:
Timestamp:
03/04/06 15:51:12 (19 years ago)
Author:
jerome
Message:

Code cleaning.
Topped to 10000 the number of times the percent will be displayed by not displaying it if there's no change.
This is very useful when adding 25000 users on 300 printers through an ssh connection...

Location:
pykota/trunk
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • pykota/trunk/bin/edpykota

    r2772 r2782  
    2828import os 
    2929 
    30 from pykota.tool import PyKotaTool, PyKotaToolError, PyKotaCommandLineError, crashed, N_ 
     30from pykota.tool import Percent, PyKotaTool, PyKotaToolError, PyKotaCommandLineError, crashed, N_ 
    3131from pykota.config import PyKotaConfigError 
    3232from pykota.storage import PyKotaStorageError, StorageUserPQuota, StorageGroupPQuota 
     
    197197                        print 
    198198        elif options["delete"] :     
    199             self.display("\n%s..." % _("Deletion")) 
     199            percent = Percent(self, "\n%s..." % _("Deletion"), len(printers) * len(entries)) 
    200200            getattr(self.storage, "deleteMany%sPQuotas" % suffix)(printers, entries) 
    201             self.display("\n") 
     201            percent.display("\n") 
    202202        else : 
    203             self.display("\n")     
    204203            skipexisting = options["skipexisting"] 
    205204            used = options["used"] 
     
    253252            try : 
    254253                if options["add"] : 
    255                     self.display("%s...\n" % _("Creation")) 
     254                    percent = Percent(self, "\n%s...\n" % _("Creation"), len(printers) * len(entries)) 
    256255                    dicnames = {} 
    257256                    for m in entries : 
     
    262261                             
    263262                    factory = globals()["Storage%sPQuota" % suffix] 
    264                     nbtotal = len(printers) * len(entries) 
    265                     i = 0 
    266263                    for printer in printers : 
    267264                        pname = printer.Name 
     
    285282                                                        hardreset, suffix, used) 
    286283                                    oldpqentry.save()                     
    287                             i += 1 
    288                             percent = 100.0 * float(i) / float(nbtotal) 
    289                             self.display("\r%.02f%%" % percent) 
     284                            percent.oneMore() 
    290285                else :         
    291                     nbtotal = len(entries) * len(printers) 
    292                     if nbtotal : 
    293                         self.display("%s...\n" % _("Modification")) 
    294                         i = 0 
    295                         for printer in printers : 
    296                             for entry in entries : 
    297                                 pqkey = "%s@%s" % (entry.Name, printer.Name) 
    298                                 pqentry = getattr(self.storage, "get%sPQuota" % suffix)(entry, printer) 
    299                                 if pqentry.Exists :      
    300                                     self.modifyPQEntry(pqkey, pqentry, noquota, \ 
    301                                                         softlimit, hardlimit, \ 
    302                                                         increase, reset, \ 
    303                                                         hardreset, suffix, used) 
    304                                     pqentry.save()         
    305                                 i += 1             
    306                                 percent = 100.0 * float(i) / float(nbtotal) 
    307                                 self.display("\r%.02f%%" % percent) 
     286                    percent = Percent(self, "\n%s...\n" % _("Modification"), len(entries) * len(printers)) 
     287                    for printer in printers : 
     288                        for entry in entries : 
     289                            pqkey = "%s@%s" % (entry.Name, printer.Name) 
     290                            pqentry = getattr(self.storage, "get%sPQuota" % suffix)(entry, printer) 
     291                            if pqentry.Exists :      
     292                                self.modifyPQEntry(pqkey, pqentry, noquota, \ 
     293                                                    softlimit, hardlimit, \ 
     294                                                    increase, reset, \ 
     295                                                    hardreset, suffix, used) 
     296                                pqentry.save()         
     297                            percent.oneMore() 
    308298            except :                     
    309299                self.storage.rollbackTransaction() 
     
    312302                self.storage.commitTransaction() 
    313303                             
    314         if not options["list"] : 
    315             self.done()          
     304        try : 
     305            percent.done() 
     306        except NameError :     
     307            pass 
    316308             
    317309if __name__ == "__main__" :  
  • pykota/trunk/bin/pkbcodes

    r2770 r2782  
    2929import pwd 
    3030 
    31 from pykota.tool import PyKotaTool, PyKotaToolError, PyKotaCommandLineError, crashed, N_ 
     31from pykota.tool import Percent, PyKotaTool, PyKotaToolError, PyKotaCommandLineError, crashed, N_ 
    3232from pykota.storage import StorageBillingCode 
    3333 
     
    116116                       _("credits")) 
    117117        elif options["delete"] :     
    118             self.display("\n%s..." % _("Deletion")) 
     118            percent = Percent(self, "\n%s..." % _("Deletion"), len(billingcodes)) 
    119119            self.storage.deleteManyBillingCodes(billingcodes) 
    120             self.display("\n") 
     120            percent.display("\n") 
    121121        else : 
    122122            reset = options["reset"] 
     
    129129            try : 
    130130                if options["add"] :     
    131                     self.display("%s...\n" % _("Creation")) 
    132                     nbtotal = len(names) 
    133                     for i in range(nbtotal) : 
    134                         bname = names[i] 
     131                    percent = Percent(self, "%s...\n" % _("Creation"), len(names)) 
     132                    for bname in names : 
    135133                        billingcode = StorageBillingCode(self.storage, bname) 
    136134                        self.modifyBillingCode(billingcode, reset, description) 
     
    143141                                self.modifyBillingCode(oldbillingcode, reset, description) 
    144142                                oldbillingcode.save() 
    145                         percent = 100.0 * float(i) / float(nbtotal) 
    146                         self.display("\r%.02f%%" % percent) 
     143                        percent.oneMore() 
    147144                else :         
    148                     self.display("\n%s...\n" % _("Modification")) 
    149                     nbtotal = len(billingcodes)             
    150                     for i in range(nbtotal) :         
    151                         billingcode = billingcodes[i] 
     145                    percent = Percent(self, "\n%s...\n" % _("Modification"), len(billingcodes)) 
     146                    for billingcode in billingcodes : 
    152147                        self.modifyBillingCode(billingcode, reset, description) 
    153148                        billingcode.save()     
    154                         percent = 100.0 * float(i) / float(nbtotal) 
    155                         self.display("\r%.02f%%" % percent) 
     149                        percent.oneMore() 
    156150            except :                     
    157151                self.storage.rollbackTransaction() 
     
    160154                self.storage.commitTransaction() 
    161155                         
    162         if not options["list"] :                 
    163             self.done() 
     156        try : 
     157            percent.done() 
     158        except NameError :     
     159            pass 
    164160                      
    165161if __name__ == "__main__" :  
  • pykota/trunk/bin/pkprinters

    r2770 r2782  
    2929import pwd 
    3030 
    31 from pykota.tool import PyKotaTool, PyKotaToolError, PyKotaCommandLineError, crashed, N_ 
     31from pykota.tool import Percent, PyKotaTool, PyKotaToolError, PyKotaCommandLineError, crashed, N_ 
    3232from pykota.storage import StoragePrinter 
    3333 
     
    171171                print     
    172172        elif options["delete"] :     
    173             self.display("\n%s..." % _("Deletion")) 
     173            percent = Percent(self, "\n%s..." % _("Deletion"), len(printers)) 
    174174            self.storage.deleteManyPrinters(printers) 
    175             self.display("\n") 
     175            percent.display("\n") 
    176176        else : 
    177177            if options["groups"] :         
     
    217217            try : 
    218218                if options["add"] :     
    219                     self.display("%s...\n" % _("Creation")) 
    220                     nbtotal = len(names) 
    221                     for i in range(nbtotal) : 
    222                         pname = names[i] 
     219                    percent = Percent(self, "%s...\n" % _("Creation"), len(names)) 
     220                    for pname in names : 
    223221                        if self.isValidName(pname) : 
    224222                            printer = StoragePrinter(self.storage, pname) 
     
    244242                        else :     
    245243                            raise PyKotaCommandLineError, _("Invalid printer name %s") % pname 
    246                         percent = 100.0 * float(i) / float(nbtotal) 
    247                         self.display("\r%.02f%%" % percent) 
     244                        percent.oneMore() 
    248245                else :         
    249                     self.display("\n%s...\n" % _("Modification")) 
    250                     nbtotal = len(printers) 
    251                     for i in range(nbtotal) :         
    252                         printer = printers[i] 
     246                    percent = Percent(self, "\n%s...\n" % _("Modification"), len(printers)) 
     247                    for printer in printers :         
    253248                        self.modifyPrinter(printer, charges, perpage, perjob, \ 
    254249                                           description, passthrough, \ 
     
    256251                        printer.save()     
    257252                        self.managePrintersGroups(printersgroups, printer, remove) 
    258                         percent = 100.0 * float(i) / float(nbtotal) 
    259                         self.display("\r%.02f%%" % percent) 
     253                        percent.oneMore() 
    260254            except :                     
    261255                self.storage.rollbackTransaction() 
     
    263257            else :     
    264258                self.storage.commitTransaction() 
    265         if not options["list"] :                 
    266             self.done() 
     259                 
     260        try : 
     261            percent.done() 
     262        except NameError :     
     263            pass 
    267264                      
    268265if __name__ == "__main__" :  
  • pykota/trunk/bin/pkusers

    r2774 r2782  
    3030import grp 
    3131 
    32 from pykota.tool import PyKotaTool, PyKotaToolError, PyKotaCommandLineError, crashed, N_ 
     32from pykota.tool import Percent, PyKotaTool, PyKotaToolError, PyKotaCommandLineError, crashed, N_ 
    3333from pykota.storage import StorageUser, StorageGroup 
    3434 
     
    235235                    print 
    236236        elif options["delete"] :     
    237             self.display("\n%s..." % _("Deletion")) 
     237            percent = Percent(self, "\n%s..." % _("Deletion"), len(entries)) 
    238238            getattr(self.storage, "deleteMany%ss" % suffix)(entries) 
    239             self.display("\n") 
     239            percent.display("\n") 
    240240        else : 
    241241            limitby = options["limitby"] 
     
    286286            try :     
    287287                if options["add"] :     
    288                     self.display("%s...\n" % _("Creation")) 
    289288                    rejectunknown = self.config.getRejectUnknown()     
    290                     nbtotal = len(names) 
    291                     for i in range(nbtotal) : 
    292                         ename = names[i] 
     289                    percent = Percent(self, "%s...\n" % _("Creation"), len(names)) 
     290                    for ename in names : 
    293291                        email = None 
    294292                        if not groups : 
     
    347345                        else : 
    348346                            raise PyKotaCommandLineError, _("Invalid name %s") % ename 
    349                         percent = 100.0 * float(i) / float(nbtotal) 
    350                         self.display("\r%.02f%%" % percent) 
     347                        percent.oneMore() 
    351348                else : 
    352                     self.display("\n%s...\n" % _("Modification")) 
    353                     nbtotal = len(entries) 
    354                     for i in range(nbtotal) :         
    355                         entry = entries[i] 
     349                    percent = Percent(self, "\n%s...\n" % _("Modification"), len(entries))  
     350                    for entry in entries : 
    356351                        if groups : 
    357352                            self.modifyEntry(entry, groups, limitby, description) 
     
    362357                            self.manageUsersGroups(usersgroups, entry, remove)                 
    363358                        entry.save()     
    364                         percent = 100.0 * float(i) / float(nbtotal) 
    365                         self.display("\r%.02f%%" % percent) 
     359                        percent.oneMore() 
    366360            except :                     
    367361                self.storage.rollbackTransaction() 
     
    369363            else :     
    370364                self.storage.commitTransaction() 
    371                                  
    372         if not options["list"] :                 
    373             self.done() 
     365                 
     366        try : 
     367            percent.done() 
     368        except NameError :     
     369            pass 
    374370                      
    375371if __name__ == "__main__" :  
  • pykota/trunk/pykota/tool.py

    r2765 r2782  
    7878    return msg 
    7979 
     80class Percent : 
     81    """A class to display progress.""" 
     82    def __init__(self, app, title, size) : 
     83        """Initializes the engine.""" 
     84        self.app = app 
     85        self.size = size 
     86        self.number = 0 
     87        self.factor = 100.0 / float(size) 
     88        self.previous = None 
     89        self.display(title) 
     90         
     91    def display(self, msg) :     
     92        """Displays the value.""" 
     93        self.app.display(msg) 
     94         
     95    def oneMore(self) :     
     96        """Increments internal counter.""" 
     97        self.number += 1 
     98        percent = "%.02f" % (float(self.number) * self.factor) 
     99        if percent != self.previous : # optimize for large number of items 
     100            self.display("\r%s%%" % percent) 
     101            self.previous = percent 
     102             
     103    def done(self) :          
     104        """Displays the 'done' message.""" 
     105        self.display("\r100.00%%\r        \r%s\n" % _("Done.")) 
     106         
    80107class Tool : 
    81108    """Base class for tools with no database access.""" 
     
    201228            sys.stdout.flush() 
    202229             
    203     def done(self) :     
    204         """Displays the 'done' message.""" 
    205         self.display("\r100.00%%\r        \r%s\n" % _("Done.")) 
    206          
    207230    def logdebug(self, message) :     
    208231        """Logs something to debug output if debug is enabled."""