My assumption that web2py is returning something other than a list comes from the traceback. Why would calling:

len(returned_obj)

go into the cgi module if it was a string? Rocket alone does not use the cgi module at all so the returned object must be related to it somehow. We know that lists that contain strings do not relate to the cgi module.

All that aside, there's something more going on here. I've plugged hwangs code into a test application here and could not reproduce the problematic behavior. The only changes I made to the code posted was changing request.flash = 'ok' to response.flash = 'ok' and adding a db = DAL('sqlite://storage.db') to the model file.

Could there be a i18n/l10n issue here?

-tim

On 4/26/2010 9:16 AM, mdipierro wrote:
I think we need some debugging. His code is

def hello():
     form = SQLFORM(db.easy_test)
     if form.accepts(request.vars, session):
         request.flash = 'ok'
     return dict(form=form)

and web2py returns a list with a string in this case (the generic view
that renders the dict()). I do not see how web2py can return anything
else.

On Apr 26, 8:04 am, Timothy Farrell<tfarr...@swgen.com>  wrote:
Massimo, I know you sent me an email on this but I can't find it so I'll
just reply to the list.

Rocket is dying in this case because the object it has received from
web2py is not a valid WSGI response. A valid WSGI response must be
either a list or generator (Rocket is a little more tolerant and will
accept a string as well). But in this case it seems to be getting some
form of a cgi.FieldStorage type as evidenced by the traceback going into
the cgi module when Rocket tries to read the length of the returned object.

Massimo, I've seen the web2py code that it normally scrubs returned
objects. This was a while ago and may have changed since then.

Rocket could die a little more gracefully, but I'd rather keep the code
lean rather than checking every response for validity. As a test, there
is a WSGI validator in the wsgiref module that works as middleware. You
might hook that up to see what is really coming back.

-tim

On 4/26/2010 1:53 AM, hywang wrote:

i has no view .
when i test newest version in google hg server, web2py works well,
but if I add IS_IMAGE() validator, some error occured again.
ver1.6x works well
On 4 26 , 2ʱ01 , mdipierro<mdipie...@cs.depaul.edu>  wrote:
Do you have a view with a custom form?
On Apr 25, 10:53 pm, hywang<why00...@163.com>  wrote:
I run web2py from source on centos 5.3.
When upload a file, an error occurs.
-----db.py-----------
db.define_table('easy_test',
     Field('picture', 'upload')
)
---------controller file---------------
def hello():
     form = SQLFORM(db.easy_test)
     if form.accepts(request.vars, session):
         request.flash = 'ok'
     return dict(form=form)
when submit the form, it returns 'server error'
consel error msg :
ERROR:Rocket.Errors.Thread-3:Traceback (most recent call last):
   File "E:\web2py\gluon\rocket.py", line 747, in run
     self.run_app(conn)
   File "E:\web2py\gluon\rocket.py", line 1162, in run_app
     sections = len(output)
   File "C:\Python25\lib\cgi.py", line 633, in __len__
     return len(self.keys())
   File "C:\Python25\lib\cgi.py", line 609, in keys
     raise TypeError, "not indexable"
TypeError: not indexable
--
Subscription settings:http://groups.google.com/group/web2py/subscribe?hl=en

Reply via email to