[ 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