a
    !f                     @   s   d dl Z dddZG dd de jZG dd de jZG dd	 d	e jZG d
d deZG dd deZG dd deZ	G dd deZ
dS )    Nc           
      C   sf   ddl m} ddlm} | }| |jj_|jj	 }||_
||_|d urb|d urb|||}	||	_|S )Nr   
entity_pb2)_new_value_pb)gcloud.datastore._generatedr   gcloud.datastore.helpersr   Entitykeypartition_id
project_idpathaddkindidstring_value)
projectr   Z
integer_idnameZstr_valr   r   	entity_pbpath_elementvalue_pb r   ]/var/www/html/python-backend/venv/lib/python3.9/site-packages/gcloud/datastore/test_client.py_make_entity_pb   s    

r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Test__get_gcd_projectc                 C   s   ddl m} | S )Nr   )_get_gcd_project)gcloud.datastore.clientr   )selfr   r   r   r   _callFUT$   s    zTest__get_gcd_project._callFUTc                 C   s^   dd l }ddlm} i }|||jd$ |  }| |d  W d    n1 sP0    Y  d S )Nr   _Monkeygetenv)osgcloud._testingr   getr   assertEqual)r   r!   r   environr   r   r   r   test_no_value(   s    z#Test__get_gcd_project.test_no_valuec                 C   st   dd l }ddlm} ddlm} t }||i}|||jd$ |  }| || W d    n1 sf0    Y  d S )Nr   r   )GCD_DATASETr   )	r!   r"   r   r   r'   objectr#   r   r$   )r   r!   r   r'   ZMOCK_PROJECTr%   r   r   r   r   test_value_set1   s    z$Test__get_gcd_project.test_value_setN)__name__
__module____qualname__r   r&   r)   r   r   r   r   r   "   s   	r   c                   @   s@   e Zd ZdddZdddZdd Zdd	 Zd
d Zdd ZdS )Test__determine_default_projectNc                 C   s   ddl m} ||dS )Nr   _determine_default_projectr   )r   r/   )r   r   r/   r   r   r   r   ?   s    z(Test__determine_default_project._callFUTc           
         s   ddl m} ddlm} g   fdd}d	 fdd	}||d}||fi | | |}	W d    n1 st0    Y  |	 fS )
Nr   r   clientc                      s     d S )Ngcd_mockappendr   )_callersgcdr   r   r3   K   s    
zKTest__determine_default_project._determine_default_helper.<locals>.gcd_mockc                    s     d| f S )Nfallback_mockr4   r0   )r6   fallbackr   r   r8   O   s    zPTest__determine_default_project._determine_default_helper.<locals>.fallback_mock)r   _base_default_project)N)r"   r   gcloud.datastorer2   r   )
r   r7   r9   project_calledr   r2   r3   r8   Zpatched_methodsZreturned_projectr   )r6   r9   r7   r   _determine_default_helperD   s    (z9Test__determine_default_project._determine_default_helperc                 C   s,   |   \}}| |d  | |ddg d S )Nr3   r8   N)r=   r$   )r   r   callersr   r   r   r&   ]   s    z-Test__determine_default_project.test_no_valuec                 C   s2   t  }| j|d\}}| || | |g  d S )N)r<   r(   r=   r$   r   PROJECTr   r?   r   r   r   test_explicitb   s    
z-Test__determine_default_project.test_explicitc                 C   s4   t  }| j|d\}}| || | |dg d S )N)r7   r3   r@   rA   r   r   r   test_gcdi   s    z(Test__determine_default_project.test_gcdc                 C   s6   t  }| j|d\}}| || | |ddg d S )N)r9   r3   r>   r@   rA   r   r   r   test_fallbacko   s    z-Test__determine_default_project.test_fallback)N)NNN)	r*   r+   r,   r   r=   r&   rC   rD   rE   r   r   r   r   r-   =   s   
  
r-   c                   @   s  e Zd ZdZdd Zdd Zdd Zedddfd	d
Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1dS )_
TestClientrB   c                 C   s   |   }|j| _t|_d S N)_getTargetClass_connection_classoriginal_cnxn_class_MockConnectionr   ZKLASSr   r   r   setUpz   s    zTestClient.setUpc                 C   s   |   }| j|_d S rG   )rH   rJ   rI   rL   r   r   r   tearDown   s    zTestClient.tearDownc                 C   s   ddl m} |S )Nr   )Client)r   rO   )r   rO   r   r   r   rH      s    zTestClient._getTargetClassNc                 C   s   |   ||||dS )Nr   	namespacecredentialshttp)rH   )r   r   rQ   rR   rS   r   r   r   _makeOne   s
    zTestClient._makeOnec                 C   s\   ddl m} ddlm} ||dd d  | t| jd  W d    n1 sN0    Y  d S )Nr   r   r1   c                 S   s   d S rG   r   r0   r   r   r   <lambda>       z;TestClient.test_ctor_w_project_no_environ.<locals>.<lambda>)r:   )r"   r   r;   r2   assertRaisesEnvironmentErrorrT   )r   r   _MUTr   r   r   test_ctor_w_project_no_environ   s    z)TestClient.test_ctor_w_project_no_environc              	      s2  ddl m} ddlm} ddlm} d t g  fdd}|  }|||dJ ||fdd	d
 | }W d    n1 s0    Y  W d    n1 s0    Y  | |j  | |j	d  | 
t|jt | 
|jju  | 
|jjd u  | 
|jd u  | 
|jd u  | d g d S )Nr   r   r1   otherc                    s    |  | p S rG   r4   r0   )OTHERdefault_calledr   r   r8      s    
z=TestClient.test_ctor_w_implicit_inputs.<locals>.fallback_mockr.   c                      s    S rG   r   r   )credsr   r   rU      rV   z8TestClient.test_ctor_w_implicit_inputs.<locals>.<lambda>)Zget_credentials)r"   r   r;   r2   Zgcloudr(   rH   r$   r   rQ   
assertTrue
isinstance
connectionrK   rR   rS   current_batchcurrent_transaction)r   r   rY   Z_base_clientr8   klassr2   r   )r\   r^   r]   r   test_ctor_w_implicit_inputs   s.    
Bz&TestClient.test_ctor_w_implicit_inputsc                 C   s   d}d}t  }t  }| j||||d}| |j| | |j| | t|jt | |jj	|u  | |jj
|u  | |jd u  | t|jg  d S )Nr[   rQ   rP   )r(   rT   r$   r   rQ   r_   r`   ra   rK   rR   rS   rb   list_batch_stack)r   r\   	NAMESPACEr^   rS   r2   r   r   r   test_ctor_w_explicit_inputs   s     z&TestClient.test_ctor_w_explicit_inputsc                 C   s   t  }| j|d}| }| }|| | t|j|g | |j	|u  | |j
d u  || | |j	|u  | |j
|u  | t|j||g | | |u  | t|j|g | | |u  | t|jg  d S NrR   )r(   rT   batchtransaction_push_batchr$   rf   rg   r_   rb   rc   
_pop_batch)r   r^   r2   rl   xactr   r   r   test__push_batch_and__pop_batch   s     

z*TestClient.test__push_batch_and__pop_batchc                    s   g   fdd}t  }| j|d}||_t  }| ||d u  |  d d d |  d d d |g |  d d d d u  |  d d d	 d u  |  d d d
 d u  d S )Nc                     s     | |f g S rG   r4   argskw_called_withr   r   
_get_multi   s    z,TestClient.test_get_miss.<locals>._get_multirk   r   r      keysmissingdeferredrm   r(   rT   	get_multir_   r#   r$   )r   rw   r^   r2   r   r   ru   r   test_get_miss   s    zTestClient.test_get_missc                    s   d}g  t   fdd}t  }| j|d}||_t  g g   }}}| |||||u  |  d d d |  d d d |g |  d d d	 |u  |  d d d
 |u  |  d d d | d S )N123c                     s     | |f gS rG   r4   rr   rv   Z_entityr   r   rw      s    z+TestClient.test_get_hit.<locals>._get_multirk   r   r   rx   ry   rz   r{   rm   r|   )r   TXN_IDrw   r^   r2   r   rz   r{   r   r   r   test_get_hit   s    zTestClient.test_get_hitc                 C   s,   t  }| j|d}|g }| |g  d S rj   )r(   rT   r}   r$   )r   r^   r2   resultsr   r   r   test_get_multi_no_keys  s    
z!TestClient.test_get_multi_no_keysc                 C   sT   ddl m} t }| j|d}|j  |dd| jd}||g}| |g  d S )Nr   Keyrk   Kind  r0   )	gcloud.datastore.keyr   r(   rT   ra   _add_lookup_resultrB   r}   r$   )r   r   r^   r2   r   r   r   r   r   test_get_multi_miss	  s    
zTestClient.test_get_multi_missc                 C   s   ddl m} ddlm} d}d}| }| j|jj_|jj	
 }||_||_t }| j|d}|jj|gd |||| jd}	g }
|j|	g|
d}| |g  | d	d
 |
D |	 g d S )Nr   r   r   r   r   rk   rz   r0   c                 S   s   g | ]}|j  qS r   )r   to_protobuf).0missedr   r   r   
<listcomp>*  rV   z<TestClient.test_get_multi_miss_w_missing.<locals>.<listcomp>)r   r   r   r   r   rB   r   r	   r
   r   r   r   r   r(   rT   ra   r   r}   r$   r   )r   r   r   KINDIDr   r   r^   r2   r   rz   entitiesr   r   r   test_get_multi_miss_w_missing  s&    z(TestClient.test_get_multi_miss_w_missingc                 C   sP   ddl m} t }| j|d}|dd| jd}g d}| jt|j|g|d d S )	Nr   r   rk   r   r   r0   thisrf   isnotemptyr   r   r   r(   rT   rB   rW   
ValueErrorr}   )r   r   r^   r2   r   rz   r   r   r   "test_get_multi_w_missing_non_empty-  s    
z-TestClient.test_get_multi_w_missing_non_emptyc                 C   sP   ddl m} t }| j|d}|dd| jd}g d}| jt|j|g|d d S )	Nr   r   rk   r   r   r0   r   r{   r   )r   r   r^   r2   r   r{   r   r   r   #test_get_multi_w_deferred_non_empty8  s    
z.TestClient.test_get_multi_w_deferred_non_emptyc                 C   s   ddl m} |dd| jd}t }| j|d}|jj| gd g }|j|g|d}| 	|g  | 	dd	 |D | g d S )
Nr   r   r   r   r0   rk   r   c                 S   s   g | ]}|  qS r   )r   )r   Zdef_keyr   r   r   r   P  rV   z=TestClient.test_get_multi_miss_w_deferred.<locals>.<listcomp>)
r   r   rB   r(   rT   ra   r   r   r}   r$   )r   r   r   r^   r2   r{   r   r   r   r   test_get_multi_miss_w_deferredC  s    z)TestClient.test_get_multi_miss_w_deferredc                 C   s<  ddl m} ddlm} ddlm} |d| jd}| }|dd| jd}| }| }|j	| | }	|	j	| t
 }
| j|
d}|jj|g|gd	 |j|	g g }|j||g|d
}| t|d | t|d | t|d | | |d jj|j | |d jj|j | t|d | | |d jj|j | |d jj|j |jj}| t|d |d \}}}}| || j | t|d | ||d  | ||d  | | | |d u  |d \}}}}| || j | t|d | ||d  | | | |d u  d S )Nr   r   r   r   r   r0   )	  rk   r   r      rx   )r   r   gcloud.datastore.entityr   r   r   rB   r   r   ZCopyFromr(   rT   ra   r   r}   r$   lenr_   r`   r   r   
_lookup_cwassertFalse)r   r   r   r   key1Zkey1_pbkey2Zkey2_pbZ
entity1_pbZ
entity2_pbr^   r2   rz   foundcwZds_idZk_pbseventualtidr   r   r   5test_get_multi_w_deferred_from_backend_but_not_passedS  sP    

z@TestClient.test_get_multi_w_deferred_from_backend_but_not_passedc                 C   s   ddl m} d}d}||dg}t| j||dd}t }| j|d}|j|g |||| jd	}||g\}	|	j	}
| 
|
|u  | |
j| j | |
j| | t|	dg | |	d d d S )
Nr   r   r   r   r   r   fooFoork   r0   )r   r   r   rB   r(   rT   ra   r   r}   r   r   r$   r   r   rf   )r   r   r   r   PATHr   r^   r2   r   resultnew_keyr   r   r   test_get_multi_hit  s     zTestClient.test_get_multi_hitc                 C   s  ddl m} d}d}d}||dg}t| j||dd}t }| j|d	}|j|g |||| jd
}	| }
||
_	|j
|	g|
d\}|j}| ||	u  | |j| j | |j| | t|dg | |d d |jj}| t|d |d \}}}}| || d S )Nr   r   r   r   r   r   r   r   rk   r0   )rm   rx   )r   r   r   rB   r(   rT   ra   r   rm   _idr}   r   r   r$   r   r   rf   r   r   )r   r   r   r   r   r   r   r^   r2   r   Ztxnr   r   r   _transaction_idr   r   r    test_get_multi_hit_w_transaction  s.    z+TestClient.test_get_multi_hit_w_transactionc                 C   s   ddl m} d}d}d}t| j||}t| j||}t }| j|d}|j||g |||| jd}	|||| jd}
||	|
g\}}| 	|j
j|	j | 	t|i  | 	|j
j|
j | 	t|i  d S )Nr   r   r   r   r   rk   r0   )r   r   r   rB   r(   rT   ra   r   r}   r$   r   r   dict)r   r   r   ZID1ZID2Z
entity_pb1r   r^   r2   r   r   Z
retrieved1Z
retrieved2r   r   r   -test_get_multi_hit_multiple_keys_same_project  s     z8TestClient.test_get_multi_hit_multiple_keys_same_projectc                 C   s   ddl m} d}d}| || |dd|d}|dd|d}t }| j|d}| t |||g W d    n1 s|0    Y  d S )	Nr   r   rB   zPROJECT-ALTr   r   r0   rk   )r   r   ZassertNotEqualr(   rT   rW   r   r}   )r   r   ZPROJECT1ZPROJECT2r   r   r^   r2   r   r   r   2test_get_multi_hit_multiple_keys_different_project  s    z=TestClient.test_get_multi_hit_multiple_keys_different_projectc                 C   s   ddl m} ddlm} ddlm} d}d}t| j||dd}t }| j	|d	}|j
|g |||| jd
}	g }
g }||dd" |j|	g||
d}W d    n1 s0    Y  | |g  | |g  | |
g  d S )Nr   r   r1   r   r   r   r   r   rk   r0   )Z
_MAX_LOOPS)rz   r{   )r"   r   r;   r2   r   r   r   rB   r(   rT   ra   r   r}   r$   )r   r   rY   r   r   r   r   r^   r2   r   r{   rz   r   r   r   r   test_get_multi_max_loops  s&    
$z#TestClient.test_get_multi_max_loopsc                    sj   g   fdd}t  }| j|d}||_t  }|| |  d d d |  d d d |g d S )Nc                     s     | |f d S rG   r4   rr   ru   r   r   
_put_multi  s    z'TestClient.test_put.<locals>._put_multirk   r   r   rx   r   )r(   rT   	put_multiputr$   )r   r   r^   r2   entityr   ru   r   test_put  s    
zTestClient.test_putc                 C   s(   t  }| j|d}| |g d  d S rj   )r(   rT   r$   r   )r   r^   r2   r   r   r   test_put_multi_no_entities  s    z%TestClient.test_put_multi_no_entitiesc                 C   s4   ddl m} t }| j|d}| t|j|  d S )Nr   r   rk   )r   r   r(   rT   rW   r   r   )r   r   r^   r2   r   r   r   $test_put_multi_w_single_empty_entity"  s    z/TestClient.test_put_multi_w_single_empty_entityc                 C   sD  ddl m} ddlm} ddlm} ddlm} ddlm} |dd}|| j }|_d |_	t
 }| j|d	}	|	jj||g |	|g}
| |
d u  | t|	jjd
 |	jjd \}}}| || j || |jd}| |j|  t||}| t|d
 |d \}}| |d | |jd | |d u  d S )Nr   _property_tuples_Entity_Key)_KeyPB_mutated_pbbarr   rk   rx   insertr   )r   r   gcloud.datastore.test_batchr   r   r   r   rB   r   r   r(   rT   ra   _commitr5   r   r_   r$   r   
_commit_cw	mutationsr   rf   r   )r   r   r   r   r   r   r   r   r^   r2   r   r   
commit_reqr   mutated_entity	prop_listr   r   r   r   r   %test_put_multi_no_batch_w_partial_key*  s4    

z0TestClient.test_put_multi_no_batch_w_partial_keyc                 C   s  ddl m} ddlm} ddlm} ddlm} t }| j|d}|dd}|| j }|_	t
|}	||g}
W d    n1 s0    Y  | |
d  || |	jd	}| |j	|  t||}| t|d
 |d \}}| |d | |jd d S )Nr   r   r   r   r   rk   r   r   Zupsertrx   r   )r   r   r   r   r   r   r(   rT   rB   r   _NoCommitBatchr   r$   r   r   rf   r_   r   r   )r   r   r   r   r   r^   r2   r   r   
CURR_BATCHr   r   r   r   r   r   r   r   -test_put_multi_existing_batch_w_completed_keyL  s$    

*z8TestClient.test_put_multi_existing_batch_w_completed_keyc                    sj   g   fdd}t  }| j|d}||_t  }|| |  d d d |  d d d |g d S )Nc                     s     | |f d S rG   r4   rr   ru   r   r   _delete_multig  s    z-TestClient.test_delete.<locals>._delete_multirk   r   r   rx   ry   )r(   rT   delete_multideleter$   )r   r   r^   r2   r   r   ru   r   test_deleted  s    
zTestClient.test_deletec                 C   s@   t  }| j|d}|g }| |d  | t|jjd d S )Nrk   r   )r(   rT   r   r$   r   ra   r   )r   r^   r2   r   r   r   r   test_delete_multi_no_keyst  s
    
z$TestClient.test_delete_multi_no_keysc                 C   s   ddl m} ddl m} || j}t }| j|d}|jjg  |	|g}| 
|d  | 
t|jjd |jjd \}}}	| 
|| j || |jd}
| 
|
|  | |	d u  d S )Nr   r   r   rk   rx   r   )r   r   r   rB   r(   rT   ra   r   r5   r   r$   r   r   r   r   r_   )r   r   r   r   r^   r2   r   r   r   r   mutated_keyr   r   r   test_delete_multi_no_batch{  s     

z%TestClient.test_delete_multi_no_batchc           	      C   s   ddl m} ddl m} t }| j|d}|| j}t|}||g}W d    n1 s^0    Y  | |d  || |j	d}| ||j
 | t|jjd d S Nr   r   r   rk   r   )r   r   r   r(   rT   rB   r   r   r$   r   _keyr   ra   r   )	r   r   r   r^   r2   r   r   r   r   r   r   r   "test_delete_multi_w_existing_batch  s    

*z-TestClient.test_delete_multi_w_existing_batchc           	      C   s   ddl m} ddl m} t }| j|d}|| j}t|}||g}W d    n1 s^0    Y  | |d  || |j	d}| ||j
 | t|jjd d S r   )r   r   r   r(   rT   rB   _NoCommitTransactionr   r$   r   r   r   ra   r   )	r   r   r   r^   r2   r   Z	CURR_XACTr   r   r   r   r   (test_delete_multi_w_existing_transaction  s    

*z3TestClient.test_delete_multi_w_existing_transactionc                 C   s`   ddl m} d}|| j}d |_t }| j|d}|||}| dd |D tt	| d S )Nr   r   r   rk   c                 S   s   g | ]
}|j qS r   )r   )r   r   r   r   r   r     rV   z>TestClient.test_allocate_ids_w_partial_key.<locals>.<listcomp>)
r   r   rB   r   r(   rT   allocate_idsr$   rf   range)r   r   ZNUM_IDSZINCOMPLETE_KEYr^   r2   r   r   r   r   test_allocate_ids_w_partial_key  s    
z*TestClient.test_allocate_ids_w_partial_keyc                 C   s>   ddl m} t }| j|d}|| j}| t|j|d d S )Nr   r   rk   r   )r   r   r(   rT   rB   rW   r   r   )r   r   r^   r2   ZCOMPLETE_KEYr   r   r   $test_allocate_ids_with_completed_key  s
    
z/TestClient.test_allocate_ids_with_completed_keyc                 C   s6   d}d}t  }| j|d}| jt|j||| jd d S )Nr   r   rk   r0   )r(   rT   rW   	TypeErrorr   rB   )r   r   r   r^   r2   r   r   r   test_key_w_project  s    zTestClient.test_key_w_projectc           	      C   s   ddl m} ddlm} d}d}t }| j|d}||td |||}W d    n1 s`0    Y  | t	|t | 
|j||f | jd d}| 
|j| d S )	Nr   r1   r   r   r   rk   r   r   rQ   )r;   r2   r"   r   r(   rT   _Dummyr   r_   r`   r$   rs   rB   kwargs)	r   MUTr   r   r   r^   r2   r   expected_kwargsr   r   r   test_key_wo_project  s    *zTestClient.test_key_wo_projectc           
      C   s   ddl m} ddlm} d}d}t }t }| j||d}||td |||}W d    n1 sh0    Y  | t	|t | j
|d}	| |j|	 d S )	Nr   r1   r   r   r   rQ   rR   r   r   r;   r2   r"   r   r(   rT   r   r   r_   r`   rB   r$   r   )
r   r   r   r   r   rh   r^   r2   r   r   r   r   r   test_key_w_namespace  s    *zTestClient.test_key_w_namespacec                 C   s   ddl m} ddlm} d}d}t }t }t }| j||d}||td  |j|||d}	W d    n1 sr0    Y  | t	|	t | j
|d	}
| |	j|
 d S )
Nr   r1   r   r   r   r   r   )rQ   r   r   )r   r   r   r   r   
NAMESPACE1
NAMESPACE2r^   r2   r   r   r   r   r   test_key_w_namespace_collision  s    .z)TestClient.test_key_w_namespace_collisionc                 C   s   ddl m} ddlm} t }| j|d}||td | }W d    n1 sT0    Y  | t	|t | 
|j|f | 
|ji  d S )Nr   r1   r   rk   Batch)r;   r2   r"   r   r(   rT   r   rl   r_   r`   r$   rs   r   )r   r   r   r^   r2   rl   r   r   r   
test_batch  s    &zTestClient.test_batchc                 C   s   ddl m} ddlm} t }| j|d}||td | }W d    n1 sT0    Y  | t	|t | 
|j|f | 
|ji  d S )Nr   r1   r   rk   Transaction)r;   r2   r"   r   r(   rT   r   rm   r_   r`   r$   rs   r   )r   r   r   r^   r2   rp   r   r   r   test_transaction_defaults!  s    &z$TestClient.test_transaction_defaultsc                 C   s<   d}t  }| j|d}| jt  d}| jt|j||d d S )Nr   rk   )r   r2   )r(   rT   rW   r   query)r   r   r^   r2   r[   r   r   r   test_query_w_client/  s
    zTestClient.test_query_w_clientc                 C   s0   d}t  }| j|d}| jt|j|| jd d S )Nr   rk   )r   r   )r(   rT   rW   r   r   rB   )r   r   r^   r2   r   r   r   test_query_w_project8  s    
zTestClient.test_query_w_projectc                 C   s   ddl m} ddlm} t }| j|d}||td | }W d    n1 sT0    Y  | t	|t | 
|j|f | jd d}| 
|j| d S )Nr   r1   r   rk   ZQueryr   r;   r2   r"   r   r(   rT   r   r   r_   r`   r$   rs   rB   r   )r   r   r   r^   r2   r   r   r   r   r   test_query_w_defaultsA  s    &z TestClient.test_query_w_defaultsc              
   C   s   ddl m} ddlm} d}d}t }dg}dg}dg}d	g}	t }
| j|
d
}||td( |j|||||||	d}W d    n1 s0    Y  | t	|t | 
|j|f | j|||||||	d}| 
|j| d S )Nr   r1   r   r   rh   )PROPERTYz==ZVALUEZ__key__r  DISTINCT_ONrk   r  )r   rQ   ancestorfilters
projectionorderdistinct_on)r   r   rQ   r  r	  r
  r  r  r  )r   r   r   r   rh   ZANCESTORFILTERSZ
PROJECTIONZORDERr  r^   r2   r   r   r   r   r   test_query_explicitS  sB    $

zTestClient.test_query_explicitc           	      C   s   ddl m} ddlm} d}t }t }| j||d}||td |j|d}W d    n1 sd0    Y  | t	|t | 
|j|f | j||d}| 
|j| d S )	Nr   r1   r   r   r   r  )r   r   rQ   r   r  )	r   r   r   r   rh   r^   r2   r   r   r   r   r   test_query_w_namespace{  s    *z!TestClient.test_query_w_namespacec           
      C   s   ddl m} ddlm} d}t }t }t }| j||d}||td |j||d}W d    n1 sl0    Y  | t	|t | 
|j|f | j||d}	| 
|j|	 d S )	Nr   r1   r   r   r   r  )r   rQ   r  r  )
r   r   r   r   r   r   r^   r2   r   r   r   r   r    test_query_w_namespace_collision  s     ,z+TestClient.test_query_w_namespace_collision)2r*   r+   r,   rB   rM   rN   rH   rT   rZ   re   ri   rq   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r   r   r   r   rF   v   sb   
	
5""	
		(rF   c                   @   s   e Zd Zdd ZdS )r   c                 O   s   || _ || _d S rG   )rs   r   )r   rs   r   r   r   r   __init__  s    z_Dummy.__init__N)r*   r+   r,   r  r   r   r   r   r     s   r   c                   @   s:   e Zd ZdddZdddZddd	Zd
d Zdd ZdS )rK   Nc                 C   s:   || _ || _g | _g | _g | _g | _g | _g | _d| _d S )Nr   )	rR   rS   r   _lookupr   r   	_alloc_cwZ_alloc_index_updates)r   rR   rS   r   r   r   r    s    z_MockConnection.__init__r   c                 C   s"   | j t|t|t|f d S rG   )r  r5   rf   )r   r   rz   r{   r   r   r   r     s    z"_MockConnection._add_lookup_resultFc           	      C   sD   | j ||||f | jd | jdd   }| _|\}}}|||fS Nr   rx   )r   r5   r  )	r   r   key_pbsr   r   Ztripler   rz   r{   r   r   r   lookup  s    
z_MockConnection.lookupc                 C   s8   | j |||f | jd | jdd   }| _| j|fS r  )r   r5   r   r  )r   r   Zcommit_requestr   responser   r   r   commit  s    z_MockConnection.commitc                    s>   ddl m  | j||f t|} fddtt|D S )Nr   	_KeyProtoc                    s   g | ]} |qS r   r   )r   ir  r   r   r     rV   z0_MockConnection.allocate_ids.<locals>.<listcomp>)Z gcloud.datastore.test_connectionr  r  r5   r   rf   r   )r   r   r  Znum_pbsr   r  r   r     s    z_MockConnection.allocate_ids)NN)r   r   r   )FN)r*   r+   r,   r  r   r  r  r   r   r   r   r   rK     s
   


rK   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r   c                 C   s    ddl m} || _||| _d S )Nr   r   )Zgcloud.datastore.batchr   _client_batch)r   r2   r   r   r   r   r    s    z_NoCommitBatch.__init__c                 C   s   | j | j | jS rG   )r  rn   r  r   r   r   r   	__enter__  s    z_NoCommitBatch.__enter__c                 G   s   | j   d S rG   r  ro   r   rs   r   r   r   __exit__  s    z_NoCommitBatch.__exit__Nr*   r+   r,   r  r!  r$  r   r   r   r   r     s   r   c                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
r   TRANSACTIONc                 C   s*   ddl m} || _|| }| _||_d S )Nr   r   )Zgcloud.datastore.transactionr   r  _transactionr   )r   r2   r   r   rp   r   r   r   r    s    z_NoCommitTransaction.__init__c                 C   s   | j | j | jS rG   )r  rn   r'  r   r   r   r   r!    s    z_NoCommitTransaction.__enter__c                 G   s   | j   d S rG   r"  r#  r   r   r   r$    s    z_NoCommitTransaction.__exit__N)r&  r%  r   r   r   r   r     s   
r   )NN)Z	unittest2r   ZTestCaser   r-   rF   r(   r   rK   r   r   r   r   r   r   <module>   s   
9      9"