Changeset 976
- Timestamp:
- 04/30/03 15:36:40 (22 years ago)
- Location:
- pykota/trunk
- Files:
-
- 1 added
- 13 modified
Legend:
- Unmodified
- Added
- Removed
-
pykota/trunk/bin/pykota
r975 r976 23 23 # 24 24 # $Log$ 25 # Revision 1.31 2003/04/30 13:36:39 jalet 26 # Stupid accounting method was added. 27 # 25 28 # Revision 1.30 2003/04/29 22:03:38 jalet 26 29 # Better error handling. … … 192 195 return (None, None, None, None, None, None) # Unknown printing system 193 196 194 def filterInput(self, inputfile) :195 """Transparent filter."""196 mustclose = 0197 if inputfile is not None :198 infile = open(inputfile, "rb")199 mustclose = 1200 else :201 infile = sys.stdin202 data = infile.read(256*1024)203 while data :204 sys.stdout.write(data)205 data = infile.read(256*1024)206 if mustclose :207 infile.close()208 209 197 def acceptJob(self) : 210 198 """Returns the exit code needed by the printing backend to accept the job and print it.""" … … 270 258 271 259 # pass the job untouched to the underlying layer 272 kotafilter. filterInput(kotafilter.inputfile)260 kotafilter.accounter.filterInput(kotafilter.inputfile) 273 261 274 262 return kotafilter.acceptJob() -
pykota/trunk/conf/pykota.conf.sample
r974 r976 58 58 # 59 59 # - querying : asks the printer for its lifetime page counter 60 # via either SNMP, AppleTalk, or any external 61 # command. This method is the method used by 62 # default in PyKota since its beginning. 63 # 64 # - stupid : counts the occurences of the 'showpage' postscript 65 # statement in the document to be printed, only at 66 # the beginning of each line which makes the postscript 67 # file. THIS IS NOT RELIABLE. This is just to serve as 68 # an example on how to implement your own accounting 69 # method. 70 # 60 71 # - more to be added in the future 61 72 # 62 73 # This value can be set either globally or on a per printer basis 63 # if not set it defaults to 'querying' 74 # If both are defined, the printer option has priority. 75 # if not set it defaults to 'querying'. 64 76 accounter: querying 65 77 -
pykota/trunk/NEWS
r975 r976 22 22 PyKota NEWS : 23 23 24 - 1.05alpha3 : 25 26 - A 'stupid' and unreliable accounting method was 27 implemented to serve as an example on how to 28 do this sort of things. This method only counts 29 the 'showpage' statements in the input data. 30 See sample configuration file for details. 31 Pluggable accounting methods work, but I advise 32 you TO NOT USE THIS ONE WHICH IS JUST AN EXAMPLE. 33 It is not reliable enough to be used. 34 24 35 - 1.05alpha2 : 25 36 -
pykota/trunk/po/en/pykota.po
r973 r976 21 21 # 22 22 # $Log$ 23 # Revision 1.23 2003/04/30 13:36:40 jalet 24 # Stupid accounting method was added. 25 # 23 26 # Revision 1.22 2003/04/29 18:37:54 jalet 24 27 # Pluggable accounting methods (actually doesn't support external scripts) … … 337 340 msgid "Option requester for printer %s was not set" 338 341 msgstr "" 342 343 msgid "Using the 'stupid' accounting method is unreliable." 344 msgstr "" -
pykota/trunk/po/fr/pykota.po
r973 r976 21 21 # 22 22 # $Log$ 23 # Revision 1.22 2003/04/30 13:36:40 jalet 24 # Stupid accounting method was added. 25 # 23 26 # Revision 1.21 2003/04/29 18:37:54 jalet 24 27 # Pluggable accounting methods (actually doesn't support external scripts) … … 349 352 msgid "Option requester for printer %s was not set" 350 353 msgstr "L'option requester pour l'imprimante %s n'a pas � d�nie" 354 355 msgid "Using the 'stupid' accounting method is unreliable." 356 msgstr "Utiliser la m�ode 'stupid' n'est pas fiable." -
pykota/trunk/po/pykota.pot
r973 r976 21 21 # 22 22 # $Log$ 23 # Revision 1.23 2003/04/30 13:36:40 jalet 24 # Stupid accounting method was added. 25 # 23 26 # Revision 1.22 2003/04/29 18:37:54 jalet 24 27 # Pluggable accounting methods (actually doesn't support external scripts) … … 337 340 msgid "Option requester for printer %s was not set" 338 341 msgstr "" 342 343 msgid "Using the 'stupid' accounting method is unreliable." 344 msgstr "" -
pykota/trunk/pykota/accounter.py
r973 r976 21 21 # 22 22 # $Log$ 23 # Revision 1.2 2003/04/30 13:36:40 jalet 24 # Stupid accounting method was added. 25 # 23 26 # Revision 1.1 2003/04/29 18:37:54 jalet 24 27 # Pluggable accounting methods (actually doesn't support external scripts) … … 26 29 # 27 30 # 31 32 import sys 28 33 29 34 class PyKotaAccounterError(Exception): … … 42 47 self.filter = kotafilter 43 48 49 def filterInput(self, inputfile) : 50 """Transparent filter.""" 51 mustclose = 0 52 if inputfile is not None : 53 if hasattr(inputfile, "read") : 54 infile = inputfile 55 else : 56 infile = open(inputfile, "rb") 57 mustclose = 1 58 else : 59 infile = sys.stdin 60 data = infile.read(256*1024) 61 while data : 62 sys.stdout.write(data) 63 data = infile.read(256*1024) 64 if mustclose : 65 infile.close() 66 44 67 def doAccounting(self, printerid, userid) : 45 68 """Does the real accounting.""" -
pykota/trunk/pykota/accounters/querying.py
r973 r976 21 21 # 22 22 # $Log$ 23 # Revision 1.2 2003/04/30 13:36:40 jalet 24 # Stupid accounting method was added. 25 # 23 26 # Revision 1.1 2003/04/29 18:37:54 jalet 24 27 # Pluggable accounting methods (actually doesn't support external scripts) … … 27 30 # 28 31 32 import sys 29 33 from pykota.accounter import AccounterBase, PyKotaAccounterError 30 34 from pykota.requester import openRequester, PyKotaRequesterError … … 118 122 119 123 return action 124 -
pykota/trunk/pykota/config.py
r973 r976 21 21 # 22 22 # $Log$ 23 # Revision 1.25 2003/04/30 13:36:40 jalet 24 # Stupid accounting method was added. 25 # 23 26 # Revision 1.24 2003/04/29 18:37:54 jalet 24 27 # Pluggable accounting methods (actually doesn't support external scripts) … … 197 200 for its internal lifetime page counter. 198 201 """ 199 validaccounters = [ "querying" ]202 validaccounters = [ "querying", "stupid" ] 200 203 try : 201 204 accounter = self.getPrinterOption(printer, "accounter").lower() -
pykota/trunk/pykota/storages/postgresql.py
r967 r976 21 21 # 22 22 # $Log$ 23 # Revision 1.10 2003/04/30 13:36:40 jalet 24 # Stupid accounting method was added. 25 # 23 26 # Revision 1.9 2003/04/27 08:04:15 jalet 24 27 # LDAP storage backend's skeleton added. DOESN'T WORK. … … 111 114 def doQuote(self, field) : 112 115 """Quotes a field for use as a string in SQL queries.""" 113 if type(field) == type(0) : # TODO : do something safer116 if type(field) in (type(0), type(0.0)) : # TODO : do something safer 114 117 typ = "decimal" 115 118 else : -
pykota/trunk/pykota/storages/sql.py
r967 r976 21 21 # 22 22 # $Log$ 23 # Revision 1.31 2003/04/30 13:36:40 jalet 24 # Stupid accounting method was added. 25 # 23 26 # Revision 1.30 2003/04/27 08:04:15 jalet 24 27 # LDAP storage backend's skeleton added. DOESN'T WORK. … … 368 371 self.doQuery("UPDATE grouppquota SET datelimit=%s::TIMESTAMP WHERE groupid=%s AND printerid=%s" % (self.doQuote("%04i-%02i-%02i %02i:%02i:%02i" % (datelimit.year, datelimit.month, datelimit.day, datelimit.hour, datelimit.minute, datelimit.second)), self.doQuote(groupid), self.doQuote(printerid))) 369 372 370 def addJobToHistory(self, jobid, userid, printerid, pagecounter, action ) :373 def addJobToHistory(self, jobid, userid, printerid, pagecounter, action, jobsize=None) : 371 374 """Adds a job to the history: (jobid, userid, printerid, last page counter taken from requester).""" 372 self.doQuery("INSERT INTO jobhistory (jobid, userid, printerid, pagecounter, action ) VALUES (%s, %s, %s, %s, %s)" % (self.doQuote(jobid), self.doQuote(userid), self.doQuote(printerid), self.doQuote(pagecounter), self.doQuote(action)))375 self.doQuery("INSERT INTO jobhistory (jobid, userid, printerid, pagecounter, action, jobsize) VALUES (%s, %s, %s, %s, %s, %s)" % (self.doQuote(jobid), self.doQuote(userid), self.doQuote(printerid), self.doQuote(pagecounter), self.doQuote(action), self.doQuote(jobsize))) 373 376 return self.getJobHistoryId(jobid, userid, printerid) # in case jobid is not sufficient 374 377 … … 379 382 def getPrinterPageCounter(self, printerid) : 380 383 """Returns the last page counter value for a printer given its id, also returns last username, last jobid and history line id.""" 381 result = self.doQuery("SELECT jobhistory.id, jobid, userid, username, pagecounter FROM jobhistory, users WHERE printerid=%s AND userid=users.id ORDER BY jobdate DESC LIMIT 1" % self.doQuote(printerid))384 result = self.doQuery("SELECT jobhistory.id, jobid, userid, username, pagecounter, jobsize FROM jobhistory, users WHERE printerid=%s AND userid=users.id ORDER BY jobdate DESC LIMIT 1" % self.doQuote(printerid)) 382 385 try : 383 386 return self.doParseResult(result)[0] -
pykota/trunk/pykota/version.py
r973 r976 21 21 # 22 22 23 __version__ = "1.05alpha 2-unofficial"23 __version__ = "1.05alpha3-unofficial" 24 24 25 25 __doc__ = """PyKota : a complete Printing Quota Solution for CUPS and LPRng."""