aboutsummaryrefslogtreecommitdiff
path: root/pyasn1
diff options
context:
space:
mode:
authorIlya Etingof <etingof@gmail.com>2017-09-15 16:55:16 +0200
committerIlya Etingof <etingof@gmail.com>2017-09-15 21:54:32 +0200
commite337ff621e43666fc707600c7601d154dd799d08 (patch)
tree89478769ad51608bc2404fc582cadcea94f1e68e /pyasn1
parent218acc52cd4574df07536e1bc81bc1eb7a410573 (diff)
downloadpyasn1-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.py2
-rw-r--r--pyasn1/codec/ber/encoder.py2
-rw-r--r--pyasn1/debug.py47
-rw-r--r--pyasn1/type/univ.py6
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):