[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