@@ -45,49 +45,41 @@ def read_state_endpoint(self, canister_id, data):
4545        result  =  self .client .read_state (canister_id , data )
4646        return  result 
4747
48-     def  query_raw (self , canister_id , method_name , * arg ):
49-         assert  len (arg ) ==  1  or  len (arg ) ==  2 
48+     def  query_raw (self , canister_id , method_name , arg , return_type  =  None , effective_canister_id  =  None ):
5049        req  =  {
5150            'request_type' : "query" ,
5251            'sender' : self .identity .sender ().bytes ,
5352            'canister_id' : Principal .from_str (canister_id ).bytes  if  isinstance (canister_id , str ) else  canister_id .bytes ,
5453            'method_name' : method_name ,
55-             'arg' : arg [ 0 ] ,
54+             'arg' : arg ,
5655            'ingress_expiry' : self .get_expiry_date ()
5756        }
5857        _ , data  =  sign_request (req , self .identity )
59-         result  =  self .query_endpoint (canister_id , data )
58+         result  =  self .query_endpoint (canister_id   if   effective_canister_id   is   None   else   effective_canister_id , data )
6059        if  result ['status' ] ==  'replied' :
61-             if  len (arg ) ==  1 :
62-                 res  =  decode (result ['reply' ]['arg' ])
63-             else :
64-                 res  =  decode (result ['reply' ]['arg' ], arg [1 ])
65-             return  res 
60+             return  decode (result ['reply' ]['arg' ], return_type )
6661        elif  result ['status' ] ==  'rejected' :
6762            return  result ['reject_message' ]
6863
69-     def  update_raw (self , canister_id , method_name , * arg , ** kwargs ):
70-         assert  len (arg ) ==  1  or  len (arg ) ==  2 
64+     def  update_raw (self , canister_id , method_name , arg , return_type  =  None , effective_canister_id  =  None , ** kwargs ):
7165        req  =  {
7266            'request_type' : "call" ,
7367            'sender' : self .identity .sender ().bytes ,
7468            'canister_id' : Principal .from_str (canister_id ).bytes  if  isinstance (canister_id , str ) else  canister_id .bytes ,
7569            'method_name' : method_name ,
76-             'arg' : arg [ 0 ] ,
70+             'arg' : arg ,
7771            'ingress_expiry' : self .get_expiry_date ()
7872        }
7973        req_id , data  =  sign_request (req , self .identity )
80-         _  =  self .call_endpoint (canister_id , req_id , data )
74+         eid  =  canister_id  if  effective_canister_id  is  None  else  effective_canister_id 
75+         _  =  self .call_endpoint (eid , req_id , data )
8176        # print('update.req_id:', req_id.hex()) 
82-         status , result  =  self .poll (canister_id , req_id , ** kwargs )
77+         status , result  =  self .poll (eid , req_id , ** kwargs )
8378        if  status  !=  'replied' :
84-             return    status 
79+             return  status 
8580        else :
86-             if  len (arg ) ==  1 :
87-                 res  =  decode (result )
88-             else :
89-                 res  =  decode (result , arg [1 ])
90-             return  res 
81+             return  decode (result , return_type )
82+             
9183
9284
9385    def  read_state_raw (self , canister_id , paths ):
0 commit comments