4242from  vineyard ._C  import  VineyardException 
4343from  vineyard ._C  import  _connect 
4444from  vineyard .core .builder  import  BuilderContext 
45+ from  vineyard .core .builder  import  get_current_builders 
4546from  vineyard .core .builder  import  put 
4647from  vineyard .core .resolver  import  ResolverContext 
4748from  vineyard .core .resolver  import  get 
@@ -839,10 +840,11 @@ def _put_internal(
839840        builder : Optional [BuilderContext ] =  None ,
840841        persist : bool  =  False ,
841842        name : Optional [str ] =  None ,
843+         as_async : bool  =  False ,
842844        ** kwargs ,
843845    ):
844846        try :
845-             return  put (self , value , builder , persist , name , ** kwargs )
847+             return  put (self , value , builder , persist , name , as_async ,  ** kwargs )
846848        except  NotEnoughMemoryException  as  exec :
847849            with  envvars (
848850                {'VINEYARD_RPC_SKIP_RETRY' : '1' , 'VINEYARD_IPC_SKIP_RETRY' : '1' }
@@ -868,7 +870,7 @@ def _put_internal(
868870                    host , port  =  meta [instance_id ]['rpc_endpoint' ].split (':' )
869871                    self ._rpc_client  =  _connect (host , port )
870872                    self .compression  =  previous_compression_state 
871-             return  put (self , value , builder , persist , name , ** kwargs )
873+             return  put (self , value , builder , persist , name , as_async ,  ** kwargs )
872874
873875    @_apply_docstring (put ) 
874876    def  put (
@@ -881,16 +883,28 @@ def put(
881883        ** kwargs ,
882884    ):
883885        if  as_async :
886+ 
884887            def  _default_callback (future ):
885888                try :
886889                    result  =  future .result ()
887-                     print (f"Successfully put object { result }  " , flush = True )
890+                     if  isinstance (result , ObjectID ):
891+                         print (f"Successfully put object { result }  " , flush = True )
892+                     elif  isinstance (result , ObjectMeta ):
893+                         print (f"Successfully put object { result .id }  " , flush = True )
888894                except  Exception  as  e :
889895                    print (f"Failed to put object: { e }  " , flush = True )
890896
897+             current_builder  =  builder  or  get_current_builders ()
898+ 
891899            thread_pool  =  self .put_thread_pool 
892900            result  =  thread_pool .submit (
893-                 self ._put_internal , value , builder , persist , name , ** kwargs 
901+                 self ._put_internal ,
902+                 value ,
903+                 current_builder ,
904+                 persist ,
905+                 name ,
906+                 as_async = True ,
907+                 ** kwargs ,
894908            )
895909            result .add_done_callback (_default_callback )
896910            return  result 
0 commit comments