def wsgi_publish(environ, start_response): """ copied from publish_module in ZPublisher/Test.py, simplified, and modified to accept streaming responses """ from ZPublisher.Request import Request from ZPublisher.Publish import publish from ZServer.HTTPResponse import ZServerHTTPResponse from zope.publisher.browser import setDefaultSkin from StringIO import StringIO outstream = StringIO() must_die=0 after_list=[None] response = ZServerHTTPResponse(stdout=outstream, stderr=sys.stderr) stdout = response.stdout request = Request(environ['wsgi.input'], environ, response) try: try: setDefaultSkin(request) response = publish(request, 'Zope2', after_list, debug=0) except SystemExit, v: must_die=sys.exc_info() response.exception(must_die) except ImportError, v: if isinstance(v, tuple) and len(v)==3: must_die=v else: must_die=sys.exc_info() response.exception(1, v)
def testStreaming(self): out = StringIO() response = ZServerHTTPResponse(stdout=out) response.write('datachunk1') response.write('datachunk2') events = self.reporter.events self.assertEqual(len(events), 1) self.assert_(isinstance(events[0], PubBeforeStreaming)) self.assertEqual(events[0].response, response) self.assertTrue('datachunk1datachunk2' in out.getvalue())
def get_zope_request(webob_request): outstream = StringIO() response = ZServerHTTPResponse(stdout=outstream, stderr=sys.stderr) environ = webob_request.environ zope_request = Request(environ['wsgi.input'], environ, response) zope_request.processInputs() return zope_request
def test_setBodyIterator(self): channel = DummyChannel() one = ZServerHTTPResponse(stdout=channel) one.setHeader('content-length', 5) one.setBody(test_streamiterator()) one.outputBody() all = channel.all() lines = all.split('\r\n') self.assertEqual(lines[-2], '') # end of headers self.assertEqual(lines[-1], 'hello') # payload
def test_setBodyIterator(self): channel = DummyChannel() one = ZServerHTTPResponse(stdout=channel) one.setHeader("content-length", 5) one.setBody(test_streamiterator()) one.outputBody() all = channel.all() lines = all.split("\r\n") self.assertEqual(lines[-2], "") # end of headers self.assertEqual(lines[-1], "hello") # payload
def test_setBodyIteratorFailsWithoutContentLength(self): one = ZServerHTTPResponse(stdout=DummyChannel()) self.assertRaises(AssertionError, one.setBody, test_streamiterator())
def test_http_response_write_unicode(self): response = ZServerHTTPResponse() self.assertRaises(TypeError, response.write, u'bad')
def _makeOne(self): return ZServerHTTPResponse()