Grisha wrote ..
>
> On Thu, 8 Dec 2005, Gregory (Grisha) Trubetskoy wrote:
>
> > def index(req)
> > req.content_type = 'text/plain'
> > yield '1\n'
> > yield '2\n'
> > yield '3\n'
> > yield '4\n'
> >
> > When published, this module should return a text content with
> > '1\n2\n3\n4\n'.
> >
> > ---
> >
> > I'd expect this to return '1\n'. Because in my mind one HTTP request
> > corresponds to one call to the published function?
>
> Actually, I take that back. It should return something more along the
> lines of '<generator object at 0x81ba5ec>'.
>
> Does this make sense?
Which is what it used to do before the change was introduced.
As the generator object has an __iter__ method it is being iterated over
and the result from each item concatenated.
See code:
def publish_object(req, object):
if callable(object):
# To publish callables, we call them an recursively publish the result
# of the call (as done by util.apply_fs_data)
req.form = util.FieldStorage(req, keep_blank_values=1)
return publish_object(req,util.apply_fs_data(object, req.form, req=req))
elif hasattr(object,'__iter__'):
# To publish iterables, we recursively publish each item
# This way, generators can be published
result = False
for item in object:
result |= publish_object(req,item)
return result
else:
....