classification
Title: "pydoc str" works but not "pydoc str.translate"
Type: behavior Stage: resolved
Components: Library (Lib) Versions: Python 3.2, Python 3.3, Python 2.7
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: eric.araujo Nosy List: belopolsky, eric.araujo, ezio.melotti, python-dev, ysj.ray
Priority: normal Keywords: needs review, patch

Created on 2010-06-03 11:42 by eric.araujo, last changed 2011-07-29 15:39 by eric.araujo. This issue is now closed.

Files
File name Uploaded Description Edit
fix-pydoc-str.translate-3.1.diff eric.araujo, 2011-05-27 15:46
fix-pydoc-str.translate-3.2.diff eric.araujo, 2011-06-10 17:05
Messages (11)
msg106942 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2010-06-03 11:42
Inconsistent behavior:
pydoc3 str: works
pydoc3 str.translate: doesn’t
pydoc3 builtins.str: works
pydoc3 builtins.str.translate: doesn’t

I think pydoc3 str.translate should work. I’ll be able to try to write a patch in some weeks.
msg107621 - (view) Author: Alexander Belopolsky (belopolsky) * (Python committer) Date: 2010-06-12 02:00
Note that

>>> help(str.translate)
Help on method_descriptor:

translate(...)
    S.translate(table) -> str
    
    Return a copy of the string S, where all characters have been mapped
..

but
>>> help('str.translate')
no Python documentation found for 'str.translate'
msg127829 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2011-02-03 22:59
Yep, same bug.

Possibly related: #410336 (I have to read it again to make sure).
msg137064 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2011-05-27 15:46
Turns out the fix is very simple.  Please review.
msg137073 - (view) Author: Alexander Belopolsky (belopolsky) * (Python committer) Date: 2011-05-27 16:12
The patch looks good.  A nit-pick:

+        if len(parts) > 0:

Since *parts* is a list, the above can be replaced with simply "if parts:".

Also, it seems to me that the new code may produce an AttributeError when given invalid name, but locate() function is supposed to return None instead.

I wouder if it would be possible to reuse the try/except logic ing the "if module" clause and simply do something like

    if module:
        object = module
    else:
        object = builtins
    for part in parts[n:]:
        try:
            object = getattr(object, part)
        except AttributeError:
            return None
    return object
msg137077 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2011-05-27 16:23
> Since *parts* is a list, the above can be replaced with simply "if parts:"

Heh, I always use implied truth values and one disagreed with Tarek about this, but here if felt more natural to spell out my mind with an explicit > 0 comparison :)

> Also, it seems to me that the new code may produce an AttributeError
> when given invalid name

I didn’t see that, I forgot to test invalid names, since test_pydoc already has some checks.  I’ll add tests and see if I can reproduce what you’re hinting at (it would be helpful if you could give examples of invalid names: full dotted names, method names, class names?).

> I wouder if it would be possible to reuse the try/except logic ing
> the "if module" clause

Sure, as long as the tests pass I have no preference about the implementation.  BTW, what’s your opinion on the test I added?  I use render_doc to test name resolving, do you think I should also test the command-line pydoc in a subprocess or is it okay to have white-box knowledge here?
msg137078 - (view) Author: Alexander Belopolsky (belopolsky) * (Python committer) Date: 2011-05-27 16:26
On Fri, May 27, 2011 at 12:23 PM, Éric Araujo <report@bugs.python.org> wrote:
> .. I’ll add tests and see if I can reproduce what you’re hinting at (it would be helpful
> if you could give examples of invalid names: full dotted names, method names, class names?).

I did not try to apply your patch yet, but what I had in mind was
misspelled names like "str.transkate".
msg138114 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2011-06-10 17:05
I added tests to cover non-existing attributes and updated the code to follow your clever suggestion.
msg141388 - (view) Author: Roundup Robot (python-dev) Date: 2011-07-29 15:36
New changeset 68df566cbf92 by Éric Araujo in branch '2.7':
Make “pydoc somebuiltin.somemethod” work (#8887)
http://hg.python.org/cpython/rev/68df566cbf92
msg141389 - (view) Author: Roundup Robot (python-dev) Date: 2011-07-29 15:38
New changeset f02a8f906342 by Éric Araujo in branch '3.2':
Make “pydoc somebuiltin.somemethod” work (#8887)
http://hg.python.org/cpython/rev/f02a8f906342

New changeset 91d6cabf77d6 by Éric Araujo in branch 'default':
Merge fix for #8887 from 3.2
http://hg.python.org/cpython/rev/91d6cabf77d6
msg141390 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2011-07-29 15:39
Thanks again for the useful review.
History
Date User Action Args
2011-08-01 12:40:53r.david.murraylinkissue12674 superseder
2011-07-29 15:39:32eric.araujosetstatus: open -> closed
resolution: fixed
messages: + msg141390

stage: commit review -> resolved
2011-07-29 15:38:43python-devsetmessages: + msg141389
2011-07-29 15:36:33python-devsetnosy: + python-dev
messages: + msg141388
2011-07-21 05:27:20ezio.melottisetstage: patch review -> commit review
versions: - Python 3.1
2011-06-16 23:00:21r.david.murraysettitle: “pydoc str” works but not “pydoc str.translate” -> "pydoc str" works but not "pydoc str.translate"
2011-06-10 17:05:53eric.araujosetfiles: + fix-pydoc-str.translate-3.2.diff

messages: + msg138114
2011-05-27 16:26:21belopolskysetmessages: + msg137078
2011-05-27 16:23:01eric.araujosetmessages: + msg137077
2011-05-27 16:12:10belopolskysetmessages: + msg137073
2011-05-27 15:46:27eric.araujosetfiles: + fix-pydoc-str.translate-3.1.diff

versions: + Python 3.1, Python 2.7, Python 3.3
keywords: + patch, needs review
nosy: + ysj.ray

messages: + msg137064
stage: patch review
2011-02-03 22:59:31eric.araujosetnosy: belopolsky, ezio.melotti, eric.araujo
messages: + msg127829
2010-11-28 02:24:03eric.araujosetassignee: eric.araujo
2010-06-13 08:02:07ezio.melottisetnosy: + ezio.melotti
2010-06-12 02:00:00belopolskysetnosy: + belopolsky
messages: + msg107621
2010-06-03 11:42:52eric.araujocreate