On 26 March 2011 17:14, Tres Seaver <tsea...@palladion.com> wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > On 03/26/2011 12:53 PM, Malthe Borch wrote: >> Log message for revision 121131: >> Adding support for ``IStreamIterator`` to WSGI publishing machinery. >> >> Changed: >> U Zope/trunk/doc/CHANGES.rst >> U Zope/trunk/src/ZPublisher/WSGIPublisher.py >> U Zope/trunk/src/ZPublisher/tests/test_WSGIPublisher.py >> >> -=- >> Modified: Zope/trunk/doc/CHANGES.rst >> =================================================================== >> --- Zope/trunk/doc/CHANGES.rst 2011-03-25 17:39:14 UTC (rev 121130) >> +++ Zope/trunk/doc/CHANGES.rst 2011-03-26 16:53:52 UTC (rev 121131) >> @@ -11,6 +11,10 @@ >> Bugs Fixed >> ++++++++++ >> >> +- Fix `WSGIResponse` and `publish_module` functions such that they >> + support the `IStreamIterator` interface in addition to `file` (as >> + supported by `ZServer.HTTPResponse`). >> + >> - Made sure getConfiguration().default_zpublisher_encoding is set correctly. >> >> - LP #713253: Prevent publication of acquired attributes, where the acquired >> >> Modified: Zope/trunk/src/ZPublisher/WSGIPublisher.py >> =================================================================== >> --- Zope/trunk/src/ZPublisher/WSGIPublisher.py 2011-03-25 17:39:14 >> UTC (rev 121130) >> +++ Zope/trunk/src/ZPublisher/WSGIPublisher.py 2011-03-26 16:53:52 >> UTC (rev 121131) >> @@ -30,6 +30,7 @@ >> from ZPublisher.Publish import dont_publish_class >> from ZPublisher.Publish import get_module_info >> from ZPublisher.Publish import missing_name >> +from ZPublisher.Iterators import IStreamIterator >> >> _NOW = None # overwrite for testing >> def _now(): >> @@ -125,7 +126,7 @@ >> self.stdout.write(data) >> >> def setBody(self, body, title='', is_error=0): >> - if isinstance(body, file): >> + if isinstance(body, file) or IStreamIterator.providedBy(body): >> body.seek(0, 2) >> length = body.tell() >> body.seek(0) > > This part of the patch can't possibly work in the general case: nothing > in IStreamIterator promises that 'seek' and 'tell' are available.
In plone.subrequest, I need similar functionality. I ended up checking for seek before calling it and special casing a plone.app.blob iterator. http://dev.plone.org/plone/browser/plone.subrequest/trunk/plone/subrequest/subresponse.py Perhaps we want an extended sub-interface for IFileStreamIterator which defines seek(), tell() and read()? Laurence _______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org https://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - https://mail.zope.org/mailman/listinfo/zope-announce https://mail.zope.org/mailman/listinfo/zope )