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.

Reply via email to