Skip to content

Commit d773059

Browse files
authored
Merge pull request #17 from pinecone-io/ch10321
Error handling for future
2 parents 39fd2f4 + 21063db commit d773059

File tree

1 file changed

+37
-3
lines changed

1 file changed

+37
-3
lines changed

pinecone/core/grpc/index_grpc.py

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from pinecone.core.client.model.namespace_summary import NamespaceSummary
2626
from pinecone import FetchResponse, QueryResponse, ScoredVector, SingleQueryResults, UpsertResponse, \
2727
DescribeIndexStatsResponse
28-
from grpc._channel import _InactiveRpcError
28+
from grpc._channel import _InactiveRpcError, _MultiThreadedRendezvous
2929
from pinecone.exceptions import PineconeProtocolError, PineconeException
3030

3131
__all__ = ["GRPCIndex", "GRPCVector", "GRPCQueryVector"]
@@ -207,6 +207,38 @@ def parse_stats_response(response: dict):
207207
return DescribeIndexStatsResponse(namespaces=namespace_summaries, dimension=dimension, _check_type=False)
208208

209209

210+
class PineconeGrpcFuture:
211+
def __init__(self, delegate):
212+
self._delegate = delegate
213+
214+
def cancel(self):
215+
return self._delegate.cancel()
216+
217+
def cancelled(self):
218+
return self._delegate.cancelled()
219+
220+
def running(self):
221+
return self._delegate.running()
222+
223+
def done(self):
224+
return self._delegate.done()
225+
226+
def add_done_callback(self, fun):
227+
return self._delegate.add_done_callback(fun)
228+
229+
def result(self, timeout=None):
230+
try:
231+
self._delegate.result(timeout=timeout)
232+
except _MultiThreadedRendezvous as e:
233+
raise PineconeException(e._state.debug_error_string) from e
234+
235+
def exception(self,timeout=None):
236+
with _MultiThreadedRendezvous as e:
237+
raise PineconeException(e._state.debug_error_string) from e
238+
239+
def traceback(self,timeout=None):
240+
return self._delegate.traceback(timeout=timeout)
241+
210242
class GRPCIndex(GRPCIndexBase):
211243

212244
@property
@@ -226,7 +258,8 @@ def _vector_transform(item):
226258
request = UpsertRequest(vectors=list(map(_vector_transform, vectors)), **kwargs)
227259
timeout = kwargs.pop('timeout', None)
228260
if async_req:
229-
return self._wrap_grpc_call(self.stub.Upsert.future, request, timeout=timeout)
261+
future = self._wrap_grpc_call(self.stub.Upsert.future, request, timeout=timeout)
262+
return PineconeGrpcFuture(future)
230263
else:
231264
return self._wrap_grpc_call(self.stub.Upsert, request, timeout=timeout)
232265

@@ -235,7 +268,8 @@ def delete(self, *args, async_req=False, **kwargs):
235268
request = DeleteRequest(*args, **kwargs)
236269
timeout = kwargs.pop('timeout', None)
237270
if async_req:
238-
return self._wrap_grpc_call(self.stub.Delete.future, request, timeout=timeout)
271+
future = self._wrap_grpc_call(self.stub.Delete.future, request, timeout=timeout)
272+
return PineconeGrpcFuture(future)
239273
else:
240274
return self._wrap_grpc_call(self.stub.Delete, request, timeout=timeout)
241275

0 commit comments

Comments
 (0)