[mod_python] how to handle xforms with publisher handler

Emiliano Moscato moski666 at gmail.com
Fri Jan 12 16:41:26 EST 2007


Hi all!

Thanks for your answers.
I've been looking the code of FieldStorage and publisher. I think it is not
soo dificult to patch FieldStorage, but: Is anybody else interested in patch
FieldStorage? If so I'll try it on monday.

On the other hand, I've trying to use another method to send my xforms which
uses "multipart/related" as Content-type and I realized that mozilla xforms
plugin sends a boundary that is bad handled by publisher-FieldStorage. This
is what browser sends:

[...]
Content-Length: 522
Content-Type: multipart/related;
boundary=---------------------------13592280651221337293469391600;
type="application/xml"; start="<4c599da9.58c746e8 at mozilla.org>"
Cookie: lang=1

-----------------------------13592280651221337293469391600
Content-Type: application/xml
Content-ID: <4c599da9.58c746e8 at mozilla.org>

<?xml version="1.0" encoding="UTF-8"?>
<idioma xmlns:xf="http://www.w3.org/2002/xforms" xmlns:ev="
http://www.w3.org/2001/xml-events" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="
http://www.w3.org/2001/XMLSchema">

      <H__interface>main</H__interface>
      <idioma>adadsfasd</idioma>
    </idioma>
-----------------------------13592280651221337293469391600--


But FieldStorage parse the content-type line up to the end trying to get
boundary, getting this as boundary:
-----------------------------7393760691212604279930853199;
type="application/xml"; start="<b8f2849.19571884 at mozilla.org>

Is this a firefox problem or a FieldStorage problem?
Regards, enjoy the weekend :)

Emiliano


2007/1/12, Jim Gallacher <jpg at jgassociates.ca>:
>
> Graham Dumpleton wrote:
> > Jim Gallacher wrote ..
> >> Emiliano Moscato wrote:
> >>> Hi all!
> >>>
> >>> I'm getting crazy trying to receive xforms xml data with mod_python +
> >>> publisher handler.
> >
> > In what way are you using mod_python.publisher? Depending to what
> > degree you are using it, mod_python 3.3 offers some alternate mechanisms
> > for doing basic dispatch against different resources which might be more
> > useful and allow you to still access content of response to decode it.
> >
> >>> In a normal HTML form, the data would be sent as
> >>> application/x-www-form-urlencoded, in the XForms world however, this
> >>> information is sent as XML formatted data (application/xml).
> >>> Up to now I've used cherryPy as web server and I've got my xml data
> with
> >>> cherrypy.threadData.xform.
> >>> I've read that PHP receive this in $HTTP_RAW_POST_DATA variable. If I
> >> send
> >>> the form to a php script all work fine.
> >>> But when I try to submit a xforms with method POST to a script managed
> >> by
> >>> publisher handler I get an error with no log in my apache server error
> >> log.
> >>> Any help?
> >> You'll need to elaborate on the error you are getting, but I think part
> >> of the problem is that you are bumping up against part of the internal
> >> "magic" of publisher.
> >>
> >> Publisher automatically creates a FieldStorage instance. Unfortunately
> >> FieldStorage assumes that the content-type starts with either
> >> "application/x-www-form-urlencoded" or "multipart/". If I had to guess
> >> I'd say that you are getting "501 Not Implemented error" as a result.
> >>
> >> Here are a couple of solutions that you might consider as a workaround:
> >>
> >> 1. Hack util.FieldStorage to properly handle your content-type. If you
> >> do this feel free to submit a patch so FieldStorage can be fixed. ;)
> >
> > Hmmm, xforms is quite different.
> >
> >   http://www.w3.org/TR/xforms/
> >
> > Looks like a lot of work.
>
> Probably. I certainly wasn't offering to do it. ;)
>
> >> 2. Hack publisher to skip the automatic creation of FieldStorage. (Line
> >> 424 in publisher.py for mod_python 3.3.0b). You can then use req.read()
> >> to read and process the POST'd data within your content handler.
> >
> > I've raised this issue before about publisher not being able to accept
> other
> > content types. See:
> >
> >   http://issues.apache.org/jira/browse/MODPYTHON-29
> >
> > Also, like PSP now does, publisher could be made to use 'req.form' if it
> > already existed. This would allow a stacked response handler before
> > publisher to decide whether some other form content was supplied, decode
> > it and set req.form to a compatible class to FieldStorage. I don't know
> that I
> > have created an issue for that idea before, but have certainly thought
> > about it and perhaps mentioned it on the mailing list.
>
> That seems like a reasonable solution.
>
> >> 3. Use a PythonFixupHandler before the content handler. In the
> >> fixuphandler use req.read() to grab the raw data and adjust the
> >> content-type header so that FieldStorage doesn't bomb out. Note that if
> >> you want to pass xml field data as parameters to your handler method
> >> you'll need to do a bit more work. For example
> >>
> >> def index(foo="bar"):
> >>      return "whatever"
> >>
> >> won't get foo from your xml data. You can likely work around this but
> >> you'll need to take a look at the source for FieldStorage and publisher
> >> to work out a strategy.
> >
> > If you are talking about modifying the input stream, an input filter
> would
> > perhaps be better. Not sure that that will help since xforms is quite
> > different and isn't just a matter of changing content type.
>
> No, I was just thinking you could get the raw data with req.read()
> (parsing the xml or whatever) and then set the content-type to
> application/x-www-form-urlencoded. That way the subsequent call to
> FieldStorage within publisher won't bomb out. The code would look
> something like this:
>
> def fixuphandler(req):
>      if req.headers_in.has_key("content-type"):
>          ctype = req.headers_in["content-type"]
>          if ctype.startswith("application/xml"):
>              req.data = parse_the_xml_data_or_whatever(req.read())
>              req.headers_in["content-type"] =
>                       "application/x-www-form-urlencoded"
>      return apache.OK
>
> A little too hackish perhaps? (Assuming it would even work).
>
> Jim
> _______________________________________________
> Mod_python mailing list
> Mod_python at modpython.org
> http://mailman.modpython.org/mailman/listinfo/mod_python
>



-- 
mOsKi
"No hay nada que uno haga mal , lo que hay es poco vino." Autor Anonimo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mm_cfg_has_not_been_edited_to_set_host_domains/pipermail/mod_python/attachments/20070112/8b5a2bac/attachment-0001.html


More information about the Mod_python mailing list