Index: pykota/trunk/setup.py
===================================================================
--- pykota/trunk/setup.py (revision 1307)
+++ pykota/trunk/setup.py (revision 1330)
@@ -24,4 +24,7 @@
 #
 # $Log$
+# Revision 1.33  2004/02/04 11:16:59  jalet
+# pkprinters command line tool added.
+#
 # Revision 1.32  2004/01/18 20:52:50  jalet
 # Portuguese portuguese translation replaces brasilian portuguese one, which
@@ -380,5 +383,5 @@
       url = "http://www.librelogiciel.com/software/",
       packages = [ "pykota", "pykota.storages", "pykota.requesters", "pykota.loggers", "pykota.accounters", "pykota.reporters" ],
-      scripts = [ "bin/cupspykota", "bin/pykota", "bin/edpykota", "bin/repykota", "bin/warnpykota", "bin/pykotme", "bin/waitprinter.sh", "bin/papwaitprinter.sh", "bin/mailandpopup.sh", "contributed/pagecount.pl" ],
+      scripts = [ "bin/cupspykota", "bin/pykota", "bin/edpykota", "bin/repykota", "bin/warnpykota", "bin/pykotme", "bin/pkprinters", "bin/waitprinter.sh", "bin/papwaitprinter.sh", "bin/mailandpopup.sh", "contributed/pagecount.pl" ],
       data_files = data_files)
 
Index: pykota/trunk/pykota/storages/sql.py
===================================================================
--- pykota/trunk/pykota/storages/sql.py (revision 1327)
+++ pykota/trunk/pykota/storages/sql.py (revision 1330)
@@ -22,4 +22,7 @@
 #
 # $Log$
+# Revision 1.35  2004/02/04 11:17:00  jalet
+# pkprinters command line tool added.
+#
 # Revision 1.34  2004/02/02 22:44:16  jalet
 # Preliminary work on Relationnal Database Independance via DB-API 2.0
@@ -408,3 +411,14 @@
                  ] :  
             self.doModify(q)
-        
+            
+    def deletePrinter(self, printer) :    
+        """Completely deletes a printer from the Quota Storage."""
+        for q in [ 
+                    "DELETE FROM printergroupsmembers WHERE groupid=%s OR printerid=%s" % (self.doQuote(printer.ident), self.doQuote(printer.ident)),
+                    "DELETE FROM jobhistory WHERE printerid=%s" % self.doQuote(printer.ident),
+                    "DELETE FROM grouppquota WHERE printerid=%s" % self.doQuote(printer.ident),
+                    "DELETE FROM userpquota WHERE printerid=%s" % self.doQuote(printer.ident),
+                    "DELETE FROM printers WHERE id=%s" % self.doQuote(printer.ident),
+                  ] :
+            self.doModify(q)
+        
Index: pykota/trunk/pykota/storages/ldapstorage.py
===================================================================
--- pykota/trunk/pykota/storages/ldapstorage.py (revision 1320)
+++ pykota/trunk/pykota/storages/ldapstorage.py (revision 1330)
@@ -22,4 +22,7 @@
 #
 # $Log$
+# Revision 1.50  2004/02/04 11:17:00  jalet
+# pkprinters command line tool added.
+#
 # Revision 1.49  2004/01/29 22:35:45  jalet
 # Small fix from Matt.
@@ -974,3 +977,24 @@
             else :    
                 self.doDelete(group.ident)
-            
+                
+    def deletePrinter(self, printer) :    
+        """Completely deletes an user from the Quota Storage."""
+        result = self.doSearch("(&(objectClass=pykotaLastJob)(pykotaPrinterName=%s))" % printer.Name, base=self.info["lastjobbase"])
+        for (ident, fields) in result :
+            self.doDelete(ident)
+        result = self.doSearch("(&(objectClass=pykotaJob)(pykotaPrinterName=%s))" % printer.Name, base=self.info["jobbase"])
+        for (ident, fields) in result :
+            self.doDelete(ident)
+        result = self.doSearch("(&(objectClass=pykotaGroupPQuota)(pykotaPrinterName=%s))" % printer.Name, base=self.info["groupquotabase"])
+        for (ident, fields) in result :
+            self.doDelete(ident)
+        result = self.doSearch("(&(objectClass=pykotaUserPQuota)(pykotaPrinterName=%s))" % printer.Name, base=self.info["userquotabase"])
+        for (ident, fields) in result :
+            self.doDelete(ident)
+        for parent in self.getParentPrinters(printer) :  
+            parent.uniqueMember.remove(printer.ident)
+            fields = {
+                       "uniqueMember" : parent.uniqueMember,
+                     }  
+            self.doModify(parent.ident, fields)         
+        self.doDelete(printer.ident)    
Index: pykota/trunk/pykota/storage.py
===================================================================
--- pykota/trunk/pykota/storage.py (revision 1285)
+++ pykota/trunk/pykota/storage.py (revision 1330)
@@ -22,4 +22,7 @@
 #
 # $Log$
+# Revision 1.39  2004/02/04 11:16:59  jalet
+# pkprinters command line tool added.
+#
 # Revision 1.38  2004/01/12 22:43:40  jalet
 # New formula to compute a job's price
@@ -272,4 +275,15 @@
             self.PricePerJob = float(priceperjob)
         self.parent.writePrinterPrices(self)
+        
+    def delete(self) :    
+        """Deletes a printer from the Quota Storage."""
+        self.parent.beginTransaction()
+        try :
+            self.parent.deletePrinter(self)
+        except PyKotaStorageError, msg :    
+            self.parent.rollbackTransaction()
+            raise PyKotaStorageError, msg
+        else :    
+            self.parent.commitTransaction()
         
 class StorageUserPQuota(StorageObject) :
Index: pykota/trunk/pykota/version.py
===================================================================
--- pykota/trunk/pykota/version.py (revision 1325)
+++ pykota/trunk/pykota/version.py (revision 1330)
@@ -22,5 +22,5 @@
 #
 
-__version__ = "1.18alpha1_unofficial"
+__version__ = "1.18alpha2_unofficial"
 
 __doc__ = """PyKota : a complete Printing Quota Solution for CUPS and LPRng."""
Index: pykota/trunk/bin/pkprinters
===================================================================
--- pykota/trunk/bin/pkprinters (revision 1330)
+++ pykota/trunk/bin/pkprinters (revision 1330)
@@ -0,0 +1,201 @@
+#! /usr/bin/env python
+# -*- coding: ISO-8859-15 -*-
+
+# PyKota Printers Manager
+#
+# PyKota - Print Quotas for CUPS and LPRng
+#
+# (c) 2003-2004 Jerome Alet <alet@librelogiciel.com>
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+#
+# $Id$
+#
+# $Log$
+# Revision 1.1  2004/02/04 11:16:59  jalet
+# pkprinters command line tool added.
+#
+#
+#
+
+import sys
+
+from pykota import version
+from pykota.tool import PyKotaTool, PyKotaToolError
+from pykota.config import PyKotaConfigError
+from pykota.storage import PyKotaStorageError
+
+__doc__ = """pkprinters v%s (c) 2003-2004 C@LL - Conseil Internet & Logiciels Libres
+A Printers Manager for PyKota.
+
+command line usage :
+
+  pkprinters [options] printer1 printer2 printer3 ... printerN
+
+options :
+
+  -v | --version       Prints pkprinters's version number then exits.
+  -h | --help          Prints this message then exits.
+  
+  -a | --add           Adds users and/or printers if they don't 
+                       exist on the Quota Storage Server.
+                       
+  -d | --delete        Deletes users/groups from the quota storage.
+                       Printers are never deleted.
+                       
+  -c | --charge p[,j]  Sets the price per page and per job to charge.
+                       Job price is optional.
+                       If both are to be set, separate them with a comma.
+                       Floating point and negative values are allowed.
+  
+  -g | --groups pg1[,pg2...] Adds the printer(s) to the printer groups
+                       pg1, pg2, etc... which must already exist.
+                       A printer group is just like a normal printer,
+                       only that it is usually unknown from the printing
+                       system. Create printer groups exactly the same
+                       way that you create printers, then add other 
+                       printers to them with this option.
+                       Accounting is done on a printer and on all
+                       the printer groups it belongs to, quota checking
+                       is done on a printer and on all the printer groups
+                       it belongs to.
+  
+  printer1 through printerN can contain wildcards if the --add option 
+  is not set.
+  
+examples :                              
+
+  $ pkprinters --add --charge 0.05,0.1 hp2100 hp2200 hp8000
+  
+  Will create three printers named hp2100, hp2200 and hp8000
+  or modify them if they already exist.
+  Their price per page will be set at 0.05 unit, and their price
+  per job will be set at 0.1 unit. Units are in your own currency,
+  or whatever you want them to mean.
+            
+  $ pkprinters --delete "*"
+  
+  This will completely delete all printers and associated quota information,
+  as well as their job history. USE WITH CARE !
+  
+  $ pkprinters --groups Laser,HP "hp*"
+  
+  This will put all printers which name matches "hp*" into printers groups 
+  Laser and HP, which MUST already exist.
+  
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+
+Please e-mail bugs to: %s""" % (version.__version__, version.__author__)
+        
+class PKPrinters(PyKotaTool) :        
+    """A class for edpykota."""
+    def main(self, names, options) :
+        """Manage printers."""
+        if options["groups"] :        
+            printersgroups = self.storage.getMatchingPrinters(options["groups"])
+            if not printersgroups :
+                raise PyKotaToolError, _("There's no printer matching %s") % " ".join(options["groups"].split(','))
+            
+        if options["charge"] :
+            try :
+                charges = [float(part) for part in options["charge"].split(',', 1)]
+            except ValueError :    
+                raise PyKotaToolError, _("Invalid charge amount value %s") % options["charge"]
+            else :    
+                if len(charges) > 2 :
+                    charges = charges[:2]
+                if len(charges) != 2 :
+                    charges = [charges[0], None]
+                (perpage, perjob) = charges
+                
+        if options["add"] :    
+            printers = []
+            for pname in names :
+                printer = self.storage.getPrinter(pname)
+                if not printer.Exists :
+                    if self.isValidName(pname) :
+                        printer = self.storage.addPrinter(pname)
+                        if not printer.Exists :
+                            raise PyKotaToolError, _("Impossible to add printer %s") % pname
+                    else :    
+                        raise PyKotaToolError, _("Invalid printer name %s") % pname
+                printers.append(printer)
+        else :        
+            printers = self.storage.getMatchingPrinters(",".join(names))
+            if not printers :
+                raise PyKotaToolError, _("There's no printer matching %s") % " ".join(names)
+                    
+        for printer in printers :        
+            if options["delete"] :
+                printer.delete()
+            else :    
+                if options["charge"] :
+                    printer.setPrices(perpage, perjob)    
+                if options["groups"] :    
+                    for pgroup in printersgroups :
+                        pgroup.addPrinterToGroup(printer)    
+                     
+if __name__ == "__main__" : 
+    retcode = 0
+    try :
+        short_options = "hvac:dg:"
+        long_options = ["help", "version", "add", "charge=", "delete", "groups="]
+        
+        # Initializes the command line tool
+        manager = PKPrinters(doc=__doc__)
+        
+        # parse and checks the command line
+        (options, args) = manager.parseCommandline(sys.argv[1:], short_options, long_options)
+        
+        # sets long options
+        options["help"] = options["h"] or options["help"]
+        options["version"] = options["v"] or options["version"]
+        options["add"] = options["a"] or options["add"]
+        options["charge"] = options["c"] or options["charge"]
+        options["delete"] = options["d"] or options["delete"] 
+        options["groups"] = options["g"] or options["groups"]
+        
+        if options["help"] :
+            manager.display_usage_and_quit()
+        elif options["version"] :
+            manager.display_version_and_quit()
+        elif options["delete"] and (options["add"] or options["groups"] or options["charge"]) :    
+            raise PyKotaToolError, _("incompatible options, see help.")
+        elif not args :    
+            raise PyKotaToolError, _("You have to pass printer names on the command line")
+        else :
+            retcode = manager.main(args, options)
+    except (PyKotaToolError, PyKotaConfigError, PyKotaStorageError), msg :            
+        sys.stderr.write("%s\n" % msg)
+        sys.stderr.flush()
+        retcode = -1
+
+    try :
+        manager.storage.close()
+    except (TypeError, NameError, AttributeError) :    
+        pass
+        
+    sys.exit(retcode)    
Index: pykota/trunk/MANIFEST.in
===================================================================
--- pykota/trunk/MANIFEST.in (revision 1307)
+++ pykota/trunk/MANIFEST.in (revision 1330)
@@ -1,3 +1,3 @@
-include README FAQ COPYING LICENSE TODO NEWS CREDITS SECURITY MANIFEST.in clean.sh bin/cupspykota bin/pykota bin/edpykota bin/warnpykota bin/repykota bin/pykotme bin/waitprinter.sh bin/papwaitprinter.sh bin/mailandpopup.sh bin/README
+include README FAQ COPYING LICENSE TODO NEWS CREDITS SECURITY MANIFEST.in clean.sh bin/cupspykota bin/pykota bin/edpykota bin/warnpykota bin/repykota bin/pykotme bin/pkprinters bin/waitprinter.sh bin/papwaitprinter.sh bin/mailandpopup.sh bin/README
 recursive-include po README *.po *.mo *.pot
 recursive-include man README *.sh *.1
Index: pykota/trunk/man/edpykota.1
===================================================================
--- pykota/trunk/man/edpykota.1 (revision 1323)
+++ pykota/trunk/man/edpykota.1 (revision 1330)
@@ -1,8 +1,8 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.33.
-.TH EDPYKOTA "1" "January 2004" "C@LL - Conseil Internet & Logiciels Libres" "User Commands"
+.TH EDPYKOTA "1" "February 2004" "C@LL - Conseil Internet & Logiciels Libres" "User Commands"
 .SH NAME
-edpykota \- manual page for edpykota 1.17_unofficial
+edpykota \- manual page for edpykota 1.18alpha2_unofficial
 .SH DESCRIPTION
-edpykota v1.16beta1_unofficial (c) 2003-2004 C@LL - Conseil Internet & Logiciels Libres
+edpykota v1.18alpha2_unofficial (c) 2003-2004 C@LL - Conseil Internet & Logiciels Libres
 A Print Quota editor for PyKota.
 .PP
Index: pykota/trunk/man/pkprinters.1
===================================================================
--- pykota/trunk/man/pkprinters.1 (revision 1330)
+++ pykota/trunk/man/pkprinters.1 (revision 1330)
@@ -0,0 +1,84 @@
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.33.
+.TH PKPRINTERS "1" "February 2004" "C@LL - Conseil Internet & Logiciels Libres" "User Commands"
+.SH NAME
+pkprinters \- manual page for pkprinters 1.18alpha2_unofficial
+.SH DESCRIPTION
+pkprinters v1.18alpha2_unofficial (c) 2003-2004 C@LL - Conseil Internet & Logiciels Libres
+A Printers Manager for PyKota.
+.PP
+command line usage :
+.IP
+pkprinters [options] printer1 printer2 printer3 ... printerN
+.PP
+options :
+.TP
+\fB\-v\fR | \fB\-\-version\fR
+Prints pkprinters's version number then exits.
+.TP
+\fB\-h\fR | \fB\-\-help\fR
+Prints this message then exits.
+.TP
+\fB\-a\fR | \fB\-\-add\fR
+Adds users and/or printers if they don't
+exist on the Quota Storage Server.
+.TP
+\fB\-d\fR | \fB\-\-delete\fR
+Deletes users/groups from the quota storage.
+Printers are never deleted.
+.TP
+\fB\-c\fR | \fB\-\-charge\fR p[,j]
+Sets the price per page and per job to charge.
+Job price is optional.
+If both are to be set, separate them with a comma.
+Floating point and negative values are allowed.
+.TP
+\fB\-g\fR | \fB\-\-groups\fR pg1[,pg2...] Adds the printer(s) to the printer groups
+pg1, pg2, etc... which must already exist.
+A printer group is just like a normal printer,
+only that it is usually unknown from the printing
+system. Create printer groups exactly the same
+way that you create printers, then add other
+printers to them with this option.
+Accounting is done on a printer and on all
+the printer groups it belongs to, quota checking
+is done on a printer and on all the printer groups
+it belongs to.
+.IP
+printer1 through printerN can contain wildcards if the \fB\-\-add\fR option
+is not set.
+.PP
+examples :
+.IP
+\f(CW$ pkprinters --add --charge 0.05,0.1 hp2100 hp2200 hp8000\fR
+.IP
+Will create three printers named hp2100, hp2200 and hp8000
+or modify them if they already exist.
+Their price per page will be set at 0.05 unit, and their price
+per job will be set at 0.1 unit. Units are in your own currency,
+or whatever you want them to mean.
+.IP
+\f(CW$ pkprinters --delete "*"\fR
+.IP
+This will completely delete all printers and associated quota information,
+as well as their job history. USE WITH CARE !
+.IP
+\f(CW$ pkprinters --groups Laser,HP "hp*"\fR
+.IP
+This will put all printers which name matches "hp*" into printers groups
+Laser and HP, which MUST already exist.
+.PP
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+.PP
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+.PP
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+.PP
+Please e-mail bugs to: Jerome Alet - alet@librelogiciel.com
Index: pykota/trunk/man/pykotme.1
===================================================================
--- pykota/trunk/man/pykotme.1 (revision 1323)
+++ pykota/trunk/man/pykotme.1 (revision 1330)
@@ -1,8 +1,8 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.33.
-.TH PYKOTME "1" "January 2004" "C@LL - Conseil Internet & Logiciels Libres" "User Commands"
+.TH PYKOTME "1" "February 2004" "C@LL - Conseil Internet & Logiciels Libres" "User Commands"
 .SH NAME
-pykotme \- manual page for pykotme 1.17_unofficial
+pykotme \- manual page for pykotme 1.18alpha2_unofficial
 .SH DESCRIPTION
-pykotme v1.16beta1_unofficial (c) 2003-2004 C@LL - Conseil Internet & Logiciels Libres
+pykotme v1.18alpha2_unofficial (c) 2003-2004 C@LL - Conseil Internet & Logiciels Libres
 .PP
 Gives print quotes to users.
Index: pykota/trunk/man/repykota.1
===================================================================
--- pykota/trunk/man/repykota.1 (revision 1323)
+++ pykota/trunk/man/repykota.1 (revision 1330)
@@ -1,8 +1,8 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.33.
-.TH REPYKOTA "1" "January 2004" "C@LL - Conseil Internet & Logiciels Libres" "User Commands"
+.TH REPYKOTA "1" "February 2004" "C@LL - Conseil Internet & Logiciels Libres" "User Commands"
 .SH NAME
-repykota \- manual page for repykota 1.17_unofficial
+repykota \- manual page for repykota 1.18alpha2_unofficial
 .SH DESCRIPTION
-repykota v1.16beta1_unofficial (c) 2003-2004 C@LL - Conseil Internet & Logiciels Libres
+repykota v1.18alpha2_unofficial (c) 2003-2004 C@LL - Conseil Internet & Logiciels Libres
 .PP
 Generates print quota reports.
Index: pykota/trunk/man/genman.sh
===================================================================
--- pykota/trunk/man/genman.sh (revision 1287)
+++ pykota/trunk/man/genman.sh (revision 1330)
@@ -14,5 +14,5 @@
 # $Id$
 #
-for prog in edpykota pykotme repykota warnpykota ; do 
+for prog in edpykota pykotme repykota warnpykota pkprinters ; do 
     help2man --section=1 --manual "User Commands" --source="C@LL - Conseil Internet & Logiciels Libres" --output=$prog.1 --no-info $prog ; 
 done
Index: pykota/trunk/man/warnpykota.1
===================================================================
--- pykota/trunk/man/warnpykota.1 (revision 1323)
+++ pykota/trunk/man/warnpykota.1 (revision 1330)
@@ -1,8 +1,8 @@
 .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.33.
-.TH WARNPYKOTA "1" "January 2004" "C@LL - Conseil Internet & Logiciels Libres" "User Commands"
+.TH WARNPYKOTA "1" "February 2004" "C@LL - Conseil Internet & Logiciels Libres" "User Commands"
 .SH NAME
-warnpykota \- manual page for warnpykota 1.17_unofficial
+warnpykota \- manual page for warnpykota 1.18alpha2_unofficial
 .SH DESCRIPTION
-warnpykota v1.16beta1_unofficial (c) 2003-2004 C@LL - Conseil Internet & Logiciels Libres
+warnpykota v1.18alpha2_unofficial (c) 2003-2004 C@LL - Conseil Internet & Logiciels Libres
 .PP
 Sends mail to users over print quota.
Index: pykota/trunk/NEWS
===================================================================
--- pykota/trunk/NEWS (revision 1328)
+++ pykota/trunk/NEWS (revision 1330)
@@ -22,4 +22,9 @@
 PyKota NEWS :
 
+    - 1.18alpha2 :
+    
+        - Added the pkprinters command line tool to manage printers
+          exclusively.
+        
     - 1.18alpha1 :
     
Index: pykota/trunk/po/en/pykota.po
===================================================================
--- pykota/trunk/po/en/pykota.po (revision 1295)
+++ pykota/trunk/po/en/pykota.po (revision 1330)
@@ -88,4 +88,7 @@
 msgstr ""
 
+msgid "You have to pass printer names on the command line"
+msgstr ""
+
 #, python-format
 msgid "Prototype %s not found in Quota Storage for printer %s."
Index: pykota/trunk/po/br/pykota.po
===================================================================
--- pykota/trunk/po/br/pykota.po (revision 1307)
+++ pykota/trunk/po/br/pykota.po (revision 1330)
@@ -84,4 +84,7 @@
 msgstr "Voce deve informar usuario ou grupo na linha de comando"
 
+msgid "You have to pass printer names on the command line"
+msgstr "Voce deve informar impressora na linha de comando"
+
 #, python-format
 msgid "Prototype %s not found in Quota Storage for printer %s."
Index: pykota/trunk/po/pt/pykota.po
===================================================================
--- pykota/trunk/po/pt/pykota.po (revision 1307)
+++ pykota/trunk/po/pt/pykota.po (revision 1330)
@@ -84,4 +84,7 @@
 msgstr "�Obrigat� a utiliza� de nomes de utilizador ou grupo na linha de comando"
 
+msgid "You have to pass printer names on the command line"
+msgstr "�Obrigat� a utiliza� de nomes de impressora na linha de comando"
+
 #, python-format
 msgid "Prototype %s not found in Quota Storage for printer %s."
Index: pykota/trunk/po/es/pykota.po
===================================================================
--- pykota/trunk/po/es/pykota.po (revision 1295)
+++ pykota/trunk/po/es/pykota.po (revision 1330)
@@ -86,4 +86,7 @@
 "Usted tiene que pasar nombres de usuarios o grupos en la l�a de comandos"
 
+msgid "You have to pass printer names on the command line"
+msgstr "Usted tiene que pasar nombres de impresoras en la l�a de comandos"
+
 #, python-format
 msgid "Prototype %s not found in Quota Storage for printer %s."
Index: pykota/trunk/po/fr/pykota.po
===================================================================
--- pykota/trunk/po/fr/pykota.po (revision 1295)
+++ pykota/trunk/po/fr/pykota.po (revision 1330)
@@ -91,4 +91,7 @@
 "commande"
 
+msgid "You have to pass printer names on the command line"
+msgstr "Vous devez passer des noms d'imprimantes sur la ligne de commande"
+
 #, python-format
 msgid "Prototype %s not found in Quota Storage for printer %s."
Index: pykota/trunk/po/se/pykota.po
===================================================================
--- pykota/trunk/po/se/pykota.po (revision 1299)
+++ pykota/trunk/po/se/pykota.po (revision 1330)
@@ -88,4 +88,7 @@
 msgstr "Du m�e skicka med anv�are- eller gruppnamn p�ommandoraden"
 
+msgid "You have to pass printer names on the command line"
+msgstr "Du m�e skicka med skrivarnamn p�ommandoraden"
+
 #, python-format
 msgid "Prototype %s not found in Quota Storage for printer %s."
Index: pykota/trunk/po/pykota.pot
===================================================================
--- pykota/trunk/po/pykota.pot (revision 1295)
+++ pykota/trunk/po/pykota.pot (revision 1330)
@@ -88,4 +88,7 @@
 msgstr ""
 
+msgid "You have to pass printer names on the command line"
+msgstr ""
+
 #, python-format
 msgid "Prototype %s not found in Quota Storage for printer %s."
