Show
Ignore:
Timestamp:
09/27/08 22:02:37 (16 years ago)
Author:
jerome
Message:

Removed unnecessary spaces at EOL.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • pykota/trunk/bin/pkprinters

    r3411 r3413  
    99# the Free Software Foundation, either version 3 of the License, or 
    1010# (at your option) any later version. 
    11 #  
     11# 
    1212# This program is distributed in the hope that it will be useful, 
    1313# but WITHOUT ANY WARRANTY; without even the implied warranty of 
    1414# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
    1515# GNU General Public License for more details. 
    16 #  
     16# 
    1717# You should have received a copy of the GNU General Public License 
    1818# along with this program.  If not, see <http://www.gnu.org/licenses/>. 
     
    4747  -v | --version       Prints pkprinters's version number then exits. 
    4848  -h | --help          Prints this message then exits. 
    49    
    50   -a | --add           Adds printers if they don't exist on the Quota  
     49 
     50  -a | --add           Adds printers if they don't exist on the Quota 
    5151                       Storage Server. If they exist, they are modified 
    5252                       unless -s|--skipexisting is also used. 
    53                         
     53 
    5454  -d | --delete        Deletes printers from the quota storage. 
    55    
     55 
    5656  -D | --description d Adds a textual description to printers. 
    5757 
     
    6262                       If both are to be set, separate them with a comma. 
    6363                       Floating point and negative values are allowed. 
    64    
    65   -g | --groups pg1[,pg2...] Adds or Remove the printer(s) to the printer  
     64 
     65  -g | --groups pg1[,pg2...] Adds or Remove the printer(s) to the printer 
    6666                       groups pg1, pg2, etc... which must already exist. 
    6767                       A printer group is just like a normal printer, 
    6868                       only that it is usually unknown from the printing 
    6969                       system. Create printer groups exactly the same 
    70                        way that you create printers, then add other  
     70                       way that you create printers, then add other 
    7171                       printers to them with this option. 
    7272                       Accounting is done on a printer and on all 
     
    7474                       is done on a printer and on all the printer groups 
    7575                       it belongs to. 
    76                        If the --remove option below is not used, the  
     76                       If the --remove option below is not used, the 
    7777                       default action is to add printers to the specified 
    7878                       printer groups. 
    79                         
     79 
    8080  -l | --list          List informations about the printer(s) and the 
    8181                       printers groups it is a member of. 
    82                         
    83   -r | --remove        In combination with the --groups option above,                        
     82 
     83  -r | --remove        In combination with the --groups option above, 
    8484                       remove printers from the specified printers groups. 
    85                         
     85 
    8686  -s | --skipexisting  In combination with the --add option above, tells 
    8787                       pkprinters to not modify existing printers. 
    88                         
     88 
    8989  -m | --maxjobsize s  Sets the maximum job size allowed on the printer 
    9090                       to s pages. 
    91                         
     91 
    9292  -p | --passthrough   Activate passthrough mode for the printer. In this 
    9393                       mode, users are allowed to print without any impact 
    9494                       on their quota or account balance. 
    95                         
     95 
    9696  -n | --nopassthrough Deactivate passthrough mode for the printer. 
    97                        Without -p or -n, printers are created in  
     97                       Without -p or -n, printers are created in 
    9898                       normal mode, i.e. no passthrough. 
    99    
    100   printer1 through printerN can contain wildcards if the --add option  
     99 
     100  printer1 through printerN can contain wildcards if the --add option 
    101101  is not set. 
    102    
    103 examples :                               
     102 
     103examples : 
    104104 
    105105  $ pkprinters --add -D "HP Printer" --charge 0.05,0.1 hp2100 hp2200 hp8000 
    106    
     106 
    107107  Will create three printers named hp2100, hp2200 and hp8000. 
    108108  Their price per page will be set at 0.05 unit, and their price 
     
    110110  or whatever you want them to mean. 
    111111  All of their descriptions will be set to the string "HP Printer". 
    112   If any of these printers already exists, it will also be modified  
     112  If any of these printers already exists, it will also be modified 
    113113  unless the -s|--skipexisting command line option is also used. 
    114              
     114 
    115115  $ pkprinters --delete "*" 
    116    
     116 
    117117  This will completely delete all printers and associated quota information, 
    118118  as well as their job history. USE WITH CARE ! 
    119    
     119 
    120120  $ pkprinters --groups Laser,HP "hp*" 
    121    
    122   This will put all printers which name matches "hp*" into printers groups  
     121 
     122  This will put all printers which name matches "hp*" into printers groups 
    123123  Laser and HP, which MUST already exist. 
    124    
     124 
    125125  $ pkprinters --groups LexMark --remove hp2200 
    126    
     126 
    127127  This will remove the hp2200 printer from the LexMark printer group. 
    128128""") 
    129          
    130 class PKPrinters(PyKotaTool) :         
     129 
     130class PKPrinters(PyKotaTool) : 
    131131    """A class for a printers manager.""" 
    132132    def modifyPrinter(self, printer, charges, perpage, perjob, description, passthrough, nopassthrough, maxjobsize) : 
    133133        if charges : 
    134             printer.setPrices(perpage, perjob)     
     134            printer.setPrices(perpage, perjob) 
    135135        if description is not None :        # NB : "" is allowed ! 
    136136            printer.setDescription(description) 
    137         if nopassthrough :     
     137        if nopassthrough : 
    138138            printer.setPassThrough(False) 
    139         if passthrough :     
     139        if passthrough : 
    140140            printer.setPassThrough(True) 
    141141        if maxjobsize is not None : 
    142142            printer.setMaxJobSize(maxjobsize) 
    143              
    144     def managePrintersGroups(self, pgroups, printer, remove) :         
     143 
     144    def managePrintersGroups(self, pgroups, printer, remove) : 
    145145        """Manage printer group membership.""" 
    146146        for pgroup in pgroups : 
     
    148148                pgroup.delPrinterFromGroup(printer) 
    149149            else : 
    150                 pgroup.addPrinterToGroup(printer)     
    151                  
    152     def getPrinterDeviceURI(self, printername) :             
     150                pgroup.addPrinterToGroup(printer) 
     151 
     152    def getPrinterDeviceURI(self, printername) : 
    153153        """Returns the Device URI attribute for a particular printer.""" 
    154154        if not printername : 
     
    159159        try : 
    160160            return cups.doRequest(req).printer["device-uri"][0][1] 
    161         except :     
     161        except : 
    162162            self.printInfo(_("Impossible to retrieve %(printername)s's DeviceURI") % locals(), "warn") 
    163163            return "" 
    164          
     164 
    165165    def isPrinterCaptured(self, printername=None, deviceuri=None) : 
    166166        """Returns True if the printer is already redirected through PyKota's backend, else False.""" 
    167167        if (deviceuri or self.getPrinterDeviceURI(printername)).find("cupspykota:") != -1 : 
    168168            return True 
    169         else :     
     169        else : 
    170170            return False 
    171          
    172     def reroutePrinterThroughPyKota(self, printer) :     
     171 
     172    def reroutePrinterThroughPyKota(self, printer) : 
    173173        """Reroutes a CUPS printer through PyKota.""" 
    174174        uri = self.getPrinterDeviceURI(printer.Name) 
     
    177177             os.system('lpadmin -p "%s" -v "%s"' % (printer.Name, newuri)) 
    178178             self.logdebug("Printer %s rerouted to %s" % (printer.Name, newuri)) 
    179               
    180     def deroutePrinterFromPyKota(self, printer) :     
     179 
     180    def deroutePrinterFromPyKota(self, printer) : 
    181181        """Deroutes a PyKota printer through CUPS only.""" 
    182182        uri = self.getPrinterDeviceURI(printer.Name) 
     
    187187             os.system('lpadmin -p "%s" -v "%s"' % (printer.Name, newuri)) 
    188188             self.logdebug("Printer %s rerouted to %s" % (printer.Name, newuri)) 
    189                                       
     189 
    190190    def main(self, names, options) : 
    191191        """Manage printers.""" 
    192192        if not options["list"] : 
    193193            self.adminOnly() 
    194              
     194 
    195195        docups = options["cups"] 
    196          
    197         if not options["list"] :     
     196 
     197        if not options["list"] : 
    198198            percent = Percent(self) 
    199              
     199 
    200200        if not options["add"] : 
    201201            if not options["list"] : 
     
    208208                    percent.display("\n") 
    209209                raise PyKotaCommandLineError, _("There's no printer matching %s") % " ".join(names) 
    210             if not options["list"] :     
     210            if not options["list"] : 
    211211                percent.setSize(len(printers)) 
    212                  
     212 
    213213        if options["list"] : 
    214214            for printer in printers : 
     
    220220                print "    %s" % (_("Maximum job size : %s") % ((printer.MaxJobSize and (_("%s pages") % printer.MaxJobSize)) or _("Unlimited"))) 
    221221                print "    %s" % (_("Routed through PyKota : %s") % ((self.isPrinterCaptured(printer.Name) and _("YES")) or _("NO"))) 
    222                 if parents :  
     222                if parents : 
    223223                    print "    %s %s" % (_("in"), parents) 
    224                 print     
    225         elif options["delete"] :     
     224                print 
     225        elif options["delete"] : 
    226226            percent.display("\n%s..." % _("Deletion")) 
    227227            self.storage.deleteManyPrinters(printers) 
     
    233233                    percent.oneMore() 
    234234        else : 
    235             if options["groups"] :         
     235            if options["groups"] : 
    236236                printersgroups = self.storage.getMatchingPrinters(options["groups"]) 
    237237                if not printersgroups : 
    238238                    raise PyKotaCommandLineError, _("There's no printer matching %s") % " ".join(options["groups"].split(',')) 
    239             else :          
     239            else : 
    240240                printersgroups = [] 
    241                      
     241 
    242242            if options["charge"] : 
    243243                try : 
    244244                    charges = [float(part) for part in options["charge"].split(',', 1)] 
    245                 except ValueError :     
     245                except ValueError : 
    246246                    raise PyKotaCommandLineError, _("Invalid charge amount value %s") % options["charge"] 
    247                 else :     
     247                else : 
    248248                    if len(charges) > 2 : 
    249249                        charges = charges[:2] 
     
    251251                        charges = [charges[0], None] 
    252252                    (perpage, perjob) = charges 
    253             else :         
     253            else : 
    254254                charges = perpage = perjob = None 
    255                      
    256             if options["maxjobsize"] :         
     255 
     256            if options["maxjobsize"] : 
    257257                try : 
    258258                    maxjobsize = int(options["maxjobsize"]) 
    259259                    if maxjobsize < 0 : 
    260260                        raise ValueError 
    261                 except ValueError :     
     261                except ValueError : 
    262262                    raise PyKotaCommandLineError, _("Invalid maximum job size value %s") % options["maxjobsize"] 
    263             else :         
     263            else : 
    264264                maxjobsize = None 
    265                      
     265 
    266266            description = options["description"] 
    267267            if description : 
    268268                description = description.strip() 
    269                  
    270             nopassthrough = options["nopassthrough"]     
     269 
     270            nopassthrough = options["nopassthrough"] 
    271271            passthrough = options["passthrough"] 
    272272            remove = options["remove"] 
     
    274274            self.storage.beginTransaction() 
    275275            try : 
    276                 if options["add"] :     
     276                if options["add"] : 
    277277                    percent.display("%s...\n" % _("Creation")) 
    278278                    percent.setSize(len(names)) 
     
    283283                                           description, passthrough, \ 
    284284                                           nopassthrough, maxjobsize) 
    285                             oldprinter = self.storage.addPrinter(printer)                
    286                              
     285                            oldprinter = self.storage.addPrinter(printer) 
     286 
    287287                            if docups : 
    288288                                 self.reroutePrinterThroughPyKota(printer) 
    289                                       
     289 
    290290                            if oldprinter is not None : 
    291291                                if skipexisting : 
    292292                                    self.logdebug(_("Printer %s already exists, skipping.") % pname) 
    293                                 else :     
     293                                else : 
    294294                                    self.logdebug(_("Printer %s already exists, will be modified.") % pname) 
    295295                                    self.modifyPrinter(oldprinter, charges, \ 
     
    297297                                               passthrough, nopassthrough, \ 
    298298                                               maxjobsize) 
    299                                     oldprinter.save()            
     299                                    oldprinter.save() 
    300300                                    self.managePrintersGroups(printersgroups, oldprinter, remove) 
    301                             elif printersgroups :         
     301                            elif printersgroups : 
    302302                                self.managePrintersGroups(printersgroups, \ 
    303303                                                          self.storage.getPrinter(pname), \ 
    304304                                                          remove) 
    305                         else :     
     305                        else : 
    306306                            raise PyKotaCommandLineError, _("Invalid printer name %s") % pname 
    307307                        percent.oneMore() 
    308                 else :         
     308                else : 
    309309                    percent.display("\n%s...\n" % _("Modification")) 
    310                     for printer in printers :         
     310                    for printer in printers : 
    311311                        self.modifyPrinter(printer, charges, perpage, perjob, \ 
    312312                                           description, passthrough, \ 
    313313                                           nopassthrough, maxjobsize) 
    314                         printer.save()     
     314                        printer.save() 
    315315                        self.managePrintersGroups(printersgroups, printer, remove) 
    316316                        if docups : 
    317317                            self.reroutePrinterThroughPyKota(printer) 
    318318                        percent.oneMore() 
    319             except :                     
     319            except : 
    320320                self.storage.rollbackTransaction() 
    321321                raise 
    322             else :     
     322            else : 
    323323                self.storage.commitTransaction() 
    324                  
     324 
    325325        if not options["list"] : 
    326326            percent.done() 
    327                       
    328 if __name__ == "__main__" :  
     327 
     328if __name__ == "__main__" : 
    329329    retcode = 0 
    330330    try : 
     
    334334                        "skipexisting", "passthrough", "nopassthrough", \ 
    335335                        "maxjobsize="] 
    336          
     336 
    337337        # Initializes the command line tool 
    338338        manager = PKPrinters(doc=__doc__) 
    339339        manager.deferredInit() 
    340          
     340 
    341341        # parse and checks the command line 
    342342        (options, args) = manager.parseCommandline(sys.argv[1:], short_options, long_options) 
    343          
     343 
    344344        # sets long options 
    345345        options["help"] = options["h"] or options["help"] 
     
    349349        options["charge"] = options["c"] or options["charge"] 
    350350        options["description"] = options["D"] or options["description"] 
    351         options["delete"] = options["d"] or options["delete"]  
     351        options["delete"] = options["d"] or options["delete"] 
    352352        options["groups"] = options["g"] or options["groups"] 
    353353        options["list"] = options["l"] or options["list"] 
     
    357357        options["passthrough"] = options["p"] or options["passthrough"] 
    358358        options["nopassthrough"] = options["n"] or options["nopassthrough"] 
    359          
     359 
    360360        if options["help"] : 
    361361            manager.display_usage_and_quit() 
     
    374374        else : 
    375375            retcode = manager.main(args, options) 
    376     except KeyboardInterrupt :         
     376    except KeyboardInterrupt : 
    377377        logerr("\nInterrupted with Ctrl+C !\n") 
    378378        retcode = -3 
    379     except PyKotaCommandLineError, msg :     
     379    except PyKotaCommandLineError, msg : 
    380380        logerr("%s : %s\n" % (sys.argv[0], msg)) 
    381381        retcode = -2 
    382     except SystemExit :         
     382    except SystemExit : 
    383383        pass 
    384384    except : 
    385385        try : 
    386386            manager.crashed("pkprinters failed") 
    387         except :     
     387        except : 
    388388            crashed("pkprinters failed") 
    389389        retcode = -1 
     
    391391    try : 
    392392        manager.storage.close() 
    393     except (TypeError, NameError, AttributeError) :     
     393    except (TypeError, NameError, AttributeError) : 
    394394        pass 
    395          
    396     sys.exit(retcode)     
     395 
     396    sys.exit(retcode)