From: Ben B. <be...@gr...> - 2005-05-19 19:56:50
|
I'm having some problems with formencode operating on a multi-part form returned by a CGI, vs that returned by mod_python. In mod_python, the dict in a multi-part form that contains a File upload looks like this: {'city': 'Petaluma', 'photograph': Field('photograph', ''), 'firstName': 'Ben', 'title': 'stuff', 'middleName': '', 'lastName': 'Bangert', 'enableCache': 'True', 'philosophy': '', 'state': 'CA', 'token': 'habba', 'specialties': '', 'expertise': '', 'submitButton': 'Submit', 'education': '', 'company': '', 'email': 'be...@gr...', 'biography': ''} (The photograph field is the file upload) This works just fine with the form schema, however when switching over to using Fast CGI (thus the form is parsed with the cgi module), the same request dict looks like this: {'city': FieldStorage('city', None, 'Petaluma'), 'photograph': FieldStorage('photograph', '', ''), 'firstName': FieldStorage('firstName', None, 'Ben'), 'title': FieldStorage('title', None, ''), 'middleName': FieldStorage('middleName', None, ''), 'lastName': FieldStorage('lastName', None, 'Bangert'), 'enableCache': FieldStorage('enableCache', None, 'True'), 'philosophy': FieldStorage('philosophy', None, ''), 'token': FieldStorage('token', None, 'habba'), 'email': FieldStorage('email', None, 'be...@gr...'), 'state': FieldStorage('state', None, 'CA'), 'specialties': FieldStorage('specialties', None, ''), 'expertise': FieldStorage('expertise', None, ''), 'submitButton': FieldStorage('submitButton', None, 'Submit'), 'education': FieldStorage('education', None, ''), 'company': FieldStorage('company', None, ''), 'biography': FieldStorage('biography', None, '')} The error this generates during validation is: Error: Error: not indexable File: /usr/local/lib/python2.3/cgi.py line 594 Context: 591: def keys(self): 592: """Dictionary style keys() method.""" 593: if self.list is None: 594: raise TypeError, "not indexable" 595: keys = [] 596: for item in self.list: 597: if item.name not in keys: keys.append(item.name) Traceback: /usr/local/lib/python2.3/cgi.py:594 /usr/local/lib/python2.3/cgi.py:618 /usr/local/lib/python2.3/site-packages/formencode/api.py:198 /usr/local/lib/python2.3/site-packages/formencode/api.py:223 /usr/local/lib/python2.3/site-packages/formencode/schema.py:118 /usr/local/lib/python2.3/site-packages/formencode/api.py:207 /usr/local/lib/python2.3/site-packages/formencode/api.py:223 /usr/local/lib/python2.3/site-packages/formencode/htmlform.py:67 This is caused during the form.validate(request_args) call. Is anyone else using formencode with multi-part forms and the CGI module? Is there some quick way to fix this, or is a patch to formencode required to test the dict values for FieldStorage instances? I've noticed the dict is flat with the CGI module if its not a multi-part encoded form, its only the multi-part bit which seems to dump the values into FieldStorage instances. Thanks, Ben |