[Python-checkins] CVS: python/dist/src/Lib pprint.py,1.12,1.13
Tim Peters
tim_one@users.sourceforge.net
Mon, 14 May 2001 00:06:00 -0700
Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv28221/python/dist/src/Lib
Modified Files:
pprint.py
Log Message:
SF bug[ #423781: pprint.isrecursive() broken.
Index: pprint.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/pprint.py,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -r1.12 -r1.13
*** pprint.py 2001/02/12 02:00:42 1.12
--- pprint.py 2001/05/14 07:05:58 1.13
***************
*** 50,74 ****
printer.pprint(object)
-
def pformat(object):
"""Format a Python object into a pretty-printed representation."""
return PrettyPrinter().pformat(object)
def isreadable(object):
"""Determine if saferepr(object) is readable by eval()."""
! return PrettyPrinter().isreadable(object)
!
def isrecursive(object):
"""Determine if object requires a recursive representation."""
! return PrettyPrinter().isrecursive(object)
!
- def saferepr(object):
- """Version of repr() which can handle recursive data structures."""
- return _safe_repr(object, {})[0]
-
-
class PrettyPrinter:
def __init__(self, indent=1, width=80, depth=None, stream=None):
--- 50,69 ----
printer.pprint(object)
def pformat(object):
"""Format a Python object into a pretty-printed representation."""
return PrettyPrinter().pformat(object)
+ def saferepr(object):
+ """Version of repr() which can handle recursive data structures."""
+ return _safe_repr(object, {})[0]
def isreadable(object):
"""Determine if saferepr(object) is readable by eval()."""
! return _safe_repr(object, {})[1]
def isrecursive(object):
"""Determine if object requires a recursive representation."""
! return _safe_repr(object, {})[2]
class PrettyPrinter:
def __init__(self, indent=1, width=80, depth=None, stream=None):
***************
*** 93,97 ****
width = int(width)
assert indent >= 0
! assert (not depth) or depth > 0, "depth may not be negative"
assert width
self.__depth = depth
--- 88,92 ----
width = int(width)
assert indent >= 0
! assert depth is None or depth > 0, "depth must be > 0"
assert width
self.__depth = depth
***************
*** 183,191 ****
def __repr(self, object, context, level):
! repr, readable = _safe_repr(object, context, self.__depth, level)
if not readable:
self.__readable = 0
return repr
def _safe_repr(object, context, maxlevels=None, level=0):
--- 178,190 ----
def __repr(self, object, context, level):
! repr, readable, recursive = _safe_repr(object, context,
! self.__depth, level)
if not readable:
self.__readable = 0
+ if recursive:
+ self.__recursive = 1
return repr
+ # Return triple (repr_string, isreadable, isrecursive).
def _safe_repr(object, context, maxlevels=None, level=0):
***************
*** 194,203 ****
if not (typ in (DictType, ListType, TupleType) and object):
rep = `object`
! return rep, (rep and (rep[0] != '<'))
if context.has_key(id(object)):
! return `_Recursion(object)`, 0
objid = id(object)
context[objid] = 1
readable = 1
if typ is DictType:
if maxlevels and level >= maxlevels:
--- 193,203 ----
if not (typ in (DictType, ListType, TupleType) and object):
rep = `object`
! return rep, (rep and (rep[0] != '<')), 0
if context.has_key(id(object)):
! return `_Recursion(object)`, 0, 1
objid = id(object)
context[objid] = 1
readable = 1
+ recursive = 0
if typ is DictType:
if maxlevels and level >= maxlevels:
***************
*** 207,218 ****
items = object.items()
k, v = items[0]
! krepr, kreadable = _safe_repr(k, context, maxlevels, level)
! vrepr, vreadable = _safe_repr(v, context, maxlevels, level)
readable = readable and kreadable and vreadable
s = "{%s: %s" % (krepr, vrepr)
for k, v in items[1:]:
! krepr, kreadable = _safe_repr(k, context, maxlevels, level)
! vrepr, vreadable = _safe_repr(v, context, maxlevels, level)
readable = readable and kreadable and vreadable
s = "%s, %s: %s" % (s, krepr, vrepr)
s = s + "}"
--- 207,224 ----
items = object.items()
k, v = items[0]
! krepr, kreadable, krecur = _safe_repr(k, context, maxlevels,
! level)
! vrepr, vreadable, vrecur = _safe_repr(v, context, maxlevels,
! level)
readable = readable and kreadable and vreadable
+ recursive = recursive or krecur or vrecur
s = "{%s: %s" % (krepr, vrepr)
for k, v in items[1:]:
! krepr, kreadable, krecur = _safe_repr(k, context, maxlevels,
! level)
! vrepr, vreadable, vrecur = _safe_repr(v, context, maxlevels,
! level)
readable = readable and kreadable and vreadable
+ recursive = recursive or krecur or vrecur
s = "%s, %s: %s" % (s, krepr, vrepr)
s = s + "}"
***************
*** 223,229 ****
readable = 0
else:
! subrepr, subreadable = _safe_repr(
object[0], context, maxlevels, level)
readable = readable and subreadable
s = s + subrepr
tail = object[1:]
--- 229,236 ----
readable = 0
else:
! subrepr, subreadable, subrecur = _safe_repr(
object[0], context, maxlevels, level)
readable = readable and subreadable
+ recursive = recursive or subrecur
s = s + subrepr
tail = object[1:]
***************
*** 232,242 ****
s = s + ','
for ent in tail:
! subrepr, subreadable = _safe_repr(
ent, context, maxlevels, level)
readable = readable and subreadable
s = "%s, %s" % (s, subrepr)
s = s + term
del context[objid]
! return s, readable
--- 239,250 ----
s = s + ','
for ent in tail:
! subrepr, subreadable, subrecur = _safe_repr(
ent, context, maxlevels, level)
readable = readable and subreadable
+ recursive = recursive or subrecur
s = "%s, %s" % (s, subrepr)
s = s + term
del context[objid]
! return s, readable and not recursive, recursive