1 """Redo the `...` (representation) but with limits on most sizes."""
3 __all__
= ["Repr","repr"]
16 return self
.repr1(x
, self
.maxlevel
)
17 def repr1(self
, x
, level
):
18 typename
= type(x
).__name
__
20 parts
= typename
.split()
21 typename
= '_'.join(parts
)
22 if hasattr(self
, 'repr_' + typename
):
23 return getattr(self
, 'repr_' + typename
)(x
, level
)
26 if len(s
) > self
.maxother
:
27 i
= max(0, (self
.maxother
-3)//2)
28 j
= max(0, self
.maxother
-3-i
)
29 s
= s
[:i
] + '...' + s
[len(s
)-j
:]
31 def repr_tuple(self
, x
, level
):
33 if n
== 0: return '()'
34 if level
<= 0: return '(...)'
36 for i
in range(min(n
, self
.maxtuple
)):
38 s
= s
+ self
.repr1(x
[i
], level
-1)
39 if n
> self
.maxtuple
: s
= s
+ ', ...'
40 elif n
== 1: s
= s
+ ','
42 def repr_list(self
, x
, level
):
44 if n
== 0: return '[]'
45 if level
<= 0: return '[...]'
47 for i
in range(min(n
, self
.maxlist
)):
49 s
= s
+ self
.repr1(x
[i
], level
-1)
50 if n
> self
.maxlist
: s
= s
+ ', ...'
53 def repr_array(self
, x
, level
):
55 header
= "array('%s', [" % x
.typecode
59 return header
+ "...])"
61 for i
in range(min(n
, self
.maxarray
)):
64 s
+= self
.repr1(x
[i
], level
-1)
67 return header
+ s
+ "])"
69 def repr_dict(self
, x
, level
):
71 if n
== 0: return '{}'
72 if level
<= 0: return '{...}'
76 for i
in range(min(n
, self
.maxdict
)):
79 s
= s
+ self
.repr1(key
, level
-1)
80 s
= s
+ ': ' + self
.repr1(x
[key
], level
-1)
81 if n
> self
.maxdict
: s
= s
+ ', ...'
83 def repr_str(self
, x
, level
):
84 s
= `x
[:self
.maxstring
]`
85 if len(s
) > self
.maxstring
:
86 i
= max(0, (self
.maxstring
-3)//2)
87 j
= max(0, self
.maxstring
-3-i
)
88 s
= `x
[:i
] + x
[len(x
)-j
:]`
89 s
= s
[:i
] + '...' + s
[len(s
)-j
:]
91 def repr_long(self
, x
, level
):
92 s
= `x`
# XXX Hope this isn't too slow...
93 if len(s
) > self
.maxlong
:
94 i
= max(0, (self
.maxlong
-3)//2)
95 j
= max(0, self
.maxlong
-3-i
)
96 s
= s
[:i
] + '...' + s
[len(s
)-j
:]
98 def repr_instance(self
, x
, level
):
101 # Bugs in x.__repr__() can cause arbitrary
102 # exceptions -- then make up something
104 return '<' + x
.__class
__.__name
__ + ' instance at ' + \
106 if len(s
) > self
.maxstring
:
107 i
= max(0, (self
.maxstring
-3)//2)
108 j
= max(0, self
.maxstring
-3-i
)
109 s
= s
[:i
] + '...' + s
[len(s
)-j
:]