[Zope-Checkins] SVN: Zope/branches/2.13/ Backport changeset committed to trunk in r121131.
Malthe Borch
mborch at gmail.com
Sat Mar 26 12:59:23 EDT 2011
Log message for revision 121132:
Backport changeset committed to trunk in r121131.
Changed:
U Zope/branches/2.13/doc/CHANGES.rst
U Zope/branches/2.13/src/ZPublisher/WSGIPublisher.py
U Zope/branches/2.13/src/ZPublisher/tests/test_WSGIPublisher.py
-=-
Modified: Zope/branches/2.13/doc/CHANGES.rst
===================================================================
--- Zope/branches/2.13/doc/CHANGES.rst 2011-03-26 16:53:52 UTC (rev 121131)
+++ Zope/branches/2.13/doc/CHANGES.rst 2011-03-26 16:59:23 UTC (rev 121132)
@@ -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`).
+
- Corrected copyright information shown in the ZMI.
- OFS: Fixed editing offset-naive 'date' properties in the ZMI.
Modified: Zope/branches/2.13/src/ZPublisher/WSGIPublisher.py
===================================================================
--- Zope/branches/2.13/src/ZPublisher/WSGIPublisher.py 2011-03-26 16:53:52 UTC (rev 121131)
+++ Zope/branches/2.13/src/ZPublisher/WSGIPublisher.py 2011-03-26 16:59:23 UTC (rev 121132)
@@ -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)
@@ -226,8 +227,10 @@
status, headers = response.finalize()
start_response(status, headers)
- if isinstance(response.body, file):
- result = response.body
+ body = response.body
+
+ if isinstance(body, file) or IStreamIterator.providedBy(body):
+ result = body
else:
# If somebody used response.write, that data will be in the
# stdout StringIO, so we put that before the body.
Modified: Zope/branches/2.13/src/ZPublisher/tests/test_WSGIPublisher.py
===================================================================
--- Zope/branches/2.13/src/ZPublisher/tests/test_WSGIPublisher.py 2011-03-26 16:53:52 UTC (rev 121131)
+++ Zope/branches/2.13/src/ZPublisher/tests/test_WSGIPublisher.py 2011-03-26 16:59:23 UTC (rev 121132)
@@ -370,6 +370,32 @@
app_iter = self._callFUT(environ, start_response, _publish)
self.assertTrue(app_iter is body)
+ def test_response_is_stream(self):
+ from ZPublisher.Iterators import IStreamIterator
+ from zope.interface import implements
+
+ class test_streamiterator:
+ implements(IStreamIterator)
+ data = "hello"
+ done = 0
+
+ def next(self):
+ if not self.done:
+ self.done = 1
+ return self.data
+ raise StopIteration
+
+ _response = DummyResponse()
+ _response._status = '200 OK'
+ _response._headers = [('Content-Length', '4')]
+ body = _response.body = test_streamiterator()
+ environ = self._makeEnviron()
+ start_response = DummyCallable()
+ _publish = DummyCallable()
+ _publish._result = _response
+ app_iter = self._callFUT(environ, start_response, _publish)
+ self.assertTrue(app_iter is body)
+
def test_request_closed_when_tm_middleware_not_active(self):
environ = self._makeEnviron()
start_response = DummyCallable()
More information about the Zope-Checkins
mailing list