root / pykota / trunk / bin / autopykota @ 1814

Revision 1814, 6.6 kB (checked in by jalet, 20 years ago)

More complete PATH.
pkhint doesn't use absolute path to search for helper commands anymore.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
Line 
1#! /usr/bin/env python
2# -*- coding: ISO-8859-15 -*-
3
4# autopykota : script to automate user creation in PyKota
5#
6# PyKota - Print Quotas for CUPS and LPRng
7#
8# (c) 2003-2004 Jerome Alet <alet@librelogiciel.com>
9# This program is free software; you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation; either version 2 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program; if not, write to the Free Software
21# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
22#
23# $Id$
24#
25# $Log$
26# Revision 1.7  2004/10/13 08:09:19  jalet
27# More complete PATH.
28# pkhint doesn't use absolute path to search for helper commands anymore.
29#
30# Revision 1.6  2004/10/11 22:53:05  jalet
31# Postponed string interpolation to help message's output method
32#
33# Revision 1.5  2004/10/11 22:08:06  jalet
34# Incorrect doc for autopykota
35#
36# Revision 1.4  2004/10/11 12:49:05  jalet
37# Renders help translatable
38#
39# Revision 1.3  2004/10/06 07:51:07  jalet
40# Now autopykota uses 0.0 as the default value for initial account balance
41# if the --initbalance command line option is not used.
42#
43# Revision 1.2  2004/09/30 11:22:30  jalet
44# Extends the PATH and doesn't use absolute path anymore to launch edpykota.
45#
46# Revision 1.1  2004/09/30 09:52:45  jalet
47# Initial release of autopykota. Reading help or manpage is greatly
48# encouraged !
49#
50#
51#
52
53import sys
54import os
55
56from pykota.tool import PyKotaTool, PyKotaToolError, crashed, N_
57
58__doc__ = N_("""autopykota v%s (c) 2003-2004 C@LL - Conseil Internet & Logiciels Libres
59A tool to automate user account creation and initial balance setting.
60
61THIS TOOL MUST NOT BE USED IF YOU WANT TO LIMIT YOUR USERS BY PAGE QUOTA !
62
63command line usage :
64
65  THIS TOOL MUST NOT BE USED FROM THE COMMAND LINE BUT ONLY AS PART
66  OF AN external policy IN pykota.conf
67 
68  autopykota { -i | --initbalance value }
69
70options :
71
72  -v | --version       Prints autopykota's version number then exits.
73  -h | --help          Prints this message then exits.
74 
75  -i | --initbalance b Sets the user's account initial balance value to b.
76                       If the user already exists, actual balance is left
77                       unmodified. If unset, the default value is 0.
78                       
79This program is free software; you can redistribute it and/or modify
80it under the terms of the GNU General Public License as published by
81the Free Software Foundation; either version 2 of the License, or
82(at your option) any later version.
83
84This program is distributed in the hope that it will be useful,
85but WITHOUT ANY WARRANTY; without even the implied warranty of
86MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
87GNU General Public License for more details.
88
89You should have received a copy of the GNU General Public License
90along with this program; if not, write to the Free Software
91Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
92
93Please e-mail bugs to: %s""")
94
95class AutoPyKota(PyKotaTool) :
96    """A class for the automat."""
97    def main(self, arguments, options) :
98        """Main entry point."""
99        os.environ["PATH"] = "%s:/bin:/usr/bin:/usr/local/bin:/opt/bin:/sbin:/usr/sbin" % os.environ.get("PATH", "")
100        username = os.environ.get("PYKOTAUSERNAME")
101        printername = os.environ.get("PYKOTAPRINTERNAME")
102        if (username is None) or (printername is None) :
103            raise PyKotaToolError, "Either the username or the printername is undefined. Fatal Error."
104        else :
105            user = self.storage.getUser(username)
106            if user.Exists :
107                self.logdebug("User %s already exits." % username) 
108                printer = self.storage.getPrinter(printername)
109                if printer.Exists :
110                    userpquota = self.storage.getUserPQuota(user, printer)
111                    if userpquota.Exists :
112                        self.logdebug("User %s's quota entry on printer %s already exists. Nothing to do." % (username, printername))
113                        return 0
114                    else :   
115                        self.logdebug("Creating a quota entry for user %s on printer %s." % (username, printername))
116                        return os.system('edpykota --add --printer "%s" "%s"' % (printername, username))
117                else :
118                    self.logdebug("Printer %s doesn't exist. Creating printer %s and a quota entry for user %s on printer %s." % (printername, printername, username, printername))
119                    return os.system('edpykota --add --printer "%s" "%s"' % (printername, username))
120            else :
121                self.logdebug("User %s doesn't exist yet." % username)
122                self.logdebug("Creating user %s's account with balance %.2f and quota entries on all existing printers." % (username, options["initbalance"]))
123                return os.system('edpykota --add --limitby balance --balance "%s" "%s"' % (options["initbalance"], username))
124   
125if __name__ == "__main__" :   
126    retcode = 0
127    try :
128        defaults = { \
129                     "initbalance" : 0.0
130                   }
131        short_options = "vhi:"
132        long_options = ["help", "version", "initbalance="]
133       
134        # Initializes the command line tool
135        automat = AutoPyKota(doc=__doc__)
136       
137        # parse and checks the command line
138        (options, args) = automat.parseCommandline(sys.argv[1:], short_options, long_options)
139       
140        # sets long options
141        options["help"] = options["h"] or options["help"]
142        options["version"] = options["v"] or options["version"]
143        options["initbalance"] = options["i"] or options["initbalance"] or defaults["initbalance"]
144       
145        if options["help"] :
146            automat.display_usage_and_quit()
147        elif options["version"] :
148            automat.display_version_and_quit()
149        elif args :   
150            raise PyKotaToolError, "autopykota doesn't accept non option arguments !"
151        else :
152            retcode = automat.main(args, options)
153    except SystemExit :       
154        pass
155    except :
156        try :
157            automat.crashed("autopykota failed")
158        except :   
159            crashed("autopykota failed")
160        retcode = -1
161
162    try :
163        automat.storage.close()
164    except (TypeError, NameError, AttributeError) :   
165        pass
166       
167    sys.exit(retcode)   
Note: See TracBrowser for help on using the browser.