コード例 #1
0
def request(method, url, **kwargs):
    """same as requests/requests/api.py request(...)"""
    global THREADLOCAL
    time_before_request = default_timer()

    # timeout (httpx)
    if 'timeout' in kwargs:
        timeout = kwargs['timeout']
    else:
        timeout = getattr(THREADLOCAL, 'timeout', None)
        if timeout is not None:
            kwargs['timeout'] = timeout

    # 2 minutes timeout for the requests without timeout
    timeout = timeout or 120

    # ajdust actual timeout
    timeout += 0.2  # overhead
    start_time = getattr(THREADLOCAL, 'start_time', time_before_request)
    if start_time:
        timeout -= default_timer() - start_time

    # raise_for_error
    check_for_httperror = True
    if 'raise_for_httperror' in kwargs:
        check_for_httperror = kwargs['raise_for_httperror']
        del kwargs['raise_for_httperror']

    # requests compatibility
    if isinstance(url, bytes):
        url = url.decode()

    # network
    network = get_context_network()

    # do request
    future = asyncio.run_coroutine_threadsafe(
        network.request(method, url, **kwargs), get_loop())
    try:
        response = future.result(timeout)
    except concurrent.futures.TimeoutError as e:
        raise httpx.TimeoutException('Timeout', request=None) from e

    # requests compatibility
    # see also https://www.python-httpx.org/compatibility/#checking-for-4xx5xx-responses
    response.ok = not response.is_error

    # update total_time.
    # See get_time_for_thread() and reset_time_for_thread()
    if hasattr(THREADLOCAL, 'total_time'):
        time_after_request = default_timer()
        THREADLOCAL.total_time += time_after_request - time_before_request

    # raise an exception
    if check_for_httperror:
        raise_for_httperror(response)

    return response
コード例 #2
0
ファイル: http_test.py プロジェクト: plotski/upsies
async def test_request_catches_TimeoutException(method, mock_cache, mocker):
    exc = httpx.TimeoutException(
        message='Some error',
        request='mock request',
    )
    mocker.patch.object(http._client, 'send', AsyncMock(side_effect=exc))
    url = 'http://localhost:12345/foo/bar/baz'
    with pytest.raises(errors.RequestError,
                       match=rf'^{url}: Timeout$') as excinfo:
        await http._request(method=method, url=url)
    assert excinfo.value.status_code is None
    assert excinfo.value.headers == {}
コード例 #3
0
 def app2(request: httpx.Request) -> httpx.Response:
     if request.url.path == "/v1/public/entities/profile/pharmacie-oceane-paris":
         return httpx.Response(
             200, json=json.loads(Path("tests/fixtures/ordoclic/fetchslot-profile.json").read_text())
         )
     if request.url.path == "/v1/solar/entities/03674d71-b200-4682-8e0a-3ab9687b2b59/reasons":
         return httpx.Response(
             200, json=json.loads(Path("tests/fixtures/ordoclic/fetchslot-reasons.json").read_text())
         )
     if request.url.path == "/v1/solar/slots/availableSlots":
         raise httpx.TimeoutException(message="Timeout", request=request)
     return httpx.Response(403, json={})
コード例 #4
0
    def _handle_request(
        self,
        method: bytes,
        url: URL,
        headers: Headers = None,
        stream: Union[httpcore.SyncByteStream, httpcore.AsyncByteStream] = None,
        extensions: dict = None,
    ) -> Response:
        request = to_request(method, url, headers, stream)
        self._requests.append(request)

        response = self._get_response(request)
        if response:
            return response

        callback = self._get_callback(request)
        if callback:
            return callback(request=request, extensions=extensions)

        raise httpx.TimeoutException(
            self._explain_that_no_response_was_found(request), request=request
        )
コード例 #5
0
 def raise_exception(request, *args, **kwargs):
     raise httpx.TimeoutException("description", request=request)
コード例 #6
0
 def app2(request: httpx.Request) -> httpx.Response:
     raise httpx.TimeoutException(message="Timeout", request=request)
コード例 #7
0
 def sleep_and_raise(*args, **kwargs):
     time.sleep(0.51)
     raise httpx.TimeoutException('timeout')