[Python-bugs-list] [ python-Bugs-417833 ] pydoc HTTP reload failure

noreply@sourceforge.net noreply@sourceforge.net
Sat, 21 Apr 2001 08:09:04 -0700


Bugs item #417833, was updated on 2001-04-21 07:10
You can respond by visiting: 
http://sourceforge.net/tracker/?func=detail&atid=105470&aid=417833&group_id=5470

Category: Python Library
Group: None
Status: Open
Resolution: None
Priority: 5
Submitted By: Garth T Kidd (gtk)
Assigned to: Ka-Ping Yee (ping)
Summary: pydoc HTTP reload failure

Initial Comment:
pydoc, when run as a web server, can't cope with 
reloads of modules which use 'from Package import 
Module' syntax for imports. 

To reproduce: 

* extract the attached DemonstratePydocBug tarchive 
into your Python 2.1 directory

* python -c Lib\pydoc.py -p 8192

* visit http://localhost:8192/DemonstratePydocBug.html

The rest of the instructions are there. 

Demonstrated on Python 2.1 (#15, Apr 16 2001, 
18:25:49) [MSC 32 bit (Intel)] on win32. 

Funnily enough, there's no problem with trying the 
following under Python interactively: 

Python 2.1 (#15, Apr 16 2001, 18:25:49) [MSC 32 bit 
(Intel)] on win32
Type "copyright", "credits" or "license" for more 
information.
>>> import DemonstratePydocBug.ReloadFails
>>> import DemonstratePydocBug.ReloadFails
>>> import DemonstratePydocBug.ReloadFails
>>> import DemonstratePydocBug.ReloadFails

Python 2.1 (#15, Apr 16 2001, 18:25:49) [MSC 32 bit 
(Intel)] on win32
Type "copyright", "credits" or "license" for more 
information.
>>> from DemonstratePydocBug import ReloadFails
>>> from DemonstratePydocBug import ReloadFails
>>> from DemonstratePydocBug import ReloadFails
>>> from DemonstratePydocBug import ReloadFails

I'm dropping additional debugging code into pydoc.py 
to see if I can figure out what's going on. 

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

>Comment By: Garth T Kidd (gtk)
Date: 2001-04-21 08:09

Message:
Logged In: YES 
user_id=59803

Yet another demonstration case: 

DemonstratePydocBug/TryThis.py: 

    import DemonstratePydocBug.Target 
    Target = DemonstratePydocBug.Target

This gives us a local Target variable, same as 'from 
DemonstratePydocBug import Target'. Pydoc barfs on this on 
the very first load. The traceback I hacked into pydoc 
claims:

Traceback (most recent call last):

  File "C:\Python21\Lib\pydoc.py", line 223, in safeimport
    module = __import__(path)

  File "c:\python21\lib\DemonstratePydocBug\TryThis.py", 
line 9, in ?
    Target = DemonstratePydocBug.Target

AttributeError: 'DemonstratePydocBug' module has no 
attribute 'Target'

In the interpreter, everything's fine with both techniques 
for getting Target: 

C:\Python21\thirdparty\MoinMoin>python
Python 2.1 (#15, Apr 16 2001, 18:25:49) [MSC 32 bit 
(Intel)] on win32
Type "copyright", "credits" or "license" for more 
information.
>>> from DemonstratePydocBug import Target
>>> Target
<module 'DemonstratePydocBug.Target' from 'c:\python21
\lib\DemonstratePydocBug\Target.pyc'>
>>> 

C:\Python21\thirdparty\MoinMoin>python
Python 2.1 (#15, Apr 16 2001, 18:25:49) [MSC 32 bit 
(Intel)] on win32
Type "copyright", "credits" or "license" for more 
information.
>>> import DemonstratePydocBug.Target
>>> Target = DemonstratePydocBug.Target
>>> Target
<module 'DemonstratePydocBug.Target' from 'c:\python21
\lib\DemonstratePydocBug\Target.pyc'>
>>> 


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

Comment By: Garth T Kidd (gtk)
Date: 2001-04-21 07:58

Message:
Logged In: YES 
user_id=59803

WHOA. Belay that. I screwed up trying to run too many tests 
in a row without shutting down the interpreter. 

Python 2.1 (#15, Apr 16 2001, 18:25:49) [MSC 32 bit 
(Intel)] on win32
Type "copyright", "credits" or "license" for more 
information.
>>> import pydoc
>>> import DemonstratePydocBug
>>> pydoc.help(DemonstratePydocBug.Target)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
AttributeError: 'DemonstratePydocBug' module has no 
attribute 'Target'

Python 2.1 (#15, Apr 16 2001, 18:25:49) [MSC 32 bit 
(Intel)] on win32
Type "copyright", "credits" or "license" for more 
information.
>>> import pydoc
>>> import DemonstratePydocBug
>>> DemonstratePydocBug.Target
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
AttributeError: 'DemonstratePydocBug' module has no 
attribute 'Target'
>>> import DemonstratePydocBug.Target
>>> DemonstratePydocBug.Target
<module 'DemonstratePydocBug.Target' from 'c:\python21
\lib\DemonstratePydocBug\Target.pyc'>
>>> pydoc.help(DemonstratePydocBug.Target)
Help on module DemonstratePydocBug.Target:

NAME
    DemonstratePydocBug.Target

FILE
    c:\python21\lib\demonstratepydocbug\target.py

DESCRIPTION
    Target: module to help demonstrate the pydoc reload bug.
    See the docstring in __init__.py for full details.

    Reloading the description of this module in pydoc 
should work,
    but that's hardly unusual because it doesn't import 
*anything*.
    Try ReloadWorks and ReloadFails, instead.

DATA
    __file__ = r'c:\python21
\lib\DemonstratePydocBug\Target.pyc'
    __name__ = 'DemonstratePydocBug.Target'


>>> pydoc.help(DemonstratePydocBug.Target)
Help on module DemonstratePydocBug.Target:

NAME
    DemonstratePydocBug.Target
...

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

Comment By: Garth T Kidd (gtk)
Date: 2001-04-21 07:55

Message:
Logged In: YES 
user_id=59803

>>> import pydoc
>>> import DemonstratePydocBug
>>> pydoc.help(DemonstratePydocBug.Target)

... we get good stuff...

>>> print DemonstratePydocBug.ReloadFails2
<module 'DemonstratePydocBug.ReloadFails2' 
from 'DemonstratePydocBug\ReloadFails2.py'>
>>> pydoc.help(DemonstratePydocBug.ReloadFails2)

... we get good stuff...


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

Comment By: Garth T Kidd (gtk)
Date: 2001-04-21 07:43

Message:
Logged In: YES 
user_id=59803

I've found another demonstration case. Noting that 

    from package import module

gives you a variable called 'module', whilst 

    import package.module

gives you a variable called 'package', I thought I'd try 
out another import syntax which wouldn't break code that 
was trying out the first option: 

    import package.module as module

This also works under the Python 2.1 interpreter but breaks 
pydoc 1.38. I've attached an updated demonstration 
tarchive. 

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

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