Hi

I want to connect to internal http services with django and I need to 
buffer the output the http response of those services because some contents 
are very large.

I am using python 3.6, django 2.0, `http.client` and the following code:


    class HTTPStreamIterAndClose():
        def __init__(self, conn, res, buffsize):
            self.conn = conn
            self.res = res
            self.buffsize = buffsize
            self.length = 1
    
            bytes_length = int(res.getheader('Content-Length'))
    
            if buffsize < bytes_length:
                self.length = math.ceil(bytes_length/buffsize)
    
        def __iter__(self):
            return self
    
        def __next__(self):
            buff = self.res.read(self.buffsize)
    
            if buff is b'':
                self.res.close()
                self.conn.close()
    
                raise StopIteration
            else:
                
                return buff
    
        def __len__(self):
            return self.length
    
    
    def passthru_http_service(request, server, timeout, path):
        serv = HTTPService(server, timeout)
        res = serv.request(path)
    
        response = StreamingHttpResponse(
            HTTPStreamIterAndClose(serv.connection, res, 200),
            content_type='application/json'
        )
        response['Content-Length'] = res.getheader('Content-Length')
    
        return response



And the reponse is empty, I test the iterator with:


    b''.join(HTTPStreamIterAndClose(serv.connection, res, 200)


And everything works fine, I don't know why is not working in the Django 
response.


Cheers

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/d139c1ea-3b99-4752-b306-0188d638e1a6%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to