I was checking the documentation with respect to this patch and I noticed a
couple of things.
The FieldStorage constructor has 2 undocumented parameters, file_callback=None,
field_callback=None. These were added in r160259 as part of Barry Pearce's fix
for MODPYTHON-40. In the same patch, the make_file and make_field methods were
added. These allow FieldStorage to be subclassed and provide an alternative to
using the callbacks.
In Mike's modpython325_util_py_dict.patch, the make_field and make_file methods
have be removed, with the reasoning that the callbacks should be sufficient for
controlling the upload.
We never had a discussion of the merits of the 2 approaches - subclassing vs
passing the callbacks in the FieldStorage constructor. Should we perhaps allow
both, and reinstate make_field and make_file, or are the callbacks sufficient?
The funny thing is that subclassing was my first way of implementing it.
Someone beat me to it, so I adopted the callbacks. The structure of
FieldStorage requires either or both methods. The __init__ constructor
is doing all the parsing already, so something Pythonic like injecting
the methods later will not work:
form = util.FieldStorage()
form.make_file = myMakeFileFunction
form.parse(req)
Because of backward compatibility, my vote would be on the callbacks.
Overriding looks more organized, more structured programming, but when
you start using the FieldStorage in multiple handlers, providing
callback functions is much handier for everyday use (otherwise, you'll
end up with a dozen different FieldStorage classes or mixins for which
you have to invent names).
Further infomation on the callbacks, including some nice examples, can be found
in the python-dev archives. See
http://article.gmane.org/gmane.comp.apache.mod-python.devel/760
I'll update the docs as part of the fix for this issue.
Good idea - and a good page too, thanks Barry.