"""Redo the `...` (representation) but with limits on most sizes."""
__all__
= ["Repr","repr"]
from itertools
import islice
return self
.repr1(x
, self
.maxlevel
)
def repr1(self
, x
, level
):
typename
= type(x
).__name
__
typename
= '_'.join(parts
)
if hasattr(self
, 'repr_' + typename
):
return getattr(self
, 'repr_' + typename
)(x
, level
)
if len(s
) > self
.maxother
:
i
= max(0, (self
.maxother
-3)//2)
j
= max(0, self
.maxother
-3-i
)
s
= s
[:i
] + '...' + s
[len(s
)-j
:]
def _repr_iterable(self
, x
, level
, left
, right
, maxiter
, trail
=''):
pieces
= [repr1(elem
, newlevel
) for elem
in islice(x
, maxiter
)]
if n
> maxiter
: pieces
.append('...')
if n
== 1 and trail
: right
= trail
+ right
return '%s%s%s' % (left
, s
, right
)
def repr_tuple(self
, x
, level
):
return self
._repr
_iterable
(x
, level
, '(', ')', self
.maxlist
, ',')
def repr_list(self
, x
, level
):
return self
._repr
_iterable
(x
, level
, '[', ']', self
.maxlist
)
def repr_array(self
, x
, level
):
header
= "array('%s', [" % x
.typecode
return self
._repr
_iterable
(x
, level
, header
, '])', self
.maxarray
)
def repr_set(self
, x
, level
):
return self
._repr
_iterable
(x
, level
, 'set([', '])', self
.maxset
)
def repr_frozenset(self
, x
, level
):
return self
._repr
_iterable
(x
, level
, 'frozenset([', '])',
def repr_deque(self
, x
, level
):
return self
._repr
_iterable
(x
, level
, 'deque([', '])', self
.maxdeque
)
def repr_dict(self
, x
, level
):
if level
<= 0: return '{...}'
for key
in islice(sorted(x
), self
.maxdict
):
keyrepr
= repr1(key
, newlevel
)
valrepr
= repr1(x
[key
], newlevel
)
pieces
.append('%s: %s' % (keyrepr
, valrepr
))
if n
> self
.maxdict
: pieces
.append('...')
def repr_str(self
, x
, level
):
s
= __builtin__
.repr(x
[:self
.maxstring
])
if len(s
) > self
.maxstring
:
i
= max(0, (self
.maxstring
-3)//2)
j
= max(0, self
.maxstring
-3-i
)
s
= __builtin__
.repr(x
[:i
] + x
[len(x
)-j
:])
s
= s
[:i
] + '...' + s
[len(s
)-j
:]
def repr_long(self
, x
, level
):
s
= __builtin__
.repr(x
) # XXX Hope this isn't too slow...
if len(s
) > self
.maxlong
:
i
= max(0, (self
.maxlong
-3)//2)
j
= max(0, self
.maxlong
-3-i
)
s
= s
[:i
] + '...' + s
[len(s
)-j
:]
def repr_instance(self
, x
, level
):
# Bugs in x.__repr__() can cause arbitrary
# exceptions -- then make up something
return '<%s instance at %x>' % (x
.__class
__.__name
__, id(x
))
if len(s
) > self
.maxstring
:
i
= max(0, (self
.maxstring
-3)//2)
j
= max(0, self
.maxstring
-3-i
)
s
= s
[:i
] + '...' + s
[len(s
)-j
:]