diff --git a/aidial_client/_http_client/_base.py b/aidial_client/_http_client/_base.py index d2f834e..19adf22 100644 --- a/aidial_client/_http_client/_base.py +++ b/aidial_client/_http_client/_base.py @@ -51,7 +51,7 @@ def _prepare_url(self, url: str) -> httpx.URL: merge_raw_path = ( self.base_url.raw_path + parsed_url.raw_path.lstrip(b"/") ) - return self.base_url.copy_with(raw_path=merge_raw_path.rstrip(b"/")) + return self.base_url.copy_with(raw_path=merge_raw_path) return parsed_url def _build_request( diff --git a/tests/test_prepare_url.py b/tests/test_prepare_url.py new file mode 100644 index 0000000..4c47e67 --- /dev/null +++ b/tests/test_prepare_url.py @@ -0,0 +1,32 @@ +import pytest + +from aidial_client import AsyncDial, Dial + +BASE_URL = "http://localhost:8090" + + +@pytest.fixture(params=[Dial, AsyncDial]) +def client(request): + return request.param(base_url=BASE_URL, api_key="dummy") + + +@pytest.mark.parametrize( + "relative,expected_url", + [ + ( + "v1/metadata/files/bucket/appdata/app/", + f"{BASE_URL}/v1/metadata/files/bucket/appdata/app/", + ), + ( + "v1/metadata/files/bucket/appdata/app", + f"{BASE_URL}/v1/metadata/files/bucket/appdata/app", + ), + ("/v1/foo/", f"{BASE_URL}/v1/foo/"), + ("v1/x/?foo=1", f"{BASE_URL}/v1/x/?foo=1"), + ("/", f"{BASE_URL}/"), + ("", f"{BASE_URL}/"), + ], +) +def test_prepare_url_preserves_trailing_slash(client, relative, expected_url): + prepared = client._http_client._prepare_url(relative) + assert str(prepared) == expected_url