25
25
from pinecone .core .client .model .namespace_summary import NamespaceSummary
26
26
from pinecone import FetchResponse , QueryResponse , ScoredVector , SingleQueryResults , UpsertResponse , \
27
27
DescribeIndexStatsResponse
28
- from grpc ._channel import _InactiveRpcError
28
+ from grpc ._channel import _InactiveRpcError , _MultiThreadedRendezvous
29
29
from pinecone .exceptions import PineconeProtocolError , PineconeException
30
30
31
31
__all__ = ["GRPCIndex" , "GRPCVector" , "GRPCQueryVector" ]
@@ -207,6 +207,38 @@ def parse_stats_response(response: dict):
207
207
return DescribeIndexStatsResponse (namespaces = namespace_summaries , dimension = dimension , _check_type = False )
208
208
209
209
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
+
210
242
class GRPCIndex (GRPCIndexBase ):
211
243
212
244
@property
@@ -226,7 +258,8 @@ def _vector_transform(item):
226
258
request = UpsertRequest (vectors = list (map (_vector_transform , vectors )), ** kwargs )
227
259
timeout = kwargs .pop ('timeout' , None )
228
260
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 )
230
263
else :
231
264
return self ._wrap_grpc_call (self .stub .Upsert , request , timeout = timeout )
232
265
@@ -235,7 +268,8 @@ def delete(self, *args, async_req=False, **kwargs):
235
268
request = DeleteRequest (* args , ** kwargs )
236
269
timeout = kwargs .pop ('timeout' , None )
237
270
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 )
239
273
else :
240
274
return self ._wrap_grpc_call (self .stub .Delete , request , timeout = timeout )
241
275
0 commit comments