diff --git a/packages/http/httpx/kiota_http/httpx_request_adapter.py b/packages/http/httpx/kiota_http/httpx_request_adapter.py index 11276110..9f379fe5 100644 --- a/packages/http/httpx/kiota_http/httpx_request_adapter.py +++ b/packages/http/httpx/kiota_http/httpx_request_adapter.py @@ -86,9 +86,9 @@ def __init__( self._serialization_writer_factory = serialization_writer_factory if not http_client: http_client = KiotaClientFactory.create_with_default_middleware() - self._http_client = http_client + self._http_client: httpx.AsyncClient = http_client if not base_url: - base_url = "" + base_url = str(http_client.base_url) if http_client.base_url is not None else "" self._base_url: str = base_url if not observability_options: observability_options = ObservabilityOptions() @@ -101,7 +101,9 @@ def base_url(self) -> str: Returns: str: The base url """ - return self._base_url + return self._base_url or str( + self._http_client.base_url + ) if self._http_client.base_url is not None else "" @base_url.setter def base_url(self, value: str) -> None: diff --git a/packages/http/httpx/kiota_http/kiota_client_factory.py b/packages/http/httpx/kiota_http/kiota_client_factory.py index 93481ecc..9d70d3ff 100644 --- a/packages/http/httpx/kiota_http/kiota_client_factory.py +++ b/packages/http/httpx/kiota_http/kiota_client_factory.py @@ -55,7 +55,7 @@ def create_with_default_middleware( instantiating default middleware. Defaults to dict[str, RequestOption]=None. Returns: - httpx.AsycClient: An instance of the AsyncClient object + httpx.AsyncClient: An instance of the AsyncClient object """ kiota_async_client = KiotaClientFactory.get_default_client() if client is None else client diff --git a/packages/http/httpx/tests/middleware_tests/test_retry_handler.py b/packages/http/httpx/tests/middleware_tests/test_retry_handler.py index de7dd4f9..e576ac0c 100644 --- a/packages/http/httpx/tests/middleware_tests/test_retry_handler.py +++ b/packages/http/httpx/tests/middleware_tests/test_retry_handler.py @@ -224,7 +224,7 @@ def request_handler(request: httpx.Request): return httpx.Response(200, ) return httpx.Response( TOO_MANY_REQUESTS, - headers={RETRY_AFTER: "200"}, # value exceeds max delay of 180 secs + headers={RETRY_AFTER: "200"}, # value exceeds max delay of 180 secs ) # Retry-after value takes precedence over the RetryHandlerOption value specified here @@ -238,6 +238,7 @@ def request_handler(request: httpx.Request): assert resp.status_code == 429 assert RETRY_ATTEMPT not in resp.request.headers + @pytest.mark.asyncio async def test_max_retries_respected(): """Test that a request is not retried more than max_retries configured""" @@ -245,16 +246,14 @@ async def test_max_retries_respected(): def request_handler(request: httpx.Request): if RETRY_ATTEMPT in request.headers: return httpx.Response(200, ) - return httpx.Response( - TOO_MANY_REQUESTS, - ) + return httpx.Response(TOO_MANY_REQUESTS, ) # Retry-after value takes precedence over the RetryHandlerOption value specified here handler = RetryHandler(RetryHandlerOption(10, 3, True)) request = httpx.Request( 'GET', BASE_URL, - headers={RETRY_ATTEMPT: '5'} # value exceeds max retries configured + headers={RETRY_ATTEMPT: '5'} # value exceeds max retries configured ) mock_transport = httpx.MockTransport(request_handler) resp = await handler.send(request, mock_transport) @@ -262,6 +261,7 @@ def request_handler(request: httpx.Request): assert RETRY_ATTEMPT in resp.request.headers assert resp.request.headers[RETRY_ATTEMPT] == '5' + @pytest.mark.asyncio async def test_retry_options_apply_per_request(): """Test that a request options are applied per request""" diff --git a/packages/http/httpx/tests/test_httpx_request_adapter.py b/packages/http/httpx/tests/test_httpx_request_adapter.py index 0df147ec..20757cec 100644 --- a/packages/http/httpx/tests/test_httpx_request_adapter.py +++ b/packages/http/httpx/tests/test_httpx_request_adapter.py @@ -400,3 +400,9 @@ async def test_retries_on_cae_failure( ), ] request_adapter._authentication_provider.authenticate_request.assert_has_awaits(calls) + + +def test_httpx_request_adapter_uses_http_client_base_url(auth_provider): + http_client = httpx.AsyncClient(base_url=BASE_URL) + request_adapter = HttpxRequestAdapter(auth_provider, http_client=http_client) + assert request_adapter.base_url == BASE_URL