| 58 | def __init__(self, kotabackend, arguments) : |
| 59 | """Initializes querying accounter.""" |
| 60 | AccounterBase.__init__(self, kotabackend, arguments) |
| 61 | self.requester = openRequester(kotabackend.config, kotabackend.printername) |
| 62 | |
| 63 | def getPrinterInternalPageCounter(self) : |
| 64 | """Returns the printer's internal page counter.""" |
| 65 | global MAXTRIES, TIMETOSLEEP |
| 66 | for i in range(MAXTRIES) : |
| 67 | try : |
| 68 | counter = self.requester.getPrinterPageCounter(self.filter.printerhostname) |
| 69 | except PyKotaRequesterError, msg : |
| 70 | # can't get actual page counter, assume printer is off or warming up |
| 71 | # log the message anyway. |
| 72 | self.filter.logger.log_message("%s" % msg, "warn") |
| 73 | counter = None |
| 74 | else : |
| 75 | # printer answered, it is on so we can exit the loop |
| 76 | break |
| 77 | time.sleep(TIMETOSLEEP) |
| 78 | return counter |
| 79 | |
| 80 | def beginJob(self, printer, user) : |
| 81 | """Saves printer internal page counter at start of job.""" |
| 82 | # save page counter before job |
| 83 | self.LastPageCounter = self.counterbefore = self.getPrinterInternalPageCounter() |
| 84 | |
| 85 | def endJob(self, printer, user) : |
| 86 | """Saves printer internal page counter at end of job.""" |
| 87 | # save page counter after job |
| 88 | self.LastPageCounter = self.counterafter = self.getPrinterInternalPageCounter() |
| 89 | |
| 90 | def getJobSize(self) : |
| 91 | """Returns the actual job size.""" |
| 92 | try : |
| 93 | jobsize = (self.counterafter - self.counterbefore) |
| 94 | if jobsize < 0 : |
| 95 | # Try to take care of HP printers |
| 96 | # Their internal page counter is saved to NVRAM |
| 97 | # only every 10 pages. If the printer was switched |
| 98 | # off then back on during the job, and that the |
| 99 | # counters difference is negative, we know |
| 100 | # the formula (we can't know if more than eleven |
| 101 | # pages were printed though) : |
| 102 | if jobsize > -10 : |
| 103 | jobsize += 10 |
| 104 | else : |
| 105 | # here we may have got a printer being replaced |
| 106 | # DURING the job. This is HIGHLY improbable ! |
| 107 | jobsize = 0 |
| 108 | except : |
| 109 | # takes care of the case where one counter (or both) was never set. |
| 110 | jobsize = 0 |
| 111 | return jobsize |
| 112 | |
59 | | global MAXTRIES, TIMETOSLEEP |
60 | | requester = openRequester(self.filter.config, self.filter.printername) |
61 | | for i in range(MAXTRIES) : |
62 | | try : |
63 | | counterbeforejob = requester.getPrinterPageCounter(self.filter.printerhostname) |
64 | | except PyKotaRequesterError, msg : |
65 | | # can't get actual page counter, assume printer is off or warming up |
66 | | # log the message anyway. |
67 | | self.filter.logger.log_message("%s" % msg, "warn") |
68 | | counterbeforejob = None |
69 | | printerIsOff = 1 |
70 | | else : |
71 | | # printer answered, it is on so we can exit the loop |
72 | | printerIsOff = 0 |
73 | | break |
74 | | time.sleep(TIMETOSLEEP) |
| 118 | counterbeforejob = self.getPrinterInternalPageCounter() |