diff options
author | Ilya Etingof <etingof@gmail.com> | 2017-09-15 16:55:16 +0200 |
---|---|---|
committer | Ilya Etingof <etingof@gmail.com> | 2017-09-15 21:54:32 +0200 |
commit | e337ff621e43666fc707600c7601d154dd799d08 (patch) | |
tree | 89478769ad51608bc2404fc582cadcea94f1e68e /pyasn1 | |
parent | 218acc52cd4574df07536e1bc81bc1eb7a410573 (diff) | |
download | pyasn1-e337ff621e43666fc707600c7601d154dd799d08.tar.gz |
run unit tests with full debugging enabled (and ignored)
Also fixed a couple of crashes in debug messages
Diffstat (limited to 'pyasn1')
-rw-r--r-- | pyasn1/codec/ber/decoder.py | 2 | ||||
-rw-r--r-- | pyasn1/codec/ber/encoder.py | 2 | ||||
-rw-r--r-- | pyasn1/debug.py | 47 | ||||
-rw-r--r-- | pyasn1/type/univ.py | 6 |
4 files changed, 37 insertions, 20 deletions
diff --git a/pyasn1/codec/ber/decoder.py b/pyasn1/codec/ber/decoder.py index 3c3be9c..ee3064f 100644 --- a/pyasn1/codec/ber/decoder.py +++ b/pyasn1/codec/ber/decoder.py @@ -1160,7 +1160,7 @@ class Decoder(object): **options ) if logger: - logger('codec %s yields type %s, value:\n%s\n...remaining substrate is: %s' % (concreteDecoder.__class__.__name__, value.__class__.__name__, value.prettyPrint(), substrate and debug.hexdump(substrate) or '<none>')) + logger('codec %s yields type %s, value:\n%s\n...remaining substrate is: %s' % (concreteDecoder.__class__.__name__, value.__class__.__name__, isinstance(value, base.Asn1Item) and value.prettyPrint() or value, substrate and debug.hexdump(substrate) or '<none>')) state = stStop break if state is stTryAsExplicitTag: diff --git a/pyasn1/codec/ber/encoder.py b/pyasn1/codec/ber/encoder.py index e52bb49..3ac2ef8 100644 --- a/pyasn1/codec/ber/encoder.py +++ b/pyasn1/codec/ber/encoder.py @@ -476,7 +476,7 @@ class Encoder(object): logger = None if logger: - logger('encoder called in %sdef mode, chunk size %s for type %s, value:\n%s' % (not defMode and 'in' or '', maxChunkSize, value.prettyPrintType(), value.prettyPrint())) + logger('encoder called in %sdef mode, chunk size %s for type %s, value:\n%s' % (not options.get('defMode', True) and 'in' or '', options.get('maxChunkSize', 0), value.prettyPrintType(), value.prettyPrint())) if self.fixedDefLengthMode is not None: options.update(defMode=self.fixedDefLengthMode) diff --git a/pyasn1/debug.py b/pyasn1/debug.py index 04a9da5..24ac5ce 100644 --- a/pyasn1/debug.py +++ b/pyasn1/debug.py @@ -28,25 +28,31 @@ class Printer(object): def __init__(self, logger=None, handler=None, formatter=None): if logger is None: logger = logging.getLogger('pyasn1') + logger.setLevel(logging.DEBUG) + if handler is None: handler = logging.StreamHandler() + if formatter is None: formatter = logging.Formatter('%(asctime)s %(name)s: %(message)s') + handler.setFormatter(formatter) handler.setLevel(logging.DEBUG) logger.addHandler(handler) + self.__logger = logger def __call__(self, msg): self.__logger.debug(msg) def __str__(self): - return '<python built-in logging>' + return '<python logging>' if hasattr(logging, 'NullHandler'): NullHandler = logging.NullHandler + else: # Python 2.6 and older class NullHandler(logging.Handler): @@ -55,36 +61,39 @@ else: class Debug(object): - defaultPrinter = None + defaultPrinter = Printer() def __init__(self, *flags, **options): self._flags = flagNone - if options.get('printer') is not None: - self._printer = options.get('printer') - elif self.defaultPrinter is not None: - self._printer = self.defaultPrinter + if 'loggerName' in options: # route our logs to parent logger self._printer = Printer( logger=logging.getLogger(options['loggerName']), handler=NullHandler() ) + + elif 'printer' in options: + self._printer = options.get('printer') + else: - self._printer = Printer() - self('running pyasn1 version %s' % __version__) - for f in flags: - inverse = f and f[0] in ('!', '~') + self._printer = self.defaultPrinter + + self._printer('running pyasn1 %s, debug flags %s' % (__version__, ', '.join(flags))) + + for flag in flags: + inverse = flag and flag[0] in ('!', '~') if inverse: - f = f[1:] + flag = flag[1:] try: if inverse: - self._flags &= ~flagMap[f] + self._flags &= ~flagMap[flag] else: - self._flags |= flagMap[f] + self._flags |= flagMap[flag] except KeyError: - raise error.PyAsn1Error('bad debug flag %s' % f) + raise error.PyAsn1Error('bad debug flag %s' % flag) - self('debug category \'%s\' %s' % (f, inverse and 'disabled' or 'enabled')) + self._printer("debug category '%s' %s" % (flag, inverse and 'disabled' or 'enabled')) def __str__(self): return 'logger %s, flags %x' % (self._printer, self._flags) @@ -102,9 +111,13 @@ class Debug(object): logger = 0 -def setLogger(l): +def setLogger(userLogger): global logger - logger = l + + if userLogger: + logger = userLogger + else: + logger = 0 def hexdump(octets): diff --git a/pyasn1/type/univ.py b/pyasn1/type/univ.py index 63c21eb..1e7c8ce 100644 --- a/pyasn1/type/univ.py +++ b/pyasn1/type/univ.py @@ -1498,7 +1498,11 @@ class Real(base.AbstractSimpleAsn1Item): if self.isInf: return self.prettyOut(self._value) else: - return str(float(self)) + try: + return str(float(self)) + + except OverflowError: + return '<overflow>' @property def isPlusInf(self): |