When I'm trying to use a FileField I got this error:

  File "d:\projects\3rd-party\turbogears\turbogears\controllers.py", line 110, 
in validate
    kw.update(form.validate(value))
  File "d:\projects\3rd-party\turbogears\turbogears\widgets\forms.py", line 
865, in validate
    return self.validator.to_python(value, state)
  File 
"c:\python24\lib\site-packages\formencode-0.4-py2.4.egg\formencode\api.py", 
line 308, in to_python
    value = tp(value, state)
  File 
"c:\python24\lib\site-packages\formencode-0.4-py2.4.egg\formencode\schema.py", 
line 132, in _to_python
    new[name] = validator.to_python(value, state)
  File 
"c:\python24\lib\site-packages\formencode-0.4-py2.4.egg\formencode\api.py", 
line 297, in to_python
    if not value and value != 0:
  File "C:\Python24\lib\cgi.py", line 625, in __len__
    return len(self.keys())
  File "C:\Python24\lib\cgi.py", line 601, in keys
    raise TypeError, "not indexable"
TypeError: not indexable

Looks like a formencode/cgi bug to me but nevertheless, it renders stock 
FileField unusable.

Using formencode's FieldStorageUploadConverter validator doesn't help either as 
the bug happens before it is run.

To workaround the bug I come up with this validator class instead:

class FileUploadConverter(validators.FancyValidator):
    def to_python(self, value, state=None):
        if isinstance(value, cgi.FieldStorage):
            if value.filename:
                return value
            raise validators.Invalid('invalid', value, state)
        else:
            return value

I'm not 100% whether this should be reported to formencode' bug tracker or it 
has something with TG/CherryPy so decided to post here first.


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"TurboGears Trunk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/turbogears-trunk
-~----------~----~----~----~------~----~------~--~---

Reply via email to