added deeptype, fixed itype for class instances, added maxLen=None for fastRepr
This commit is contained in:
parent
233501d0a6
commit
29b7a72de9
|
|
@ -29,7 +29,8 @@ __all__ = ['enumerate', 'unique', 'indent', 'nonRepeatingRandomList',
|
|||
'GoldenRectangle', 'pivotScalar', 'rad90', 'rad180', 'rad270', 'rad360',
|
||||
'nullGen', 'loopGen', 'makeFlywheelGen', 'flywheel', 'choice',
|
||||
'printStack', 'printReverseStack', 'listToIndex2item', 'listToItem2index',
|
||||
'pandaBreak','pandaTrace','formatTimeCompact','DestructiveScratchPad']
|
||||
'pandaBreak','pandaTrace','formatTimeCompact','DestructiveScratchPad',
|
||||
'deeptype',]
|
||||
|
||||
import types
|
||||
import string
|
||||
|
|
@ -2261,7 +2262,7 @@ def fastRepr(obj, maxLen=200, strFactor=10, _visitedIds=None):
|
|||
s = ''
|
||||
s += {types.TupleType: '(',
|
||||
types.ListType: '[',}[type(obj)]
|
||||
if len(obj) > maxLen:
|
||||
if maxLen is not None and len(obj) > maxLen:
|
||||
o = obj[:maxLen]
|
||||
ellips = '...'
|
||||
else:
|
||||
|
|
@ -2278,7 +2279,7 @@ def fastRepr(obj, maxLen=200, strFactor=10, _visitedIds=None):
|
|||
return s
|
||||
elif type(obj) is types.DictType:
|
||||
s = '{'
|
||||
if len(obj) > maxLen:
|
||||
if maxLen is not None and len(obj) > maxLen:
|
||||
o = obj.keys()[:maxLen]
|
||||
ellips = '...'
|
||||
else:
|
||||
|
|
@ -2294,8 +2295,9 @@ def fastRepr(obj, maxLen=200, strFactor=10, _visitedIds=None):
|
|||
s += '}'
|
||||
return s
|
||||
elif type(obj) is types.StringType:
|
||||
maxLen *= strFactor
|
||||
if len(obj) > maxLen:
|
||||
if maxLen is not None:
|
||||
maxLen *= strFactor
|
||||
if maxLen is not None and len(obj) > maxLen:
|
||||
return safeRepr(obj[:maxLen])
|
||||
else:
|
||||
return safeRepr(obj)
|
||||
|
|
@ -2445,11 +2447,56 @@ class RefCounter:
|
|||
def itype(obj):
|
||||
t = type(obj)
|
||||
if t is types.InstanceType:
|
||||
return '%s of <class %s>' % (repr(types.InstanceType),
|
||||
return '%s of <class %s>>' % (repr(types.InstanceType)[:-1],
|
||||
str(obj.__class__))
|
||||
else:
|
||||
return t
|
||||
|
||||
def deeptype(obj, maxLen=100, _visitedIds=None):
|
||||
if _visitedIds is None:
|
||||
_visitedIds = set()
|
||||
if id(obj) in _visitedIds:
|
||||
return '<ALREADY-VISITED %s>' % itype(obj)
|
||||
t = type(obj)
|
||||
if t in (types.TupleType, types.ListType):
|
||||
s = ''
|
||||
s += {types.TupleType: '(',
|
||||
types.ListType: '[',}[type(obj)]
|
||||
if maxLen is not None and len(obj) > maxLen:
|
||||
o = obj[:maxLen]
|
||||
ellips = '...'
|
||||
else:
|
||||
o = obj
|
||||
ellips = ''
|
||||
_visitedIds.add(id(obj))
|
||||
for item in o:
|
||||
s += deeptype(item, maxLen, _visitedIds=_visitedIds)
|
||||
s += ', '
|
||||
_visitedIds.remove(id(obj))
|
||||
s += ellips
|
||||
s += {types.TupleType: ')',
|
||||
types.ListType: ']',}[type(obj)]
|
||||
return s
|
||||
elif type(obj) is types.DictType:
|
||||
s = '{'
|
||||
if maxLen is not None and len(obj) > maxLen:
|
||||
o = obj.keys()[:maxLen]
|
||||
ellips = '...'
|
||||
else:
|
||||
o = obj.keys()
|
||||
ellips = ''
|
||||
_visitedIds.add(id(obj))
|
||||
for key in o:
|
||||
value = obj[key]
|
||||
s += '%s: %s, ' % (deeptype(key, maxLen, _visitedIds=_visitedIds),
|
||||
deeptype(value, maxLen, _visitedIds=_visitedIds))
|
||||
_visitedIds.remove(id(obj))
|
||||
s += ellips
|
||||
s += '}'
|
||||
return s
|
||||
else:
|
||||
return itype(obj)
|
||||
|
||||
def getNumberedTypedString(items, maxLen=5000, numPrefix=''):
|
||||
"""get a string that has each item of the list on its own line,
|
||||
and each item is numbered on the left from zero"""
|
||||
|
|
@ -3455,3 +3502,4 @@ __builtin__.MiniLogSentry = MiniLogSentry
|
|||
__builtin__.logBlock = logBlock
|
||||
__builtin__.HierarchyException = HierarchyException
|
||||
__builtin__.pdir = pdir
|
||||
__builtin__.deeptype = deeptype
|
||||
|
|
|
|||
Loading…
Reference in New Issue