[ python-Bugs-934282 ] pydoc.stripid doesn't strip ID

SourceForge.net noreply at sourceforge.net
Sat Jun 5 13:05:24 EDT 2004


Bugs item #934282, was opened at 2004-04-13 11:32
Message generated for change (Comment added) made by tim_one
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=934282&group_id=5470

Category: Python Library
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Jim Jewett (jimjjewett)
Assigned to: Nobody/Anonymous (nobody)
Summary: pydoc.stripid doesn't strip ID

Initial Comment:
pydoc function stripid should strip the ID from an object's 
repr.  It assumes that ID will be represented as one of 
two patterns -- but this is not the case with (at least) 
the 2.3.3 distributed binary, because of case-sensitivity.

' at 0x[0-9a-f]{6,}(>+)$' 
fails because the address is capitalized -- A-F.  (Note 
that hex(15) is not capitalized -- this seems to be unique 
to addresses.)

' at [0-9A-F]{8,}(>+)$'
fails because the address does contain a 0x.

stripid checks both as a guard against false alarms, but 
I'm not sure how to guarantee that an address would 
contain a letter, so matching on either all-upper or 
all-lower may be the tightest possible bound.



----------------------------------------------------------------------

>Comment By: Tim Peters (tim_one)
Date: 2004-06-05 13:05

Message:
Logged In: YES 
user_id=31435

This can be simplifed.  The code in PyString_FromFormatV() 
massages the native %p result to guarantee it begins 
with "0x".  It didn't always do this, and inspect.py was 
written when Python didn't massage the native %p result at 
all.  Now there's no need to cater to "0X", or to cater to 
that "0x" might be missing.  The case of a-f may still differ 
across platforms, and that's deliberate (addresses are of 
most interest to C coders, and they're "used to" whichever 
case their platform delivers for %p in C code).

----------------------------------------------------------------------

Comment By: Robin Becker (rgbecker)
Date: 2004-06-05 12:31

Message:
Logged In: YES 
user_id=6946

This is the PROPER pasted in patch

===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/pydoc.py,v
retrieving revision 1.90
diff -c -r1.90 pydoc.py
*** pydoc.py    29 Jan 2004 06:37:49 -0000      1.90
--- pydoc.py    5 Jun 2004 15:33:52 -0000
***************
*** 113,124 ****
          return text[:pre] + '...' + text[len(text)-post:]
      return text

  def stripid(text):
      """Remove the hexadecimal id from a Python object
representation."""
      # The behaviour of %p is implementation-dependent; we
check two cases.
!     for pattern in [' at 0x[0-9a-f]{6,}(>+)$', ' at
[0-9A-F]{8,}(>+)$']:
!         if re.search(pattern, repr(Exception)):
!             return re.sub(pattern, '\1', text)
      return text

  def _is_some_method(object):
--- 113,124 ----
          return text[:pre] + '...' + text[len(text)-post:]
      return text

+ _re_stripid =re.compile(' at
(?:0[xX][0-9a-fA-F]{6,}|[0-9a-fA-F]{8,})(>+)$')
  def stripid(text):
      """Remove the hexadecimal id from a Python object
representation."""
      # The behaviour of %p is implementation-dependent; we
check two cases.
!     if _re_stripid.search(repr(Exception)):
!         return _re_stripid.sub('\1', text)
      return text

  def _is_some_method(object):

----------------------------------------------------------------------

Comment By: Robin Becker (rgbecker)
Date: 2004-06-05 12:23

Message:
Logged In: YES 
user_id=6946

This patch seems to fix variable case problems
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/pydoc.py,v
retrieving revision 1.90
diff -c -r1.90 pydoc.py
*** pydoc.py    29 Jan 2004 06:37:49 -0000      1.90
--- pydoc.py    5 Jun 2004 15:26:31 -0000
***************
*** 113,124 ****
          return text[:pre] + '...' + text[len(text)-post:]
      return text

  def stripid(text):
      """Remove the hexadecimal id from a Python object
representation."""
      # The behaviour of %p is implementation-dependent; we
check two cases.
!     for pattern in [' at 0x[0-9a-f]{6,}(>+)$', ' at
[0-9A-F]{8,}(>+)$']:
!         if re.search(pattern, repr(Exception)):
!             return re.sub(pattern, '\1', text)
      return text

  def _is_some_method(object):
--- 113,124 ----
          return text[:pre] + '...' + text[len(text)-post:]
      return text

+ _re_stripid =re.compile(' at
(?:0[xX][0-9a-fA-F]{6,}|[0-9a-fA-F]{8,})(>+)$']
  def stripid(text):
      """Remove the hexadecimal id from a Python object
representation."""
      # The behaviour of %p is implementation-dependent; we
check two cases.
!     if _re_stripid.search(repr(Exception)):
!         return _re_stripid.sub('\1', text)
      return text

  def _is_some_method(object):

----------------------------------------------------------------------

Comment By: Robin Becker (rgbecker)
Date: 2004-06-05 11:36

Message:
Logged In: YES 
user_id=6946

Definitely a problem in 2.3.3.

using
class bongo: pass
print bongo()

On freebsd with 2.3.3 I get
<__main__.bongo instance at 0x81a05ac>

with win2k I see
<__main__.bongo instance at 0x0112FFD0>

both are 8 characters, but the case differs.

----------------------------------------------------------------------

Comment By: Thomas Heller (theller)
Date: 2004-04-14 15:34

Message:
Logged In: YES 
user_id=11105

It seems this depends on the operating system, more exactly
on how the C compiler interprets the %p printf format.
According to what I see, on windows it fails, on linux it works.

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=934282&group_id=5470



More information about the Python-bugs-list mailing list