Hi Massimo -- Yes, that should to it. I have a live cgiFieldStorage object at the breakpoint and when I enter "x is not None" reports True.
-- Joe P.S. still having upload issues, but that's a separate thread! On Monday, July 29, 2013 5:46:29 AM UTC-7, Massimo Di Pierro wrote: > > Good catch. I changed "if value" into "if value is not None". Does that > fix the problem? > > On Sunday, 28 July 2013 22:50:14 UTC-5, Joe Barnhart wrote: >> >> Guess what?? >> >> I've found this bug again -- this time in the DAL module! Here is the >> affected code, it's a part of the Table class: >> >> def _attempt_upload(self, fields): >> for field in self: >> if field.type=='upload' and field.name in fields: >> value = fields[field.name] >> *if value and not isinstance(value,str):* >> if hasattr(value,'file') and >> hasattr(value,'filename'): >> new_name = >> field.store(value.file,filename=value.filename) >> elif hasattr(value,'read') and hasattr(value,'name'): >> new_name = field.store(value,filename=value.name) >> else: >> raise RuntimeError("Unable to handle upload") >> fields[field.name] = new_name >> >> >> If this function is passed an instance of cgi.FieldStorage for an upload >> field, the "if" clause resolves to FALSE because cgi.FieldStorage does not >> support the convention of "has data = true". It returns False whether it >> has data or not. Therefore, you can't use "form.validate()" with your own >> "insert" to manually process forms with upload values. >> >> I've been pounding on WingIDE to figure out why I couldn't get my code to >> work as documented, and I found this. I'm not exactly sure how to code >> around it, but I'll figure something out. >> >> -- Joe B >> >> >> On Thursday, May 30, 2013 2:06:20 AM UTC-7, Joe Barnhart wrote: >>> >>> I've had the most awful time trying to get the actual filename of an >>> uploaded file to appear in my database. I've gone over and over the >>> advice, but it has never worked for me. I was beginning to suspect evil >>> spirits in my code when I ran across the problem... >>> >>> cgi.FieldStorage does NOT behave like other Python variables in that it >>> doesn't resolve to True if the object contains data. It resolves to False >>> ALL THE TIME, whether it has data or not. >>> >>> I was dutifully following advice and had code that looked like: >>> >>> >>> if request.vars.upload: >>> form.vars.filename = request.vars.upload.filename >>> >>> >>> But guess what? The code inside "if" NEVER RUNS. >>> >>> For now I've worked around it by using the method "has_key()" on the >>> cgi.FieldStorage object: >>> >>> >>> if request.vars.has_key('upload'): >>> form.vars.filename = request.vars.upload.filename >>> >>> >>> >>> And this works. >>> >>> The "proper" fix is probably to modify cgi.FieldStorage so that is >>> resolves to True if it has data and False if empty, like all other Python >>> objects. But I thought I'd pass along my epiphany in case others are >>> wondering if their code is inhabited by evil spirits. >> >> -- --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.