|
Sean Reifschneider
jafo at tummy.com
Thu Sep 2 02:36:38 EDT 2004
On Mon, Aug 30, 2004 at 10:52:32AM -0400, Gregory (Grisha) Trubetskoy wrote:
>I've skimmed over the two messages you referenced, and it wasn't very
>apparent what the problem is mainly due to the complexity of the
>attributes. I think if you want this resolved, you need to work on a clean
Ok, I've finally been able to reproduce the problem in a simple example.
Here's what I did:
Add the following to my httpd.conf:
Listen *:8084
# for debugging
MaxKeepAliveRequests 1
MaxRequestsPerChild 1
<VirtualHost *:8084>
ServerName dev.example.com
ServerAdmin webmaster at example.com
DocumentRoot /home/httpd/modpythonpublishertest/py/
PythonAutoReload On
PythonDebug On
<Directory /home/httpd/modpythonpublishertest/py/>
AddHandler mod_python .py
PythonHandler foo::handler
</Directory>
</VirtualHost>
/home/httpd/modpythonpublishertest/py/foo.py:
def handler(req):
#from mod_python import util
import mod_python
from package import module
module.function(req)
req.write('Completed')
return(mod_python.apache.OK)
/home/httpd/modpythonpublishertest/py/package/__init__.py:
import module
/home/httpd/modpythonpublishertest/py/package/module.py:
import mod_python
def function(request):
mod_python.util.FieldStorage(request)
Now, restart Apache and access http://127.0.0.1:8084/foo.py The
following is displayed:
Mod_python error: "PythonHandler foo::handler"
Traceback (most recent call last):
File "/usr/lib/python2.3/site-packages/mod_python/apache.py", line
299, in HandlerDispatch
result = object(req)
File "/home/httpd/modpythonpublishertest/py/foo.py", line 5, in
handler
module.function(req)
File "/home/httpd/modpythonpublishertest/py/package/module.py", line
4, in function
mod_python.util.FieldStorage(request)
AttributeError: 'module' object has no attribute 'util'
If you uncomment the line "#from mod_python import util" from foo.py and
reload the URL, it will display:
Completed
Unfortunately, the patch which "Byron Ellacott <bje at apnic.net>" posted
about a couple of days ago I can confirm does *NOT* resolve this issue.
Though it definitely sounds like a similar issue.
It seems to me that the information I posted back in May of 2004 in:
http://www.modpython.org/pipermail/mod_python/2004-May/015678.html
has some fairly important information, it's just that it means nothing
to me. In particular:
<module 'jotweb.jotwebutils' from
'/usr/lib/python2.2/site-packages/jotweb/jotwebutils.py'>
<module
'/var/www/jotweb/www.tummy.jotweb.jotwebutils' from
'/usr/lib/python2.2/site-packages/jotweb/jotwebutils.py'>
In other words, it seems to have a weird path in one of the modules.
Note that in this case, "/var/www/jotweb/www.tummy.com/html" was
probably my DocumentRoot.
Note that in my testing tonight, I tried augmenting
apache.py.import_module(), and it seems to only get called for "foo",
not for mod_pyhon, of course. I added some logging of the above, and
they're both coming up as "module 'mod_python'". However, if I take a
dir() of it, I see that if I leave the line commented I get:
['__all__', '__builtins__', '__doc__', '__file__', '__name__',
'__path__', 'apache']
and if I uncomment it I get:
['__all__', '__builtins__', '__doc__', '__file__', '__name__',
'__path__', 'apache', 'util']
I believe this is fairly close to what I've seen elsewhere. This case I
can't really reproduce outside of mod_python, but others I could. In
other words, it was my own code that was having this problem in the
past, but if I ran the same code outside of mod_python, it would run
fine.
That's about all I know. It seems like some sort of interaction, where
something mod_python is doing is causing something weird to happen with
standard Python imports.
Sean
--
Thieves broke into Scotland Yard yesterday and stole all the toilets.
Detectives say they have nothing to go on.
Sean Reifschneider, Member of Technical Staff <jafo at tummy.com>
tummy.com, ltd. - Linux Consulting since 1995. Qmail, Python, SysAdmin
|