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 django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
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