Changeset 3288 for pykota/trunk/pykota
- Timestamp:
- 01/11/08 19:08:24 (16 years ago)
- Location:
- pykota/trunk/pykota
- Files:
-
- 15 modified
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
pykota/trunk/pykota/accounter.py
r3275 r3288 27 27 import imp 28 28 29 class PyKotaAccounterError(Exception): 30 """An exception for Accounter related stuff.""" 31 def __init__(self, message = ""): 32 self.message = message 33 Exception.__init__(self, message) 34 def __repr__(self): 35 return self.message 36 __str__ = __repr__ 37 29 from pykota.errors import PyKotaAccounterError 30 38 31 class AccounterBase : 39 32 """A class to account print usage by querying printers.""" -
pykota/trunk/pykota/accounters/hardware.py
r3275 r3288 25 25 import popen2 26 26 27 from pykota.accounter import AccounterBase, PyKotaAccounterError 27 from pykota.errors import PyKotaAccounterError 28 from pykota.accounter import AccounterBase 28 29 from pykota.accounters import snmp, pjl 29 30 -
pykota/trunk/pykota/accounters/ink.py
r3275 r3288 21 21 # 22 22 23 """This module handles ink accounting in PyKota.""" 24 23 25 import os 24 from pykota.accounter import AccounterBase, PyKotaAccounterError25 26 27 from pykota.errors import PyKotaAccounterError 28 from pykota.accounter import AccounterBase 26 29 27 30 class Accounter(AccounterBase) : … … 50 53 colorspace = colorspace.lower() 51 54 if colorspace not in ("cmyk", "bw", "cmy", "rgb", "gc") : 52 raise PyKotaAccounterError, "Invalid parameters for ink accounter : [%s]"% self.arguments55 raise PyKotaAccounterError, _("Invalid parameters for ink accounter : [%s]") % self.arguments 53 56 54 57 try : -
pykota/trunk/pykota/accounters/software.py
r3285 r3288 21 21 # 22 22 23 """This module handles software page counting for PyKota.""" 24 23 25 import os 24 26 import popen2 25 from pykota.accounter import AccounterBase, PyKotaAccounterError 27 28 from pykota.errors import PyKotaAccounterError 29 from pykota.accounter import AccounterBase 26 30 27 31 class Accounter(AccounterBase) : -
pykota/trunk/pykota/config.py
r3284 r3288 27 27 import ConfigParser 28 28 29 class PyKotaConfigError(Exception): 30 """An exception for PyKota config related stuff.""" 31 def __init__(self, message = ""): 32 self.message = message 33 Exception.__init__(self, message) 34 def __repr__(self): 35 return self.message 36 __str__ = __repr__ 37 29 from pykota.errors import PyKotaConfigError 30 38 31 class PyKotaConfig : 39 32 """A class to deal with PyKota's configuration.""" -
pykota/trunk/pykota/cups.py
r3275 r3288 22 22 """This module implements some CUPS specific classes.""" 23 23 24 from pykota. toolimport PyKotaToolError24 from pykota.errors import PyKotaToolError 25 25 try : 26 26 from pkipplib import pkipplib -
pykota/trunk/pykota/dumper.py
r3275 r3288 35 35 sys.stderr.write("The jaxml Python module is not installed. XML output is disabled.\n") 36 36 sys.stderr.write("Download jaxml from http://www.librelogiciel.com/software/ or from your Debian archive of choice\n") 37 hasJAXML = 037 hasJAXML = False 38 38 else : 39 hasJAXML = 139 hasJAXML = True 40 40 41 41 from pykota import version 42 from pykota.tool import PyKotaTool, PyKotaToolError, PyKotaCommandLineError, N_ 42 from pykota.tool import PyKotaTool, N_ 43 from pykota.errors import PyKotaToolError, PyKotaCommandLineError 43 44 44 45 class DumPyKota(PyKotaTool) : -
pykota/trunk/pykota/errors.py
r3275 r3288 20 20 # 21 21 22 """This module implements some CUPS specific classes."""22 """This module defines ALL PyKota specific exceptions.""" 23 23 24 from pykota.tool import PyKotaToolError 25 try : 26 from pkipplib import pkipplib 27 except ImportError : 28 raise RuntimeError, "The python-pkipplib module is now mandatory. You can download pkipplib from http://www.pykota.com/" 29 30 class JobTicket : 31 """A class to hold CUPS print job informations.""" 32 def __init__(self, jobid=None, printername=None, copies=1, filename=None, \ 33 options=None) : 34 """Initializes a print job's information.""" 35 self.JobId = jobid 36 self.PrinterName = printername 37 self.Copies = copies 38 self.FileName = filename 39 self.Options = options 40 self.Charset = None 41 self.OriginatingUserName = None 42 self.OriginalUserName = None 43 self.Title = None 44 self.BillingCode = None 45 self.OriginatingHostName = None 46 self.TimeAtCreation = None 47 self.TimeAtProcessing = None 48 self.MimeType = None 49 self.UUID = None 50 if self.JobId is not None : 51 self.retrieveAttributesFromCUPS() 24 class PyKotaError(Exception) : 25 """Mother class of all PyKota exceptions.""" 26 def __init__(self, value) : 27 """Saves the value passed as a parameter.""" 28 self.value = value 52 29 53 def getAttributeTypeAndValue(self, ippanswer, attribute, category="job") : 54 """Retrieves a particular attribute's type and value from an IPP answer. 30 def __str__(self) : 31 """Returns an unicode string representation.""" 32 try : 33 return unicode(self.value, errors="replace") 34 except TypeError : 35 return unicode(self.value) # None and strings which are already unicode 55 36 56 Returns a tuple of the form (type, value). 57 """ 58 try : 59 return getattr(ippanswer, category)[attribute][0] 60 except KeyError : 61 return (None, None) 62 63 def retrieveAttributesFromCUPS(self) : 64 """Retrieve attribute's values from CUPS.""" 65 server = pkipplib.CUPS() # TODO : username and password and/or encryption 66 answer = server.getJobAttributes(self.JobId) 67 if answer is None : 68 raise PyKotaToolError, "Network error while querying the CUPS server : %s" \ 69 % server.lastErrorMessage 70 (dummy, self.Charset) = self.getAttributeTypeAndValue(answer, "attributes-charset", "operation") 71 (dummy, self.OriginatingUserName) = self.getAttributeTypeAndValue(answer, "job-originating-user-name") 72 (dummy, self.Title) = self.getAttributeTypeAndValue(answer, "job-name") 73 (dummy, self.BillingCode) = self.getAttributeTypeAndValue(answer, "job-billing") 74 (dummy, self.OriginatingHostName) = self.getAttributeTypeAndValue(answer, "job-originating-host-name") 75 (dummy, self.UUID) = self.getAttributeTypeAndValue(answer, "job-uuid") 76 (dummy, self.TimeAtCreation) = self.getAttributeTypeAndValue(answer, "time-at-creation") 77 (dummy, self.TimeAtProcessing) = self.getAttributeTypeAndValue(answer, "time-at-processing") 78 (dummy, self.MimeType) = self.getAttributeTypeAndValue(answer, "document-format") 79 80 for attrib in ("OriginatingUserName", 81 "OriginatingHostName", 82 "Title", 83 "BillingCode", 84 "PrinterName", 85 "Options", 86 "Charset", 87 "UUID", 88 "MimeType") : 89 try : 90 setattr(self, attrib, 91 getattr(self, attrib).decode("UTF-8", "replace")) 92 except AttributeError : 93 pass 94 95 self.OriginalUserName = self.OriginatingUserName[:] 37 class PyKotaToolError(PyKotaError) : 38 """PyKota Exception for all executables.""" 39 pass 96 40 97 if __name__ == "__main__" : 98 import sys 99 if len(sys.argv) != 2 : 100 sys.stderr.write("usage : python cups.py jobid\n") 101 else : 102 job = JobTicket(int(sys.argv[1]), "FakePrinter") 103 for attribute in ("PrinterName", "Charset", "JobId", "Copies", 104 "FileName", "OriginatingUserName", 105 "Title", "BillingCode", "OriginatingHostName", 106 "TimeAtCreation", "TimeAtProcessing", "UUID", 107 "MimeType") : 108 sys.stdout.write("%s : %s\n" % (attribute, repr(getattr(job, attribute)))) 41 class PyKotaToolError(PyKotaError) : 42 """PyKota Exception for all executables.""" 43 pass 44 45 class PyKotaCommandLineError(PyKotaToolError) : 46 """PyKota Exception for errors on executables' command line.""" 47 pass 48 49 class PyKotaStorageError(PyKotaError) : 50 """PyKota Exception for database backend related errors.""" 51 pass 52 53 class PyKotaConfigError(PyKotaError) : 54 """PyKota Exception for errors in PyKota's configuration.""" 55 pass 56 57 class PyKotaAccounterError(PyKotaError) : 58 """PyKota Exception for errors in PyKota accounters.""" 59 pass 60 61 class PyKotaReporterError(PyKotaError) : 62 """PyKota Exception for errors in PyKota report generators.""" 63 pass 64 65 class PyKotaLoggingError(PyKotaError) : 66 """PyKota Exception for errors in PyKota logging.""" 67 pass -
pykota/trunk/pykota/logger.py
r3275 r3288 26 26 import imp 27 27 28 class PyKotaLoggingError(Exception): 29 """An exception for logging related stuff.""" 30 def __init__(self, message = ""): 31 self.message = message 32 Exception.__init__(self, message) 33 def __repr__(self): 34 return self.message 35 __str__ = __repr__ 28 from pykota.errors import PyKotaLoggingError 36 29 37 30 def openLogger(backend) : -
pykota/trunk/pykota/reporter.py
r3275 r3288 27 27 from mx import DateTime 28 28 29 class PyKotaReporterError(Exception): 30 """An exception for Reporter related stuff.""" 31 def __init__(self, message = ""): 32 self.message = message 33 Exception.__init__(self, message) 34 def __repr__(self): 35 return self.message 36 __str__ = __repr__ 29 from pykota.errors import PyKotaReporterError 37 30 38 31 class BaseReporter : -
pykota/trunk/pykota/storage.py
r3276 r3288 27 27 from mx import DateTime 28 28 29 class PyKotaStorageError(Exception): 30 """An exception for database related stuff.""" 31 def __init__(self, message = ""): 32 self.message = message 33 Exception.__init__(self, message) 34 def __repr__(self): 35 return self.message 36 __str__ = __repr__ 37 38 29 from pykota.errors import PyKotaStorageError 30 39 31 class StorageObject : 40 32 """Object present in the database.""" -
pykota/trunk/pykota/storages/ldapstorage.py
r3275 r3288 37 37 from mx import DateTime 38 38 39 from pykota.storage import PyKotaStorageError, BaseStorage, \ 39 from pykota.errors import PyKotaStorageError 40 from pykota.storage import BaseStorage, \ 40 41 StorageUser, StorageGroup, StoragePrinter, \ 41 42 StorageJob, StorageLastJob, StorageUserPQuota, \ -
pykota/trunk/pykota/storages/mysqlstorage.py
r3275 r3288 25 25 import time 26 26 27 from pykota.storage import PyKotaStorageError, BaseStorage 27 from pykota.errors import PyKotaStorageError 28 from pykota.storage import BaseStorage 28 29 from pykota.storages.sql import SQLStorage 29 30 -
pykota/trunk/pykota/storages/pgstorage.py
r3275 r3288 26 26 from types import StringType 27 27 28 from pykota.storage import PyKotaStorageError, BaseStorage 28 from pykota.errors import PyKotaStorageError 29 from pykota.storage import BaseStorage 29 30 from pykota.storages.sql import SQLStorage 30 31 -
pykota/trunk/pykota/storages/sqlitestorage.py
r3275 r3288 25 25 import time 26 26 27 from pykota.storage import PyKotaStorageError, BaseStorage 27 from pykota.errors import PyKotaStorageError 28 from pykota.storage import BaseStorage 28 29 from pykota.storages.sql import SQLStorage 29 30 -
pykota/trunk/pykota/tool.py
r3287 r3288 39 39 from mx import DateTime 40 40 41 from pykota.errors import PyKotaCommandLineError 41 42 from pykota import config, storage, logger 42 43 from pykota.version import __version__, __author__, __years__, __gplblurb__ … … 46 47 return message 47 48 48 class PyKotaToolError(Exception):49 """An exception for PyKota related stuff."""50 def __init__(self, message = ""):51 self.message = message52 Exception.__init__(self, message)53 def __repr__(self):54 return self.message.encode(sys.stdout.encoding or "UTF-8", "replace")55 __str__ = __repr__56 57 class PyKotaCommandLineError(PyKotaToolError) :58 """An exception for Pykota command line tools."""59 pass60 61 49 def crashed(message="Bug in PyKota") : 62 50 """Minimal crash method."""