# From: https://[Log in to view URL]
import inspect
from sys import stdout
def _should_dump_repr(obj):
return inspect.ismethod(obj) \
or inspect.isfunction(obj) \
or inspect.isgenerator(obj) \
or inspect.istraceback(obj) \
or inspect.isbuiltin(obj)
def _dump_helper(obj, indent, visited):
if id(obj) in visited:
stdout.write('\x1b[31mRecursion on %s with id=%i\x1b[0m' % (type(obj).__name__, id(obj)))
elif obj is None:
stdout.write('\x1b[3mNone\x1b[0m')
elif isinstance(obj, str):
stdout.write('\x1b[32m%s\x1b[0m' % repr(obj))
elif isinstance(obj, bytes):
stdout.write('b\x1b[32m%s\x1b[0m' % repr(obj)[1:])
elif isinstance(obj, bool):
stdout.write('\x1b[35m%s\x1b[0m' % obj)
elif isinstance(obj, int) or isinstance(obj, float):
stdout.write('\x1b[34m%s\x1b[0m' % obj)
elif _should_dump_repr(obj):
stdout.write('\x1b[36m%s\x1b[0m' % repr(obj))
elif isinstance(obj, dict):
if not obj:
stdout.write('{}')
else:
stdout.write('{\n')
visited.add(id(obj))
for key, value in obj.items():
stdout.write(' ' * 2 * (indent + 1))
_dump_helper(key, indent + 1, visited)
stdout.write(': ')
_dump_helper(value, indent + 1, visited)
stdout.write(',\n')
visited.remove(id(obj))
stdout.write('%s}' % (' ' * 2 * indent))
elif isinstance(obj, set):
if not obj:
stdout.write('set()')
else:
stdout.write('{\n')
visited.add(id(obj))
for value in obj:
stdout.write(' ' * 2 * (indent + 1))
_dump_helper(value, indent + 1, visited)
stdout.write(',\n')
visited.remove(id(obj))
stdout.write('%s}' % (' ' * 2 * indent))
elif isinstance(obj, list):
if not obj:
stdout.write('[]')
else:
stdout.write('[\n')
visited.add(id(obj))
for value in obj:
stdout.write(' ' * 2 * (indent + 1))
_dump_helper(value, indent + 1, visited)
stdout.write(',\n')
visited.remove(id(obj))
stdout.write('%s]' % (' ' * 2 * indent))
elif isinstance(obj, tuple):
if not obj:
stdout.write('tuple()')
else:
stdout.write('(\n')
visited.add(id(obj))
for value in obj:
stdout.write(' ' * 2 * (indent + 1))
_dump_helper(value, indent + 1, visited)
stdout.write(',\n')
visited.remove(id(obj))
stdout.write('%s)' % (' ' * 2 * indent))
else:
stdout.write(str(type(obj)))
attrs = {}
for name in dir(obj):
if name[:2] == name[-2:] == '__' and len(name) > 4:
continue
try:
value = getattr(obj, name)
if inspect.ismethod(value) or inspect.isbuiltin(value):
continue
attrs[name] = value
except AttributeError:
pass
if attrs:
stdout.write(' {\n')
visited.add(id(obj))
for key, value in attrs.items():
stdout.write('%s\x1b[4m%s\x1b[0m: ' % (' ' * 2 * (indent + 1), key))
_dump_helper(value, indent + 1, visited)
stdout.write(',\n')
visited.remove(id(obj))
stdout.write('%s}' % (' ' * 2 * indent))
if indent == 0:
stdout.write('\n')
def dump(obj):
return _dump_helper(obj, 0, set())
x = {'hello': ['a', 1, 2], 'world': ['foo', 'bar']}
x['world'].append(x['hello'])
x['hello'].append(x['world'])
dump(x)
To embed this program on your website, copy the following code and paste it into your website's HTML: