diff --git a/qdrant_client/http/api_client.py b/qdrant_client/http/api_client.py index 4c907c3cf..6cfafb2a3 100644 --- a/qdrant_client/http/api_client.py +++ b/qdrant_client/http/api_client.py @@ -109,7 +109,7 @@ def request_sync(self, *, type_: Any, **kwargs: Any) -> Any: # noqa F811 """ This method is not used by the generated apis, but is included for convenience """ - return get_event_loop().run_until_complete(self.request(type_=type_, **kwargs)) + return self.request(type_=type_, **kwargs) def send(self, request: Request, type_: Type[T]) -> T: response = self.middleware(request, self.send_inner) diff --git a/tests/test_qdrant_client.py b/tests/test_qdrant_client.py index db7651203..b882cc0e4 100644 --- a/tests/test_qdrant_client.py +++ b/tests/test_qdrant_client.py @@ -8,6 +8,7 @@ from pprint import pprint from tempfile import mkdtemp from time import sleep +from unittest.mock import patch import numpy as np import pytest @@ -1757,6 +1758,33 @@ def test_timeout_propagation(): ) +def test_api_client_request_sync_returns_value(): + # Regression for #1336: sync client wrapped the return value in + # run_until_complete, so any non-awaitable result raised TypeError. + from qdrant_client.http.api_client import ApiClient + + sync_client = ApiClient("http://localhost:6333") + with patch.object(sync_client, "request", return_value={"ok": True}) as mocked: + result = sync_client.request_sync( + type_=dict, + method="GET", + url="/collections", + ) + + assert result == {"ok": True} + mocked.assert_called_once_with(type_=dict, method="GET", url="/collections") + + with patch.object(sync_client, "request", return_value=None) as mocked_none: + result_none = sync_client.request_sync( + type_=None, + method="GET", + url="/collections", + ) + + assert result_none is None + mocked_none.assert_called_once_with(type_=None, method="GET", url="/collections") + + def test_grpc_options(): client_version = importlib.metadata.version("qdrant-client") user_agent = f"python-client/{client_version}"