diff options
Diffstat (limited to 'Lib/repr.py')
-rw-r--r-- | Lib/repr.py | 174 |
1 files changed, 87 insertions, 87 deletions
diff --git a/Lib/repr.py b/Lib/repr.py index 0827428..b47ac2a 100644 --- a/Lib/repr.py +++ b/Lib/repr.py @@ -3,93 +3,93 @@ import string class Repr: - def __init__(self): - self.maxlevel = 6 - self.maxtuple = 6 - self.maxlist = 6 - self.maxdict = 4 - self.maxstring = 30 - self.maxlong = 40 - self.maxother = 20 - def repr(self, x): - return self.repr1(x, self.maxlevel) - def repr1(self, x, level): - typename = `type(x)`[7:-2] # "<type '......'>" - if ' ' in typename: - parts = string.split(typename) - typename = string.joinfields(parts, '_') - if hasattr(self, 'repr_' + typename): - return getattr(self, 'repr_' + typename)(x, level) - else: - s = `x` - 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:] - return s - def repr_tuple(self, x, level): - n = len(x) - if n == 0: return '()' - if level <= 0: return '(...)' - s = '' - for i in range(min(n, self.maxtuple)): - if s: s = s + ', ' - s = s + self.repr1(x[i], level-1) - if n > self.maxtuple: s = s + ', ...' - elif n == 1: s = s + ',' - return '(' + s + ')' - def repr_list(self, x, level): - n = len(x) - if n == 0: return '[]' - if level <= 0: return '[...]' - s = '' - for i in range(min(n, self.maxlist)): - if s: s = s + ', ' - s = s + self.repr1(x[i], level-1) - if n > self.maxlist: s = s + ', ...' - return '[' + s + ']' - def repr_dictionary(self, x, level): - n = len(x) - if n == 0: return '{}' - if level <= 0: return '{...}' - s = '' - keys = x.keys() - keys.sort() - for i in range(min(n, self.maxdict)): - if s: s = s + ', ' - key = keys[i] - s = s + self.repr1(key, level-1) - s = s + ': ' + self.repr1(x[key], level-1) - if n > self.maxdict: s = s + ', ...' - return '{' + s + '}' - def repr_string(self, x, level): - s = `x[:self.maxstring]` - if len(s) > self.maxstring: - i = max(0, (self.maxstring-3)/2) - j = max(0, self.maxstring-3-i) - s = `x[:i] + x[len(x)-j:]` - s = s[:i] + '...' + s[len(s)-j:] - return s - def repr_long_int(self, x, level): - s = `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:] - return s - def repr_instance(self, x, level): - try: - s = `x` - # Bugs in x.__repr__() can cause arbitrary - # exceptions -- then make up something - except: - return '<' + x.__class__.__name__ + ' instance at ' + \ - hex(id(x))[2:] + '>' - 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:] - return s + def __init__(self): + self.maxlevel = 6 + self.maxtuple = 6 + self.maxlist = 6 + self.maxdict = 4 + self.maxstring = 30 + self.maxlong = 40 + self.maxother = 20 + def repr(self, x): + return self.repr1(x, self.maxlevel) + def repr1(self, x, level): + typename = `type(x)`[7:-2] # "<type '......'>" + if ' ' in typename: + parts = string.split(typename) + typename = string.joinfields(parts, '_') + if hasattr(self, 'repr_' + typename): + return getattr(self, 'repr_' + typename)(x, level) + else: + s = `x` + 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:] + return s + def repr_tuple(self, x, level): + n = len(x) + if n == 0: return '()' + if level <= 0: return '(...)' + s = '' + for i in range(min(n, self.maxtuple)): + if s: s = s + ', ' + s = s + self.repr1(x[i], level-1) + if n > self.maxtuple: s = s + ', ...' + elif n == 1: s = s + ',' + return '(' + s + ')' + def repr_list(self, x, level): + n = len(x) + if n == 0: return '[]' + if level <= 0: return '[...]' + s = '' + for i in range(min(n, self.maxlist)): + if s: s = s + ', ' + s = s + self.repr1(x[i], level-1) + if n > self.maxlist: s = s + ', ...' + return '[' + s + ']' + def repr_dictionary(self, x, level): + n = len(x) + if n == 0: return '{}' + if level <= 0: return '{...}' + s = '' + keys = x.keys() + keys.sort() + for i in range(min(n, self.maxdict)): + if s: s = s + ', ' + key = keys[i] + s = s + self.repr1(key, level-1) + s = s + ': ' + self.repr1(x[key], level-1) + if n > self.maxdict: s = s + ', ...' + return '{' + s + '}' + def repr_string(self, x, level): + s = `x[:self.maxstring]` + if len(s) > self.maxstring: + i = max(0, (self.maxstring-3)/2) + j = max(0, self.maxstring-3-i) + s = `x[:i] + x[len(x)-j:]` + s = s[:i] + '...' + s[len(s)-j:] + return s + def repr_long_int(self, x, level): + s = `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:] + return s + def repr_instance(self, x, level): + try: + s = `x` + # Bugs in x.__repr__() can cause arbitrary + # exceptions -- then make up something + except: + return '<' + x.__class__.__name__ + ' instance at ' + \ + hex(id(x))[2:] + '>' + 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:] + return s aRepr = Repr() repr = aRepr.repr |