root / pykota / trunk / bin / autopykota @ 2216

Revision 2216, 5.9 kB (checked in by jerome, 19 years ago)

Now exits with no traceback in case of Ctrl+C

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