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