Senthil Kumaran added the comment:

FieldStorage("foo", "bar") is invalid because the first argument is supposed to
be file-like object and second one headers. Here we are sending invalid 
headers. By
default, if the headers is none, the content-type is urlencoded.

The right way of using FieldStorage is either using the keyword arguments in a 
tightly couple manner. Or use it as default instance (fs = cgi.FieldStorage())

So the expectation could be:

>>>fs = cgi.FieldStorage()
>>>bool(fs)
False


>>> # sending correct fs, env
>>> # http://hg.python.org/cpython/file/32de3923bb94/Lib/test/test_cgi.py#l259
>>> fs = cgi.FieldStorage(fs, environ=env)
>>> bool(fs)
True 

The TypeError failure in python3 for bool(fs) is, in the absence of __bool__, 
it is trying to do
a len() and which ultimately ends up calling keys():
http://hg.python.org/cpython/file/32de3923bb94/Lib/cgi.py#l579

The proper fix in Python3 IMO is the just define __bool__ instead of 
__nonzero__ and that will be return False instead of TypeError.

----------
nosy: +orsenthil

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue19097>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to