diff options
Diffstat (limited to 'pysnmp/debug.py')
-rw-r--r-- | pysnmp/debug.py | 52 |
1 files changed, 38 insertions, 14 deletions
diff --git a/pysnmp/debug.py b/pysnmp/debug.py index 1b54f52c..be8faca7 100644 --- a/pysnmp/debug.py +++ b/pysnmp/debug.py @@ -1,28 +1,52 @@ import sys +from pysnmp import error flagNone = 0x0000 flagIO = 0x0001 flagDsp = 0x0002 flagMP = 0x0004 flagSM = 0x0008 -flagSMI = 0x0010 +flagBld = 0x0010 +flagMIB = 0x0020 +flagIns = 0x0040 flagAll = 0xffff -logger = None +flagMap = { + 'io': flagIO, + 'dsp': flagDsp, + 'msgproc': flagMP, + 'secmod': flagSM, + 'mibbuild': flagBld, + 'mibview': flagMIB, + 'mibinstrum': flagIns, + 'all': flagAll + } -def __defaultLogger(flag, msg): - if (flags & flag): - sys.stderr.write('*** [%x] %s\n' % (flag, msg)) +class Debug: + defaultPrinter = sys.stderr.write + def __init__(self, *flags): + self._flags = flagNone + self._printer = self.defaultPrinter + for f in flags: + if not flagMap.has_key(f): + raise error.PySnmpError('bad debug flag %s' % f) + self._flags = self._flags | flagMap[f] + self('debug category %s enabled' % f) + + def __str__(self): + return 'logger %s, flags %x' % (self._printer, self._flags) + + def __call__(self, msg): + self._printer('DBG: %s\n' % msg) -def setLogger(f): - global logger - logger = f + def __and__(self, flag): + return self._flags & flag -flags = flagNone + def __rand__(self, flag): + return flag & self._flags -def setFlags(*f): - global flags, logger - flags = reduce(lambda x,y: x|y, f, flagNone) - if flags and not logger: - logger = __defaultLogger +logger = Debug() +def setLogger(l): + global logger + logger = l |