root / pykota / trunk / bin / dumpykota @ 3094

Revision 3094, 7.5 kB (checked in by jerome, 17 years ago)

Documented the start= and end= filters for the data dumper.

  • 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 Data Dumper
5#
6# PyKota - Print Quotas for CUPS and LPRng
7#
8# (c) 2003, 2004, 2005, 2006 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22#
23# $Id$
24#
25#
26
27import sys
28
29from pykota.tool import PyKotaCommandLineError, crashed, N_
30from pykota.dumper import DumPyKota
31
32__doc__ = N_("""dumpykota v%(__version__)s (c) %(__years__)s %(__author__)s
33
34Dumps PyKota database's content.
35
36command line usage :
37
38  dumpykota [options] [filterexpr]
39
40options :
41
42  -v | --version       Prints dumpykota's version number then exits.
43  -h | --help          Prints this message then exits.
44 
45  -d | --data type     Dumps 'type' datas. Allowed types are :
46                       
47                         - history : dumps the jobs history.
48                         - users : dumps users.
49                         - groups : dumps user groups.
50                         - printers : dump printers.
51                         - upquotas : dump user quotas.
52                         - gpquotas : dump user groups quotas.
53                         - payments : dumps user payments.
54                         - pmembers : dumps printer groups members.
55                         - umembers : dumps user groups members.
56                         - billingcodes : dumps billing codes.
57                         - all : dumps all PyKota datas. The output format
58                                 is always XML in this case.
59                         
60                       NB : the -d | --data command line option   
61                       is MANDATORY.
62 
63  -f | --format fmt    Dumps datas in the 'fmt' format. When not specified,
64                       the format is to dump datas in the csv format (comma
65                       separated values). All data dumped is between double
66                       quotes. Allowed formats are :
67                       
68                         - csv : separate datas with commas
69                         - ssv : separate datas with semicolons
70                         - tsv : separate datas with tabs
71                         - xml : dump data as XML
72                         - cups : dump datas in CUPS' page_log format :
73                                  ONLY AVAILABLE WITH --data history
74                         
75  -o | --output fname  All datas will be dumped to the file instead of
76                       to the standard output. The special '-' filename
77                       is the default value and means stdout.
78                       WARNING : existing files are truncated !
79
80  -s | --sum           Summarize the selected datas.
81                           ONLY AVAILABLE WITH --data history or payments
82
83  Use the filter expressions to extract only parts of the
84  datas. Allowed filters are of the form :
85               
86         key=value
87                         
88  Allowed keys for now are : 
89                       
90         username       User's name
91         groupname      Users group's name
92         printername    Printer's name
93         pgroupname     Printers group's name
94         hostname       Client's hostname
95         jobid          Job's Id
96         billingcode    Job's billing code
97         start          Job's date of printing
98         end            Job's date of printing
99         
100  Dates formatting with 'start' and 'end' filter keys :
101 
102    YYYY : year boundaries
103    YYYYMM : month boundaries
104    YYYYMMDD : day boundaries
105    YYYYMMDDhh : hour boundaries
106    YYYYMMDDhhmm : minute boundaries
107    YYYYMMDDhhmmss : second boundaries
108    yesterday[+-NbDays] : yesterday more or less N days (e.g. : yesterday-15)
109    today[+-NbDays] : today more or less N days (e.g. : today-15)
110    tomorrow[+-NbDays] : tomorrow more or less N days (e.g. : tomorrow-15)
111    now[+-NbDays] : now more or less N days (e.g. now-15)
112
113  'now' and 'today' are not exactly the same since today represents the first
114  or last second of the day depending on if it's used in a start= or end=
115  date expression. The utility to be able to specify dates in the future is
116  a question which remains to be answered :-)
117 
118  Contrary to other PyKota management tools, wildcard characters are not
119  expanded, so you can't use them.
120 
121  NB : not all keys are allowed for each data type, so the result may be
122  empty if you use a key not available for a particular data type.
123 
124Examples :
125
126  $ dumpykota --data history --format csv >myfile.csv
127 
128  This dumps the history in a comma separated values file, for possible
129  use in a spreadsheet.
130 
131  $ dumpykota --data users --format xml -o users.xml
132 
133  Dumps all users datas to the users.xml file.
134 
135  $ dumpykota --data history printername=HP2100 username=jerome
136 
137  Dumps the job history for user jerome on printer HP2100 only.
138 
139  $ dumpykota --data history start=200503 end=20050730234615
140 
141  Dumps all jobs printed between March 1st 2005 at midnight and
142  July 30th 2005 at 23 hours 46 minutes and 15 secondes included.
143""")
144       
145if __name__ == "__main__" : 
146    retcode = 0
147    try :
148        defaults = { \
149                     "format" : "csv", \
150                     "output" : "-", \
151                   }
152        short_options = "vhd:f:o:s"
153        long_options = ["help", "version", "data=", "format=", "output=", "sum"]
154       
155        # Initializes the command line tool
156        dumper = DumPyKota(doc=__doc__)
157        dumper.deferredInit()
158       
159        # parse and checks the command line
160        (options, args) = dumper.parseCommandline(sys.argv[1:], short_options, long_options, allownothing=1)
161       
162        # sets long options
163        options["help"] = options["h"] or options["help"]
164        options["version"] = options["v"] or options["version"]
165        options["data"] = options["d"] or options["data"]
166        options["format"] = options["f"] or options["format"] or defaults["format"]
167        options["output"] = options["o"] or options["output"] or defaults["output"]
168        options["sum"] = options["s"] or options["sum"]
169       
170        if options["help"] :
171            dumper.display_usage_and_quit()
172        elif options["version"] :
173            dumper.display_version_and_quit()
174        elif options["data"] is None :   
175            raise PyKotaCommandLineError, _("The -d | --data command line option is mandatory, see help.")
176        else :
177            retcode = dumper.main(args, options)
178    except KeyboardInterrupt :       
179        sys.stderr.write("\nInterrupted with Ctrl+C !\n")
180        retcode = -3
181    except PyKotaCommandLineError, msg :   
182        sys.stderr.write("%s : %s\n" % (sys.argv[0], msg))
183        retcode = -2
184    except SystemExit :       
185        pass
186    except :
187        try :
188            dumper.crashed("dumpykota failed")
189        except :   
190            crashed("dumpykota failed")
191        retcode = -1
192
193    try :
194        dumper.storage.close()
195    except (TypeError, NameError, AttributeError) :   
196        pass
197       
198    sys.exit(retcode)   
Note: See TracBrowser for help on using the browser.