[mod_python] ImportError issue

Graham Dumpleton graham.dumpleton at gmail.com
Fri Dec 5 18:04:27 EST 2008


2008/12/6 Reuben A Christie <christie at knewco.com>:
> this is how my apache config looks like
> <Directory /usr/local/apache/htdocs/linker_python >
>       Options  ExecCGI -MultiViews FollowSymLinks
>       AllowOverride All
>       Order allow,deny
>       allow from all
>       AddHandler mod_python .py
>       PythonHandler launch
>       PythonDebug On
>       AddType text/plain
> </Directory>
>
> and in the code i do following
>
> req.send_http_header()
> req.content_type = 'text/xml' (it does not matter what do i set content
> type, even if i change this to text/plain or text/html does not make any
> differece)
> req.write("<response>hello world</response>")

Which version of mod_python are you using?

Calling req.send_http_header() is only needed for mod_python 2.7.X and
older. Even then, it should go after setting req.content_type.

If still using mod_python 2.7.X, then upgrade. If you can't because
you are using Apache 1.3, then consider using mod_wsgi instead and
write your web application to WSGI API, using one of the many
toolkits/frameworks out there for WSGI.

Graham

> Graham Dumpleton wrote:
>>
>> 2008/12/6 Reuben A Christie <christie at knewco.com>:
>>
>>>
>>> In the python script itself, i set the content type to text/plain , I
>>> have
>>> not set any AddType directive in apache config
>>>
>>
>> Please post code snippet showing how this is being done and what
>> handler you are using? Ie., custom handler, mod_python.publisher etc.
>>
>> What AddHandler directives do you have set in Apache configuration?
>>
>> Have you setup any output filters in Apache, ie., AddOutputFilter*
>> directives?
>>
>> Graham
>>
>>
>>>
>>> Graham Dumpleton wrote:
>>>
>>>>
>>>> 2008/12/5 Reuben A Christie <christie at knewco.com>:
>>>>
>>>>
>>>>>
>>>>> thanks alot graham. I was able to import the modules the way you
>>>>> showed.
>>>>> its
>>>>> little intriguing but I think I ll find a better way by combining them
>>>>> into
>>>>> one __init__.py  hopefully that will work
>>>>> one more question, I keep seeing this warning message on apache log
>>>>> [warn] Cannot get media type from 'mod_python'
>>>>> its not causing any issue but I really don't understand why is it
>>>>> appearing
>>>>>
>>>>>
>>>>
>>>> What is the content type you are returning or have setup using AddType
>>>> directives? It appears it may be malformed. The message is mod_mime
>>>> complaining about it.
>>>>
>>>> Graham
>>>>
>>>>
>>>>
>>>>>
>>>>> Graham Dumpleton wrote:
>>>>>
>>>>>
>>>>>>
>>>>>> 2008/12/3 Reuben A Christie <christie at knewco.com>:
>>>>>>
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> Hi all, I am pretty novice user of mod_python. and there is an issue
>>>>>>> that
>>>>>>> I
>>>>>>> am experiencing with mod_python scripts for past 2 days that I am not
>>>>>>> able
>>>>>>> to solve.
>>>>>>>
>>>>>>> my directory structure is as following,
>>>>>>>
>>>>>>> DocumentRoot :  /usr/local/apache2/htdocs/
>>>>>>> i have a directory structure for mod_python scripts under
>>>>>>> DocumentRoot
>>>>>>> is,
>>>>>>>
>>>>>>> launch.py
>>>>>>> python_test/p1/test1
>>>>>>> python_test/p2/test2
>>>>>>>
>>>>>>> in apache config, i have added following
>>>>>>>
>>>>>>> <Directory /usr/local/apache/htdocs/python_test >
>>>>>>>    AllowOverride All
>>>>>>>    Order allow,deny
>>>>>>>    allow from all             AddHandler mod_python .py
>>>>>>>    PythonHandler launch
>>>>>>>    PythonDebug On
>>>>>>> </Directory>
>>>>>>>
>>>>>>> and launch.py looks like this,
>>>>>>>
>>>>>>> import os.path
>>>>>>> from mod_python import apache, Session, util
>>>>>>>
>>>>>>> def handler(req):
>>>>>>>    request = os.path.splitext(os.path.basename( req.uri ))[0]
>>>>>>>    req.content_type = 'text/plain'
>>>>>>>    req.send_http_header()
>>>>>>>
>>>>>>>    status = apache.OK
>>>>>>>    if request != None:
>>>>>>>            mod = __import__(request)
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> This is the wrong way of going about it. See below.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>>
>>>>>>>            if request == "test1":
>>>>>>>                    status = mod.handler(req)
>>>>>>>     return status
>>>>>>>         basically this script should act as gateway for rest of the
>>>>>>> python scripts .
>>>>>>>
>>>>>>> when I test it with, http://localhost/python_test/test1.py it does
>>>>>>> not
>>>>>>> work
>>>>>>> (i get Not found message) and if I do http://localhost/python_test/p1
>>>>>>> i
>>>>>>> get
>>>>>>> the source code of the script appear.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> For configuration as written, the launch.py file is in wrong location.
>>>>>>
>>>>>> First off suggest that launch.py not be in htdocs as then someone can
>>>>>> download source code to your handler.
>>>>>>
>>>>>> Presuming you are using mod_python 3.3.1 (if not then upgrade), move
>>>>>> the launch.py file elsewhere and then change configuration to use:
>>>>>>
>>>>>>  PythonHandler /some/path/launch.py
>>>>>>
>>>>>> Where path is location of launch.py outside of htdocs.
>>>>>>
>>>>>> Also don't use __import__. You are better off using import_module()
>>>>>> from mod_python. That way you can just supply a path to file to import
>>>>>> and not have to worry about PythonPath and lots of other module
>>>>>> madness. See:
>>>>>>
>>>>>>  http://www.modpython.org/live/current/doc-html/pyapi-apmeth.html
>>>>>>
>>>>>> Graham
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Mod_python mailing list
>>>>> Mod_python at modpython.org
>>>>> http://mailman.modpython.org/mailman/listinfo/mod_python
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Mod_python mailing list
>>> Mod_python at modpython.org
>>> http://mailman.modpython.org/mailman/listinfo/mod_python
>>>
>>>
>>>
>>
>>
>>
>
> _______________________________________________
> Mod_python mailing list
> Mod_python at modpython.org
> http://mailman.modpython.org/mailman/listinfo/mod_python
>
>


More information about the Mod_python mailing list