Show
Ignore:
Timestamp:
02/06/03 15:28:59 (21 years ago)
Author:
jalet
Message:

edpykota should be ok, minus some typos

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • pykota/trunk/bin/edpykota

    r717 r719  
    1717# 
    1818# $Log$ 
     19# Revision 1.4  2003/02/06 14:28:59  jalet 
     20# edpykota should be ok, minus some typos 
     21# 
    1922# Revision 1.3  2003/02/06 10:47:21  jalet 
    2023# Documentation string and command line options didn't match. 
     
    5255  -u | --users         Edit users print quotas, this is the default. 
    5356   
    54   -P | --printer p     Edit quotas on printer p only. 
     57  -P | --printer p     Edit quotas on printer p only. Actually p can 
     58                       use wildcards characters to select only 
     59                       some printers. The default value is *, meaning 
     60                       all printers. 
    5561   
    5662  -g | --groups        Edit groups print quotas instead of users. 
     
    105111Please e-mail bugs to: %s""" % (version.__version__, version.__author__) 
    106112         
    107 def main(arguments, options) : 
    108     """Edit user or group quotas.""" 
    109     pass 
    110      
     113class EdPyKota(PyKotaTool) :         
     114    """A class for edpykota.""" 
     115    def main(self, names, options) : 
     116        """Edit user or group quotas.""" 
     117        printernames = self.storage.getMatchingPrinters(options["printer"]) 
     118        if not printernames : 
     119            raise PyKotaToolError, "There's no printer matching %s" % options["printer"] 
     120        softlimit = hardlimit = None     
     121        if options["softlimit"] : 
     122            try : 
     123                softlimit = int(options["softlimit"].strip()) 
     124            except ValueError :     
     125                raise PyKotaToolError, "Invalid softlimit value %s." % options["softlimit"] 
     126        if options["hardlimit"] : 
     127            try : 
     128                hardlimit = int(options["hardlimit"].strip()) 
     129            except ValueError :     
     130                raise PyKotaToolError, "Invalid hardlimit value %s." % options["hardlimit"] 
     131        if hardlimit < softlimit :         
     132            # error, exchange them 
     133            self.logger.log_message("Hard limit %i is less than soft limit %i, values will be exchanged." % (hardlimit, softlimit), "warn") 
     134            (softlimit, hardlimit) = (hardlimit, softlimit) 
     135        for printer in printernames : 
     136            if options["prototype"] : 
     137                if options["users"] : 
     138                    prototype = self.storage.getUserPQuota(options["prototype"], printer) 
     139                else :      
     140                    prototype = self.storage.getGroupPQuota(options["prototype"], printer) 
     141                if prototype is None : 
     142                    self.logger.message("Prototype %s not found in Quota Storage for printer %s." % (options["prototype"], printer)) 
     143                    continue    # skip this printer 
     144                else :     
     145                    (softlimit, hardlimit) = (prototype["softlimit"], prototype["hardlimit"]) 
     146            if (hardlimit is None) or (softlimit is None) :         
     147                raise PyKotaToolError, "Both hard and soft limits must be set !  Aborting." 
     148            if hardlimit is None :     
     149                hardlimit = softlimit 
     150                self.logger.message("Undefined hard limit set to %i on printer %s." % (hardlimit, printer)) 
     151            if softlimit is None :     
     152                softlimit = hardlimit 
     153                self.logger.message("Undefined soft limit set to %i on printer %s." % (softlimit, printer)) 
     154            for name in names : 
     155                if options["users"] : 
     156                    quota = self.storage.getUserPQuota(name, printer) 
     157                else : 
     158                    quota = self.storage.getGroupPQuota(name, printer) 
     159                if quota is None : 
     160                    # not found 
     161                    if options["add"] : 
     162                        if options["users"] : 
     163                            self.storage.addUserPQuota(name, printer) 
     164                            quota = self.storage.getUserPQuota(name, printer) 
     165                        else : 
     166                            self.storage.addGroupPQuota(name, printer) 
     167                            quota = self.storage.getGroupPQuota(name, printer) 
     168                if quota is None :      
     169                    self.logger.log_message("Quota not found for object %s on printer %s." % (name, printer)) 
     170                else :     
     171                    if options["users"] : 
     172                        self.storage.setUserPQuota(name, printer, softlimit, hardlimit) 
     173                    else : 
     174                        self.storage.setGroupPQuota(name, printer, softlimit, hardlimit) 
     175                      
    111176if __name__ == "__main__" :  
    112177    try : 
    113         tool = PyKotaTool(doc=__doc__) 
    114          
    115178        defaults = { \ 
    116179                     "users"  : 1, \ 
    117180                     "groups" : 0, \ 
     181                     "printer" : "*", \ 
    118182                   } 
    119183        short_options = "vhaugp:P:S:H:" 
     
    121185         
    122186        # Initializes the command line tool 
    123         tool = PyKotaTool(doc=__doc__) 
     187        tool = EdPyKota(doc=__doc__) 
    124188         
    125189        # parse and checks the command line 
     
    143207        elif options["users"] and options["groups"] :     
    144208            raise PyKotaToolError, "edpykota: options --users and --groups are incompatible.\n" 
    145         elif options["groups"] : # TODO : add support for group quotas     
    146             raise PyKotaToolError, "edpykota: group quotas are currently not implemented, sorry.\n" 
     209        elif (options["softlimit"] or options["hardlimit"]) and optiions["prototype"] :     
     210            raise PyKotaToolError, "edpykota: options --softlimit or --hardlimit and --prototype are incompatible.\n" 
     211        elif options["groups"] :     
     212            raise PyKotaToolError, "edpykota: options --groups is currently not implemented.\n" 
    147213        else : 
    148             apply(main, args, options) 
     214            sys.exit(apply(tool.main, args, options)) 
    149215    except PyKotaToolError, msg :             
    150216        sys.stderr.write("%s\n" % msg)