Jim Gallacher wrote:
For starters, most of the methods such as keys, has_key and so on will raise an exception since you don't create the dictionary until after one of the fields is accessed via __getitem__. Also, has_key will return false for a field that actually exists if that field has not yet been accessed.

Since __getitem__ refers to self.dictionary, it would get created at that point. I don't think that's an issue.

def hander(req):
    form = FieldStorage(req)
    # this will raise an exception
    keys = form.keys()

I still think the correct place to create the index dictionary is in the __init__ phase. Using the dictionary-on-demand idea only improves performance on the second access to a form field. For the first access you are still iterating through the whole list for each field name.

Isn't that what "on-demand" means? If you never use the dictionary, you'll never have to wait for it to be created. This is at worst no worse than what is there now (actually it's better the way he's coded it).

I personally think any performance degradation resulting from creating the dictionary in __init__ will be small compared to the overall improvement we'll get for accessing the fields. I would advocate creating the dictionary in the add_field() method.

Depends on the size of the form, but I can see a performance hit for people (like me) who never use FieldStorage as a dictionary.

Since we are messing with these classes anyway, is there any reason we are not using new-style classes, which is to say subclassing object?

Isn't that the default in 2.3+, which is what mod_python now requires?

Nick

Reply via email to