Jim Gallacher
jpg at jgassociates.ca
Sat Nov 26 16:33:04 EST 2005
Gregory (Grisha) Trubetskoy wrote: > > On Sat, 26 Nov 2005, Jim Gallacher wrote: > >> 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" /> > > > IMO that's more functionality than necessary, you can always do such > conversion in user code and there is no need for mod_python to dictate > how it's done and introduce new syntax - this is something that'd be > appropriate for a mod_python-based framework of some kind, but not in mp > itself. Fair enough. > >> 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. > > > I'm pretty sure there was a reason why it had to be a list, I just can't > remember what it was. It may be that order of fields is significant. That may be so, but I would think that the most common use case would be to use FieldStorage as a dict. It could be a simple as creating and dictionary to use as an index. eg. class FieldStorage: def __init__(): self.index = {} self.list = [] ... blah blah blah ... ... create the field and get it's name ... self.list.append(field) if name in self.index: self.index[name].append(field) else: self.index[name] = [field,] def __getitem__(self, key): if key not in self.index: raise KeyError, key found = self.index[key] if len(found) == 1: return found[0] else: return found The FieldStorage methods get, getitems, has_key, __len__, getfirst and getlist *all* iterate over the complete list each time they are called. For any given field, the order will still be preserved since our dict is using a list to hold the field references for each field's key. I can't see any problems in using this implementation as the users application code will still get the same results. If created a JIRA issue for this, and I'll copy this message there so Nicolas won't get mad at me. ;) http://issues.apache.org/jira/browse/MODPYTHON-93 This discussion should likely move to python-dev at this point anyway. Regards, Jim
|