ยปCore Development>Code coverage>Lib/repr.py

Python code coverage for Lib/repr.py

#countcontent
11"""Redo the builtin repr() (representation) but with limits on most sizes."""
2n/a
31__all__ = ["Repr","repr"]
4n/a
51import __builtin__
61from itertools import islice
7n/a
82class Repr:
9n/a
101 def __init__(self):
115 self.maxlevel = 6
125 self.maxtuple = 6
135 self.maxlist = 6
145 self.maxarray = 5
155 self.maxdict = 4
165 self.maxset = 6
175 self.maxfrozenset = 6
185 self.maxdeque = 6
195 self.maxstring = 30
205 self.maxlong = 40
215 self.maxother = 20
22n/a
231 def repr(self, x):
2473 return self.repr1(x, self.maxlevel)
25n/a
261 def repr1(self, x, level):
27240 typename = type(x).__name__
28240 if ' ' in typename:
290 parts = typename.split()
300 typename = '_'.join(parts)
31240 if hasattr(self, 'repr_' + typename):
32123 return getattr(self, 'repr_' + typename)(x, level)
33n/a else:
34117 s = __builtin__.repr(x)
35117 if len(s) > self.maxother:
361 i = max(0, (self.maxother-3)//2)
371 j = max(0, self.maxother-3-i)
381 s = s[:i] + '...' + s[len(s)-j:]
39117 return s
40n/a
411 def _repr_iterable(self, x, level, left, right, maxiter, trail=''):
4298 n = len(x)
4398 if level <= 0 and n:
445 s = '...'
45n/a else:
4693 newlevel = level - 1
4793 repr1 = self.repr1
48251 pieces = [repr1(elem, newlevel) for elem in islice(x, maxiter)]
4993 if n > maxiter: pieces.append('...')
5093 s = ', '.join(pieces)
5193 if n == 1 and trail: right = trail + right
5298 return '%s%s%s' % (left, s, right)
53n/a
541 def repr_tuple(self, x, level):
5546 return self._repr_iterable(x, level, '(', ')', self.maxtuple, ',')
56n/a
571 def repr_list(self, x, level):
5832 return self._repr_iterable(x, level, '[', ']', self.maxlist)
59n/a
601 def repr_array(self, x, level):
617 header = "array('%s', [" % x.typecode
627 return self._repr_iterable(x, level, header, '])', self.maxarray)
63n/a
641 def repr_set(self, x, level):
656 x = _possibly_sorted(x)
666 return self._repr_iterable(x, level, 'set([', '])', self.maxset)
67n/a
681 def repr_frozenset(self, x, level):
696 x = _possibly_sorted(x)
706 return self._repr_iterable(x, level, 'frozenset([', '])',
716 self.maxfrozenset)
72n/a
731 def repr_deque(self, x, level):
741 return self._repr_iterable(x, level, 'deque([', '])', self.maxdeque)
75n/a
761 def repr_dict(self, x, level):
777 n = len(x)
787 if n == 0: return '{}'
795 if level <= 0: return '{...}'
805 newlevel = level - 1
815 repr1 = self.repr1
825 pieces = []
8317 for key in islice(_possibly_sorted(x), self.maxdict):
8412 keyrepr = repr1(key, newlevel)
8512 valrepr = repr1(x[key], newlevel)
8612 pieces.append('%s: %s' % (keyrepr, valrepr))
875 if n > self.maxdict: pieces.append('...')
885 s = ', '.join(pieces)
895 return '{%s}' % (s,)
90n/a
911 def repr_str(self, x, level):
9213 s = __builtin__.repr(x[:self.maxstring])
9313 if len(s) > self.maxstring:
942 i = max(0, (self.maxstring-3)//2)
952 j = max(0, self.maxstring-3-i)
962 s = __builtin__.repr(x[:i] + x[len(x)-j:])
972 s = s[:i] + '...' + s[len(s)-j:]
9813 return s
99n/a
1001 def repr_long(self, x, level):
1012 s = __builtin__.repr(x) # XXX Hope this isn't too slow...
1022 if len(s) > self.maxlong:
1031 i = max(0, (self.maxlong-3)//2)
1041 j = max(0, self.maxlong-3-i)
1051 s = s[:i] + '...' + s[len(s)-j:]
1062 return s
107n/a
1081 def repr_instance(self, x, level):
1093 try:
1103 s = __builtin__.repr(x)
111n/a # Bugs in x.__repr__() can cause arbitrary
112n/a # exceptions -- then make up something
1131 except Exception:
1141 return '<%s instance at %x>' % (x.__class__.__name__, id(x))
1152 if len(s) > self.maxstring:
1161 i = max(0, (self.maxstring-3)//2)
1171 j = max(0, self.maxstring-3-i)
1181 s = s[:i] + '...' + s[len(s)-j:]
1192 return s
120n/a
121n/a
1221def _possibly_sorted(x):
123n/a # Since not all sequences of items can be sorted and comparison
124n/a # functions may raise arbitrary exceptions, return an unsorted
125n/a # sequence in that case.
12617 try:
12717 return sorted(x)
1283 except Exception:
1293 return list(x)
130n/a
1311aRepr = Repr()
1321repr = aRepr.repr