1 """Redo the `...` (representation) but with limits on most sizes."""
3 __all__
= ["Repr","repr"]
18 return self
.repr1(x
, self
.maxlevel
)
19 def repr1(self
, x
, level
):
20 typename
= type(x
).__name
__
22 parts
= typename
.split()
23 typename
= '_'.join(parts
)
24 if hasattr(self
, 'repr_' + typename
):
25 return getattr(self
, 'repr_' + typename
)(x
, level
)
28 if len(s
) > self
.maxother
:
29 i
= max(0, (self
.maxother
-3)//2)
30 j
= max(0, self
.maxother
-3-i
)
31 s
= s
[:i
] + '...' + s
[len(s
)-j
:]
33 def repr_tuple(self
, x
, level
):
35 if n
== 0: return '()'
36 if level
<= 0: return '(...)'
38 for i
in range(min(n
, self
.maxtuple
)):
40 s
= s
+ self
.repr1(x
[i
], level
-1)
41 if n
> self
.maxtuple
: s
= s
+ ', ...'
42 elif n
== 1: s
= s
+ ','
44 def repr_list(self
, x
, level
):
46 if n
== 0: return '[]'
47 if level
<= 0: return '[...]'
49 for i
in range(min(n
, self
.maxlist
)):
51 s
= s
+ self
.repr1(x
[i
], level
-1)
52 if n
> self
.maxlist
: s
= s
+ ', ...'
55 def repr_array(self
, x
, level
):
57 header
= "array('%s', [" % x
.typecode
61 return header
+ "...])"
63 for i
in range(min(n
, self
.maxarray
)):
66 s
+= self
.repr1(x
[i
], level
-1)
69 return header
+ s
+ "])"
71 def repr_dict(self
, x
, level
):
73 if n
== 0: return '{}'
74 if level
<= 0: return '{...}'
78 for i
in range(min(n
, self
.maxdict
)):
81 s
= s
+ self
.repr1(key
, level
-1)
82 s
= s
+ ': ' + self
.repr1(x
[key
], level
-1)
83 if n
> self
.maxdict
: s
= s
+ ', ...'
85 def repr_str(self
, x
, level
):
86 s
= `x
[:self
.maxstring
]`
87 if len(s
) > self
.maxstring
:
88 i
= max(0, (self
.maxstring
-3)//2)
89 j
= max(0, self
.maxstring
-3-i
)
90 s
= `x
[:i
] + x
[len(x
)-j
:]`
91 s
= s
[:i
] + '...' + s
[len(s
)-j
:]
93 def repr_long(self
, x
, level
):
94 s
= `x`
# XXX Hope this isn't too slow...
95 if len(s
) > self
.maxlong
:
96 i
= max(0, (self
.maxlong
-3)//2)
97 j
= max(0, self
.maxlong
-3-i
)
98 s
= s
[:i
] + '...' + s
[len(s
)-j
:]
100 def repr_instance(self
, x
, level
):
103 # Bugs in x.__repr__() can cause arbitrary
104 # exceptions -- then make up something
106 # On some systems (RH10) id() can be a negative number.
108 MAX
= 2L*sys
.maxint
+1
109 return '<' + x
.__class
__.__name
__ + ' instance at %x>'%(id(x
)&MAX
)
110 if len(s
) > self
.maxstring
:
111 i
= max(0, (self
.maxstring
-3)//2)
112 j
= max(0, self
.maxstring
-3-i
)
113 s
= s
[:i
] + '...' + s
[len(s
)-j
:]