Commit f6f38a9b

Stainless Bot <107565488+stainless-bot@users.noreply.github.com>
2023-12-02 01:55:01
fix(client): correct base_url setter implementation (#919)
Co-Authored-By: tomoish <tomo.i.120608@gmail.com>
1 parent 4d9ece0
Changed files (2)
src/openai/_base_client.py
@@ -592,7 +592,7 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
 
     @base_url.setter
     def base_url(self, url: URL | str) -> None:
-        self._client.base_url = url if isinstance(url, URL) else URL(url)
+        self._base_url = self._enforce_trailing_slash(url if isinstance(url, URL) else URL(url))
 
     @lru_cache(maxsize=None)
     def platform_headers(self) -> Dict[str, str]:
tests/test_client.py
@@ -445,6 +445,14 @@ class TestOpenAI:
         assert isinstance(response, Model)
         assert response.foo == 2
 
+    def test_base_url_setter(self) -> None:
+        client = OpenAI(base_url="https://example.com/from_init", api_key=api_key, _strict_response_validation=True)
+        assert client.base_url == "https://example.com/from_init/"
+
+        client.base_url = "https://example.com/from_setter"  # type: ignore[assignment]
+
+        assert client.base_url == "https://example.com/from_setter/"
+
     def test_base_url_env(self) -> None:
         with update_env(OPENAI_BASE_URL="http://localhost:5000/from/env"):
             client = OpenAI(api_key=api_key, _strict_response_validation=True)
@@ -1102,6 +1110,16 @@ class TestAsyncOpenAI:
         assert isinstance(response, Model)
         assert response.foo == 2
 
+    def test_base_url_setter(self) -> None:
+        client = AsyncOpenAI(
+            base_url="https://example.com/from_init", api_key=api_key, _strict_response_validation=True
+        )
+        assert client.base_url == "https://example.com/from_init/"
+
+        client.base_url = "https://example.com/from_setter"  # type: ignore[assignment]
+
+        assert client.base_url == "https://example.com/from_setter/"
+
     def test_base_url_env(self) -> None:
         with update_env(OPENAI_BASE_URL="http://localhost:5000/from/env"):
             client = AsyncOpenAI(api_key=api_key, _strict_response_validation=True)