mirror of
https://github.com/python/cpython.git
synced 2024-11-30 13:24:13 +08:00
e7b146fb3b
The attached patches update the standard library so that all modules have docstrings beginning with one-line summaries. A new docstring was added to formatter. The docstring for os.py was updated to mention nt, os2, ce in addition to posix, dos, mac.
96 lines
2.5 KiB
Python
96 lines
2.5 KiB
Python
"""Redo the `...` (representation) but with limits on most sizes."""
|
|
|
|
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
|
|
|
|
aRepr = Repr()
|
|
repr = aRepr.repr
|