[mod_python] python_init errors

Jim McDonald jimmcd at ns.sympatico.ca
Sun Mar 15 12:05:29 EDT 2009


Graham Dumpleton wrote:
>> 2009/3/15 Jim McDonald <jimmcd at ns.sympatico.ca>:
>>
>>
>> OK.
>>
>> The mod_python.publisher problem is like this:
>>
>>     Following the instructions in the mod_python manual, I created a test
>> directory under my Apache server root called 'Python' and added to
>> httpd.conf these lines:
>>
>>      <Directory "C:/Program Files/Apache Software
>> Foundation/Apache2.2/htdocs/Python/">
>>         AddHandler mod_python .py
>>         PythonHandler mptest
>>         PythonDebug On
>>     </Directory>
>>
>> Mptest.py is, of course, the test script described in the manual.
>>
>> It worked as described.
>>
>> I then proceeded to the 'Tutorial' in the manual and substituted
>> mod_python.publisher for mptest in httpd.conf. I also added the form.htm
>> page to /htdocs and form.py to the Python directory. This resulted in a 404
>> error--"The requested URL /Python/form.py/email was not found on this
>> server." Simpler scripts (like mptest.py) in the same directory fail in the
>> same way.
>>
>> No error shows up in Apache's error log.
>>
>> It's very puzzling to me that Apache is unable to find files that are
>> plainly present in the places where it says it can't find them. Any advice?
>>
>>
>> Post the contents of the form.py file.
>>
>> Also have a read of:
>>
>>   http://webpython.codepoint.net/mod_python_tutorial
>>
>> It is a better tutorial.
>>
>> Graham
>>
>>
>>
>> Form.py goes like this:
>>
>> import smtplib
>>
>> WEBMASTER = "webmaster"    #webmaster email
>> SMTP_SERVER = "SIRIUS"     # That's the name of my server.
>>                            # The rest of the code is cut-and-pasted
>>                            # out of the tutorial.
>> def email(req, name, email, comment):
>>     if not (name and email and comment):
>>         return "A required parameter is missing, \
>>                     please go back and complete the form."
>>     msg = """\
>> From: %s
>> SubjectL feedback
>> To: %s
>>
>> I have the following comment:
>>
>> %s
>>
>> Thank you,
>>
>> %s
>>
>> """ % (email, WEBMASTER, comment, name)
>>
>>     # send it out
>>     conn = smtplib.SMTP(SMTP_SERVER)
>>     conn.sendmail(email, (WEBMASTER), msg)
>>     conn.quit()
>>
>>     # provide feedback to the user
>>     s = """\
>> <html>
>>
>> Dear %s,<br>
>> Thank you for your kind comments. \n
>> We will get back to you shortly.
>>
>> </html>""" % name
>>
>>     return s
>>
>> It takes input from this web form:
>>
>>  <html>
>>       Please provide feedback below:
>>   <p>
>>   <form action="Python/form.py/email" method="POST">
>>
>>       Name:    <input type="text" name="name"><br>
>>       Email:   <input type="text" name="email"><br>
>>       Comment: <textarea name="comment" rows=4 cols=20></textarea><br>
>>       <input type="submit">
>>
>>   </form>
>>   </html>
>>
>> I hope this sheds light.
>>
>> Thanks very much for your attention to this and for your quick response.
>>
>> I'll go and have a look now at the tutorial you mentioned.
>>
>>
>> This only has a chance of working if HTML file is in too directory of
>> server. Where have you put it? If in same directory as .py file,
>> change 'action' in form to be just 'form.py/email'.
>>
>> Please use reply-all and keep followups on the list
>>
>> It was in the root directory. I moved it to the Python directory, amended
>> the path as suggested, and ran it from there. Same result.
>>
>>
>> Hmmm, is your code file really called 'Form.py' as you said. Your
>> action is referencing 'form.py'. This isn't Windows, the case of names
>> is important.
>>
>>
>> Good point. No, it was actually called 'FORM.PY'
>>
>> Unhappily, though, changing the reference made no difference.
>>
>> I want to emphasize, though, that I have several python files in the the
>> Python directory (which is the subject of the httpd.conf directive), and, as
>> long as mod_python.publisher is the handler, Apache can't see any of them.
>> Even the charmingly simple mptest.py.
>>
>> Well, hardly any of them. There's one called index.py that runs when I
>> navigate to the Python directory and click on it. Its code looks like this:
>>           def index(req):
>>               return "We are in index()"
>>
>>           def hello(req):
>>               return "We are in hello()"
>>
>> The others not only refuse to run, they give a 404 error. I can't see what
>> distinguishes this one from the others in that respect. Do you see anything
>> special about it?
>>     
>
> What exactly is the URL in the web browser when you access 'index.py'
> and it works?
>
> The 'index.py' file is special. The documentation explains, as it
> should about the 'index' function within a file being special.
>
> Graham
>
> _______________________________________________
> Mod_python mailing list
> Mod_python at modpython.org
> http://mailman.modpython.org/mailman/listinfo/mod_python
>
>   
This is the URL: http://sirius/Python/index.py.

I have to put that right in the address bar to run it. But when I type 
the URLs of most of the other python programs--which are in the same 
directory--, I get a 404 error.
    There's another one (also from the mod_python manual--"7.1.1 
Introduction" where the /mod_python.publisher /explanation begins) which 
looks like this:

  """ Publisher example """
  def say(req, what="NOTHING"):
      return "I am saying %s" % what


It works when the URL passes it an argument (like 
"http://sirius/Python/nothing.py/say?what=as little as possible."), even 
a null argument like "http://sirius/Python/nothing.py/say". But if we 
pass it no argument ("http://sirius/Python/nothing.py"), we get that 404.

The documentation on Traversal (7.1.2.1) says that 404 is what we get 
"if an object in the path could not be found". So I suppose that that's 
what's happening. But what object might it be?


-- 
-------------- next part --------------
Skipped content of type multipart/related


More information about the Mod_python mailing list