wsgi: env['wsgi.input'] was returning 1 byte strings
Fixes https://bitbucket.org/eventlet/eventlet/issue/150/env-wsgiinput-returns-a-single-byte-at-a
This commit is contained in:
		
				
					committed by
					
						
						Sergey Shepelev
					
				
			
			
				
	
			
			
			
						parent
						
							7f4e6d1840
						
					
				
				
					commit
					4fc1f4550d
				
			@@ -161,7 +161,7 @@ class Input(object):
 | 
			
		||||
        return self._do_read(self.rfile.readlines, hint)
 | 
			
		||||
 | 
			
		||||
    def __iter__(self):
 | 
			
		||||
        return iter(self.read())
 | 
			
		||||
        return iter(self.read, '')
 | 
			
		||||
 | 
			
		||||
    def get_socket(self):
 | 
			
		||||
        return self.rfile._sock
 | 
			
		||||
 
 | 
			
		||||
@@ -956,6 +956,34 @@ class TestHttpd(_TestBase):
 | 
			
		||||
            'HTTP/1.0 400 Headers Too Large\r\n')
 | 
			
		||||
        fd.close()
 | 
			
		||||
 | 
			
		||||
    def test_032_wsgi_input_as_iterable(self):
 | 
			
		||||
        # https://bitbucket.org/eventlet/eventlet/issue/150
 | 
			
		||||
        # env['wsgi.input'] returns a single byte at a time
 | 
			
		||||
        # when used as an iterator
 | 
			
		||||
        g = [0]
 | 
			
		||||
 | 
			
		||||
        def echo_by_iterating(env, start_response):
 | 
			
		||||
            start_response('200 OK', [('Content-type', 'text/plain')])
 | 
			
		||||
            for chunk in env['wsgi.input']:
 | 
			
		||||
                g[0] += 1
 | 
			
		||||
                yield chunk
 | 
			
		||||
 | 
			
		||||
        self.site.application = echo_by_iterating
 | 
			
		||||
        upload_data = '123456789abcdef' * 100
 | 
			
		||||
        request = (
 | 
			
		||||
            'POST / HTTP/1.0\r\n'
 | 
			
		||||
            'Host: localhost\r\n'
 | 
			
		||||
            'Content-Length: %i\r\n\r\n%s'
 | 
			
		||||
        ) % (len(upload_data), upload_data)
 | 
			
		||||
        sock = eventlet.connect(('localhost', self.port))
 | 
			
		||||
        fd = sock.makefile('rw')
 | 
			
		||||
        fd.write(request)
 | 
			
		||||
        fd.flush()
 | 
			
		||||
        response_line, headers, body = read_http(sock)
 | 
			
		||||
        self.assertEquals(body, upload_data)
 | 
			
		||||
        fd.close()
 | 
			
		||||
        self.assertEquals(g[0], 1)
 | 
			
		||||
 | 
			
		||||
    def test_zero_length_chunked_response(self):
 | 
			
		||||
        def zero_chunked_app(env, start_response):
 | 
			
		||||
            start_response('200 OK', [('Content-type', 'text/plain')])
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user