diff --git a/pinecone/openapi_support/api_client.py b/pinecone/openapi_support/api_client.py index afd6b96c..e1163c15 100644 --- a/pinecone/openapi_support/api_client.py +++ b/pinecone/openapi_support/api_client.py @@ -2,6 +2,7 @@ import atexit import io +import json from typing import Any, TYPE_CHECKING @@ -212,9 +213,25 @@ def __call_api( response_info = extract_response_info(headers) if isinstance(return_data, dict): return_data["_response_info"] = response_info + elif isinstance(return_data, str): + if not return_data: + return_data = {"_response_info": response_info} + else: + try: + parsed = json.loads(return_data) + if isinstance(parsed, dict): + parsed["_response_info"] = response_info + return_data = parsed + else: + return_data = {"_response_info": response_info} + except (json.JSONDecodeError, ValueError): + return_data = {"_response_info": response_info} else: # Dynamic attribute assignment on OpenAPI models - setattr(return_data, "_response_info", response_info) + try: + setattr(return_data, "_response_info", response_info) + except (TypeError, AttributeError): + pass if _return_http_data_only: return return_data diff --git a/pinecone/openapi_support/asyncio_api_client.py b/pinecone/openapi_support/asyncio_api_client.py index 58a3a869..92d6c580 100644 --- a/pinecone/openapi_support/asyncio_api_client.py +++ b/pinecone/openapi_support/asyncio_api_client.py @@ -3,6 +3,7 @@ from urllib3.fields import RequestField import orjson +import json from typing import Any @@ -177,9 +178,25 @@ async def __call_api( response_info = extract_response_info(headers) if isinstance(return_data, dict): return_data["_response_info"] = response_info + elif isinstance(return_data, str): + if not return_data: + return_data = {"_response_info": response_info} + else: + try: + parsed = json.loads(return_data) + if isinstance(parsed, dict): + parsed["_response_info"] = response_info + return_data = parsed + else: + return_data = {"_response_info": response_info} + except (json.JSONDecodeError, ValueError): + return_data = {"_response_info": response_info} else: # Dynamic attribute assignment on OpenAPI models - setattr(return_data, "_response_info", response_info) + try: + setattr(return_data, "_response_info", response_info) + except (TypeError, AttributeError): + pass if _return_http_data_only: return return_data