1 """Redo the `...` (representation) but with limits on most sizes."""
3 __all__
= ["Repr","repr"]
6 from itertools
import islice
24 return self
.repr1(x
, self
.maxlevel
)
26 def repr1(self
, x
, level
):
27 typename
= type(x
).__name
__
29 parts
= typename
.split()
30 typename
= '_'.join(parts
)
31 if hasattr(self
, 'repr_' + typename
):
32 return getattr(self
, 'repr_' + typename
)(x
, level
)
34 s
= __builtin__
.repr(x
)
35 if len(s
) > self
.maxother
:
36 i
= max(0, (self
.maxother
-3)//2)
37 j
= max(0, self
.maxother
-3-i
)
38 s
= s
[:i
] + '...' + s
[len(s
)-j
:]
41 def _repr_iterable(self
, x
, level
, left
, right
, maxiter
, trail
=''):
48 pieces
= [repr1(elem
, newlevel
) for elem
in islice(x
, maxiter
)]
49 if n
> maxiter
: pieces
.append('...')
51 if n
== 1 and trail
: right
= trail
+ right
52 return '%s%s%s' % (left
, s
, right
)
54 def repr_tuple(self
, x
, level
):
55 return self
._repr
_iterable
(x
, level
, '(', ')', self
.maxlist
, ',')
57 def repr_list(self
, x
, level
):
58 return self
._repr
_iterable
(x
, level
, '[', ']', self
.maxlist
)
60 def repr_array(self
, x
, level
):
61 header
= "array('%s', [" % x
.typecode
62 return self
._repr
_iterable
(x
, level
, header
, '])', self
.maxarray
)
64 def repr_set(self
, x
, level
):
66 return self
._repr
_iterable
(x
, level
, 'set([', '])', self
.maxset
)
68 def repr_frozenset(self
, x
, level
):
70 return self
._repr
_iterable
(x
, level
, 'frozenset([', '])',
73 def repr_deque(self
, x
, level
):
74 return self
._repr
_iterable
(x
, level
, 'deque([', '])', self
.maxdeque
)
76 def repr_dict(self
, x
, level
):
78 if n
== 0: return '{}'
79 if level
<= 0: return '{...}'
83 for key
in islice(sorted(x
), self
.maxdict
):
84 keyrepr
= repr1(key
, newlevel
)
85 valrepr
= repr1(x
[key
], newlevel
)
86 pieces
.append('%s: %s' % (keyrepr
, valrepr
))
87 if n
> self
.maxdict
: pieces
.append('...')
91 def repr_str(self
, x
, level
):
92 s
= __builtin__
.repr(x
[:self
.maxstring
])
93 if len(s
) > self
.maxstring
:
94 i
= max(0, (self
.maxstring
-3)//2)
95 j
= max(0, self
.maxstring
-3-i
)
96 s
= __builtin__
.repr(x
[:i
] + x
[len(x
)-j
:])
97 s
= s
[:i
] + '...' + s
[len(s
)-j
:]
100 def repr_long(self
, x
, level
):
101 s
= __builtin__
.repr(x
) # XXX Hope this isn't too slow...
102 if len(s
) > self
.maxlong
:
103 i
= max(0, (self
.maxlong
-3)//2)
104 j
= max(0, self
.maxlong
-3-i
)
105 s
= s
[:i
] + '...' + s
[len(s
)-j
:]
108 def repr_instance(self
, x
, level
):
110 s
= __builtin__
.repr(x
)
111 # Bugs in x.__repr__() can cause arbitrary
112 # exceptions -- then make up something
114 return '<%s instance at %x>' % (x
.__class
__.__name
__, id(x
))
115 if len(s
) > self
.maxstring
:
116 i
= max(0, (self
.maxstring
-3)//2)
117 j
= max(0, self
.maxstring
-3-i
)
118 s
= s
[:i
] + '...' + s
[len(s
)-j
:]