root / pykota / trunk / bin / warnpykota @ 900

Revision 900, 6.5 kB (checked in by jalet, 21 years ago)

Job history added. Upgrade script neutralized for now !

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