root / pykota / trunk / bin / warnpykota @ 891

Revision 891, 6.4 kB (checked in by jalet, 21 years ago)

Prepare --groups option to work.

  • 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
3# PyKota Print Quota Warning sender
4#
5# PyKota - Print Quotas for CUPS
6#
7# (c) 2003 Jerome Alet <alet@librelogiciel.com>
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation; either version 2 of the License, or
11# (at your option) any later version.
12#
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16# GNU General Public License for more details.
17#
18# You should have received a copy of the GNU General Public License
19# along with this program; if not, write to the Free Software
20# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
21#
22# $Id$
23#
24# $Log$
25# Revision 1.13  2003/04/08 21:13:44  jalet
26# Prepare --groups option to work.
27#
28# Revision 1.12  2003/04/08 21:10:18  jalet
29# Checks --groups option presence instead of --users because --users is the default.
30#
31# Revision 1.11  2003/03/29 13:45:27  jalet
32# GPL paragraphs were incorrectly (from memory) copied into the sources.
33# Two README files were added.
34# Upgrade script for PostgreSQL pre 1.01 schema was added.
35#
36# Revision 1.10  2003/03/25 11:45:32  jalet
37# Clearer help.
38#
39# Revision 1.9  2003/03/09 23:39:14  jalet
40# Simplified translations.
41#
42# Revision 1.8  2003/02/10 12:07:30  jalet
43# Now repykota should output the recorded total page number for each printer too.
44#
45# Revision 1.7  2003/02/09 13:40:29  jalet
46# typo
47#
48# Revision 1.6  2003/02/09 12:56:53  jalet
49# Internationalization begins...
50#
51# Revision 1.5  2003/02/07 23:24:38  jalet
52# Empty line deleted
53#
54# Revision 1.4  2003/02/06 23:25:40  jalet
55# Cleaner docstring
56#
57# Revision 1.3  2003/02/06 23:20:02  jalet
58# warnpykota doesn't need any user/group name argument, mimicing the
59# warnquota disk quota tool.
60#
61# Revision 1.2  2003/02/06 22:54:33  jalet
62# warnpykota should be ok
63#
64#
65#
66
67import sys
68
69from pykota import version
70from pykota.tool import PyKotaTool, PyKotaToolError
71
72__doc__ = """warnpykota v%s (C) 2003 C@LL - Conseil Internet & Logiciels Libres
73
74Sends mail to users over print quota.
75
76command line usage :
77
78  warnpykota [options]
79
80options :
81
82  -v | --version       Prints warnpykota's version number then exits.
83  -h | --help          Prints this message then exits.
84 
85  -u | --users         Warns users over their print quota, this is the
86                       default.
87 
88  -g | --groups        Warns group administrators instead of users,
89                       for each group over its print quota.
90 
91  -P | --printer p     Verify quotas on this printer only. Actually p can
92                       use wildcards characters to select only
93                       some printers. The default value is *, meaning
94                       all printers.
95 
96examples :                             
97
98  $ warnpykota --printer lp
99 
100  This will warn all users of the lp printer who have exceeded their
101  print quota.
102
103  $ warnpykota
104 
105  This will warn all users  who have exceeded their print quota on
106  any printer.
107
108  $ warnpykota --groups --printer "laserjet*"
109 
110  This will warn all group administrators of groups which have exceeded
111  their print quota on any printer which name begins with "laserjet"
112
113This program is free software; you can redistribute it and/or modify
114it under the terms of the GNU General Public License as published by
115the Free Software Foundation; either version 2 of the License, or
116(at your option) any later version.
117
118This program is distributed in the hope that it will be useful,
119but WITHOUT ANY WARRANTY; without even the implied warranty of
120MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
121GNU General Public License for more details.
122
123You should have received a copy of the GNU General Public License
124along with this program; if not, write to the Free Software
125Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
126
127Please e-mail bugs to: %s""" % (version.__version__, version.__author__)
128       
129class WarnPyKota(PyKotaTool) :       
130    """A class for warnpykota."""
131    def main(self, options) :
132        """Warn users or groups over print quota."""
133        printernames = self.storage.getMatchingPrinters(options["printer"])
134        if not printernames :
135            raise PyKotaToolError, _("There's no printer matching %s") % options["printer"]
136        for (printer, printerpagecounter) in printernames :
137            if options["groups"] :
138                for name in self.storage.getPrinterGroups(printer) :
139                    self.warnGroupPQuota(name, printer)
140            else :
141                for name in self.storage.getPrinterUsers(printer) :
142                    self.warnUserPQuota(name, printer)
143                     
144if __name__ == "__main__" : 
145    try :
146        defaults = { \
147                     "users"  : 0, \
148                     "groups" : 0, \
149                     "printer" : "*", \
150                   }
151        short_options = "vhugP:"
152        long_options = ["help", "version", "users", "groups", "printer="]
153       
154        # Initializes the command line tool
155        sender = WarnPyKota(doc=__doc__)
156       
157        # parse and checks the command line
158        (options, args) = sender.parseCommandline(sys.argv[1:], short_options, long_options, allownothing=1)
159       
160        # sets long options
161        options["help"] = options["h"] or options["help"]
162        options["version"] = options["v"] or options["version"]
163        options["users"] = options["u"] or options["users"] or defaults["users"]
164        options["groups"] = options["g"] or options["groups"] or defaults["groups"]
165        options["printer"] = options["P"] or options["printer"] or defaults["printer"]
166       
167        if options["help"] :
168            sender.display_usage_and_quit()
169        elif options["version"] :
170            sender.display_version_and_quit()
171        elif options["users"] and options["groups"] :   
172            raise PyKotaToolError, _("incompatible options, see help.")
173        elif options["groups"] :   
174            raise PyKotaToolError, _("option --groups is currently not implemented.")
175        elif args :   
176            raise PyKotaToolError, _("unused arguments [%s]. Aborting.") % ", ".join(args)
177        else :
178            sys.exit(sender.main(options))
179    except PyKotaToolError, msg :           
180        sys.stderr.write("%s\n" % msg)
181        sys.stderr.flush()
182        sys.exit(-1)
Note: See TracBrowser for help on using the browser.