root / pykota / trunk / bin / repykota @ 2147

Revision 2147, 6.1 kB (checked in by jerome, 19 years ago)

Removed all references to $Log$

  • 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# PyKota Print Quota Reports generator
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
29import pwd
30
31from mx import DateTime
32
33from pykota.tool import PyKotaTool, PyKotaToolError, crashed, N_
34from pykota.config import PyKotaConfigError
35from pykota.storage import PyKotaStorageError
36from pykota.reporter import PyKotaReporterError
37from pykota import reporter
38
39__doc__ = N_("""repykota v%s (c) 2003, 2004, 2005 C@LL - Conseil Internet & Logiciels Libres
40
41Generates print quota reports.
42
43command line usage :
44
45  repykota [options]
46
47options :
48
49  -v | --version       Prints repykota's version number then exits.
50  -h | --help          Prints this message then exits.
51 
52  -u | --users         Generates a report on users quota, this is
53                       the default.
54 
55  -g | --groups        Generates a report on group quota instead of users.
56 
57  -P | --printer p     Report quotas on this printer only. Actually p can
58                       use wildcards characters to select only
59                       some printers. The default value is *, meaning
60                       all printers.
61                       You can specify several names or wildcards,
62                       by separating them with commas.
63 
64examples :                             
65
66  $ repykota --printer lp
67 
68  This will print the quota status for all users who use the lp printer.
69
70  $ repykota
71 
72  This will print the quota status for all users on all printers.
73 
74  $ repykota --printer "laser*,*pson" jerome "jo*"
75 
76  This will print the quota status for user jerome and all users
77  whose name begins with "jo" on all printers which name begins
78  with "laser" or ends with "pson".
79 
80  If launched by an user who is not a PyKota administrator, additionnal
81  arguments representing users or groups names are ignored, and only the
82  current user/group is reported.
83
84This program is free software; you can redistribute it and/or modify
85it under the terms of the GNU General Public License as published by
86the Free Software Foundation; either version 2 of the License, or
87(at your option) any later version.
88
89This program is distributed in the hope that it will be useful,
90but WITHOUT ANY WARRANTY; without even the implied warranty of
91MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
92GNU General Public License for more details.
93
94You should have received a copy of the GNU General Public License
95along with this program; if not, write to the Free Software
96Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
97
98Please e-mail bugs to: %s""")
99       
100class RePyKota(PyKotaTool) :       
101    """A class for repykota."""
102    def main(self, ugnames, options) :
103        """Print Quota reports generator."""
104        if self.config.isAdmin :
105            # PyKota administrator
106            if not ugnames :
107                # no username, means all usernames
108                ugnames = [ "*" ]
109        else :       
110            # not the root user
111            # reports only the current user
112            username = pwd.getpwuid(os.geteuid())[0]
113            if options["groups"] :
114                user = self.storage.getUser(username)
115                if user.Exists :
116                    ugnames = [ g.Name for g in self.storage.getUserGroups(user) ]
117                else :   
118                    ugnames = [ ]
119            else :
120                ugnames = [ username ]
121       
122        printers = self.storage.getMatchingPrinters(options["printer"])
123        if not printers :
124            raise PyKotaToolError, _("There's no printer matching %s") % options["printer"]
125           
126        self.reportingtool = reporter.openReporter(self, "text", printers, ugnames, (options["groups"] and 1) or 0)   
127        print self.reportingtool.generateReport()
128                   
129if __name__ == "__main__" : 
130    retcode = 0
131    try :
132        defaults = { \
133                     "printer" : "*", \
134                   }
135        short_options = "vhugP:"
136        long_options = ["help", "version", "users", "groups", "printer="]
137       
138        # Initializes the command line tool
139        reportTool = RePyKota(doc=__doc__)
140       
141        # parse and checks the command line
142        (options, args) = reportTool.parseCommandline(sys.argv[1:], short_options, long_options, allownothing=1)
143       
144        # sets long options
145        options["help"] = options["h"] or options["help"]
146        options["version"] = options["v"] or options["version"]
147        options["users"] = options["u"] or options["users"]
148        options["groups"] = options["g"] or options["groups"]
149        options["printer"] = options["P"] or options["printer"] or defaults["printer"]
150       
151        if options["help"] :
152            reportTool.display_usage_and_quit()
153        elif options["version"] :
154            reportTool.display_version_and_quit()
155        elif options["users"] and options["groups"] :   
156            raise PyKotaToolError, _("incompatible options, see help.")
157        else :
158            retcode = reportTool.main(args, options)
159    except SystemExit :       
160        pass
161    except :
162        try :
163            reportTool.crashed("repykota failed")
164        except :   
165            crashed("repykota failed")
166        retcode = -1
167
168    try :
169        reportTool.storage.close()
170    except (TypeError, NameError, AttributeError) :   
171        pass
172       
173    sys.exit(retcode)   
Note: See TracBrowser for help on using the browser.