root / pykota / trunk / bin / autopykota @ 1977

Revision 1863, 6.7 kB (checked in by jalet, 20 years ago)

Fixes a string interpolation problem

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