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:   
        ....

Reply via email to