Index: third_party/google-endpoints/pyasn1/debug.py |
diff --git a/third_party/google-endpoints/pyasn1/debug.py b/third_party/google-endpoints/pyasn1/debug.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9b69886c04d2e75b36f689033e4c53a882c098c0 |
--- /dev/null |
+++ b/third_party/google-endpoints/pyasn1/debug.py |
@@ -0,0 +1,110 @@ |
+import time |
+import logging |
+from pyasn1.compat.octets import octs2ints |
+from pyasn1 import error |
+from pyasn1 import __version__ |
+ |
+flagNone = 0x0000 |
+flagEncoder = 0x0001 |
+flagDecoder = 0x0002 |
+flagAll = 0xffff |
+ |
+flagMap = { |
+ 'encoder': flagEncoder, |
+ 'decoder': flagDecoder, |
+ 'all': flagAll |
+ } |
+ |
+class Printer: |
+ 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>' |
+ |
+if hasattr(logging, 'NullHandler'): |
+ NullHandler = logging.NullHandler |
+else: |
+ # Python 2.6 and older |
+ class NullHandler(logging.Handler): |
+ def emit(self, record): |
+ pass |
+ |
+class Debug: |
+ defaultPrinter = None |
+ 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() |
+ ) |
+ else: |
+ self._printer = Printer() |
+ self('running pyasn1 version %s' % __version__) |
+ for f in flags: |
+ inverse = f and f[0] in ('!', '~') |
+ if inverse: |
+ f = f[1:] |
+ try: |
+ if inverse: |
+ self._flags &= ~flagMap[f] |
+ else: |
+ self._flags |= flagMap[f] |
+ except KeyError: |
+ raise error.PyAsn1Error('bad debug flag %s' % f) |
+ |
+ self('debug category \'%s\' %s' % (f, inverse and 'disabled' or 'enabled')) |
+ |
+ def __str__(self): |
+ return 'logger %s, flags %x' % (self._printer, self._flags) |
+ |
+ def __call__(self, msg): |
+ self._printer(msg) |
+ |
+ def __and__(self, flag): |
+ return self._flags & flag |
+ |
+ def __rand__(self, flag): |
+ return flag & self._flags |
+ |
+logger = 0 |
+ |
+def setLogger(l): |
+ global logger |
+ logger = l |
+ |
+def hexdump(octets): |
+ return ' '.join( |
+ [ '%s%.2X' % (n%16 == 0 and ('\n%.5d: ' % n) or '', x) |
+ for n,x in zip(range(len(octets)), octs2ints(octets)) ] |
+ ) |
+ |
+class Scope: |
+ def __init__(self): |
+ self._list = [] |
+ |
+ def __str__(self): return '.'.join(self._list) |
+ |
+ def push(self, token): |
+ self._list.append(token) |
+ |
+ def pop(self): |
+ return self._list.pop() |
+ |
+scope = Scope() |