Jim Gallacher
jpg at jgassociates.ca
Sat Nov 26 13:45:24 EST 2005
Rafal Zawadzki wrote: > Hi. I am using modpython+psp. Let's take a short psp example: > > > > <% > if form.has_key('testkey'): > req.write(str(form['testkey'])) > %> > <form action="dupa.psp" method="get" enctype="multipart/form-data"> > <input type="checkbox" name="testkey" value="1"> > <input type="checkbox" name="testkey" value="2"> > <input type="submit"> > </form> > > When i set one checkbox, form['testkey'] result is key. When I set two or > more, this is a list. IMVHO it is a BIG bug. I patched my modpython to give > always a list: > > > bluszcz at idoru:$ diff util.py util.py.orig > 234c234 > < return found > --- > >> return found[0] > > bluszcz at idoru:$ > > > but i understand why it was like that. Anyone got an idea? The problem with your patch is that it will likely break every piece of form processing code ever written, *except* for the use case you've given. :) With this patch, *every* form field will be returned as a list. I'm pretty sure that was not your intent. ;) I don't think this is a BIG bug, more of little implentation quirk. If you want a list you can always use the getlist method. http://www.modpython.org/live/current/doc-html/pyapi-util-fstor.html I could personally support changes to FieldStorage such that form fields are coerced to a particular python type, similar to zope. Zope example: <input type="checkbox" name="testkey:list" value="1" /> <input type="checkbox" name="testkey:list" value="2" /> <input type="text" name="hits:int" /> <input type="text" name="employee.first_name:records" /> <input type="text" name="employee.last_name:records" /> <input type="text" name="employee.wage:records" /> I do find the current implementation of FieldStorage.__getitem__ a little odd from a performance perspective. Each __getitem__ call loops through the entire field list resulting in O(n^2) behaviour if you need to process all the fields in a form. Ouch. I can't see why we can't creat a dict when the form data is initally processed. I think this is worthwhile investigating for version 3.3. On another note, it's helpful when submitting a patch to give some additional context. At a minimum please give the mod_python version and use diff -u. Regards, Jim
|