Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a9c3c88c authored by Alexandre Flament's avatar Alexandre Flament
Browse files

[mod] searx.network.stream returns a tuple (response, stream)

parent c23aa576
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -219,8 +219,7 @@ def stream(method, url, **kwargs):
    """Replace httpx.stream.

    Usage:
    stream = poolrequests.stream(...)
    response = next(stream)
    response, stream = poolrequests.stream(...)
    for chunk in stream:
        ...

@@ -236,6 +235,5 @@ def stream(method, url, **kwargs):

    response._generator = generator  # pylint: disable=protected-access
    response.close = MethodType(_close_response_method, response)
    yield response

    yield from generator
    return response, generator
+18 −12
Original line number Diff line number Diff line
@@ -1089,12 +1089,11 @@ def image_proxy():
            'DNT': '1',
        }
        set_context_network_name('image_proxy')
        stream = http_stream(
        resp, stream = http_stream(
            method = 'GET',
            url = url,
            headers = request_headers
        )
        resp = next(stream)
        content_length = resp.headers.get('Content-Length')
        if (content_length
            and content_length.isdigit()
@@ -1124,22 +1123,29 @@ def image_proxy():
            except httpx.HTTPError:
                logger.exception('HTTP error on closing')

    def close_stream():
        nonlocal resp, stream
        try:
            resp.close()
            del resp
            del stream
        except httpx.HTTPError as e:
            logger.debug('Exception while closing response', e)

    try:
        headers = dict_subset(
            resp.headers,
            {'Content-Type', 'Content-Encoding', 'Content-Length', 'Length'}
        )

        def forward_chunk():
            total_length = 0
            for chunk in stream:
                total_length += len(chunk)
                if total_length > maximum_size:
                    break
                yield chunk

        return Response(forward_chunk(), mimetype=resp.headers['Content-Type'], headers=headers)
        response = Response(
            stream,
            mimetype=resp.headers['Content-Type'],
            headers=headers,
            direct_passthrough=True)
        response.call_on_close(close_stream)
        return response
    except httpx.HTTPError:
        close_stream()
        return '', 400