a
    ù!f|3  ã                   @   sŽ   d dl 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G dd„ deƒZ	G dd„ deƒZ
dd„ Zdd„ ZdS )é    Nc                   @   s¤   e Z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%d&„ Zd'S )(Ú	TestBatchc                 C   s   ddl m} |S )Nr   )ÚBatch)Zgcloud.datastore.batchr   )Úselfr   © r   ú\/var/www/html/python-backend/venv/lib/python3.9/site-packages/gcloud/datastore/test_batch.pyÚ_getTargetClass   s    zTestBatch._getTargetClassc                 C   s   |   ¡ |ƒS ©N)r   )r   Úclientr   r   r   Ú_makeOne   s    zTestBatch._makeOnec                 C   s´   ddl m} d}d}tƒ }t|||ƒ}|  |¡}|  |j|¡ |  |j|¡ |  |j|¡ |  	|j
d u ¡ |  |j|j¡ |  	t|j|jƒ¡ |  	|j|jju ¡ |  |jg ¡ d S )Nr   )Údatastore_pb2ÚPROJECTZ	NAMESPACE)Úgcloud.datastore._generatedr   Ú_ConnectionÚ_Clientr
   ÚassertEqualÚprojectÚ
connectionÚ	namespaceÚ
assertTrueÚ_idÚ_statusÚ_INITIALÚ
isinstanceÚ_commit_requestZCommitRequestÚ	mutationsÚ_partial_key_entities)r   r   Ú_PROJECTZ
_NAMESPACEr   r	   Úbatchr   r   r   Ú	test_ctor   s     

ÿzTestBatch.test_ctorc              	   C   s(  d}t ƒ }t||ƒ}|  |¡}|  |¡}|  | ¡ d u ¡ |  | ¡ d u ¡ |  |  | ¡ |u ¡ |  | ¡ |u ¡ |4 |  | ¡ |u ¡ |  | ¡ |u ¡ W d   ƒ n1 s´0    Y  |  | ¡ |u ¡ |  | ¡ |u ¡ W d   ƒ n1 sö0    Y  |  | ¡ d u ¡ |  | ¡ d u ¡ d S ©Nr   )r   r   r
   r   Úcurrent)r   r   r   r	   Úbatch1Úbatch2r   r   r   Útest_current.   s"    


00zTestBatch.test_currentc                 C   s4   d}t ƒ }t||ƒ}|  |¡}|  t|jtƒ ¡ d S r   )r   r   r
   ÚassertRaisesÚ
ValueErrorÚputÚ_Entity©r   r   r   r	   r   r   r   r   Útest_put_entity_wo_keyA   s
    

z TestBatch.test_put_entity_wo_keyc                 C   sB   d}t ƒ }t||ƒ}|  |¡}tƒ }tdƒ|_|  t|j|¡ d S ©Nr   ÚOTHER)	r   r   r
   r'   Ú_KeyÚkeyr$   r%   r&   )r   r   r   r	   r   Úentityr   r   r   Ú#test_put_entity_w_key_wrong_projectI   s    


z-TestBatch.test_put_entity_w_key_wrong_projectc           	      C   s~   d}ddi}t ƒ }t||ƒ}|  |¡}t|ƒ}t|ƒ }|_d |_| |¡ t| |j	dƒ}|  
|j|j¡ |  
|j|g¡ d S )Nr   ÚfooÚbarÚinsert)r   r   r
   r'   r,   r-   r   r&   Ú_mutated_pbr   r   Ú_keyr   )	r   r   Ú_PROPERTIESr   r	   r   r.   r-   Úmutated_entityr   r   r   Útest_put_entity_w_partial_keyS   s    


z'TestBatch.test_put_entity_w_partial_keyc                 C   s  ddl m} d}ddg d¢g dœ}tƒ }t||ƒ}|  |¡}t|ƒ}d|_t|ƒ }|_| 	|¡ t
| |jd	ƒ}	|  |	j|j¡ t||	ƒƒ}
|  t|
ƒd
¡ |  |
d j¡ |  |
d j¡ |  |
d j¡ |
d jj}|  |d j¡ |  |d j¡ |  |d j¡ |  d|
v ¡ d S )Nr   )Ú_property_tuplesr   r1   Zqux)é   é   é   )r0   ÚbazÚspamÚfrotz)r<   r=   Úupsertr;   r0   r<   r=   r9   r:   r>   )Zgcloud.datastore.helpersr8   r   r   r
   r'   Úexclude_from_indexesr,   r-   r&   r3   r   r   r4   ÚdictÚlenÚassertFalser   Zarray_valueÚvalues)r   r8   r   r5   r   r	   r   r.   r-   r6   Z	prop_dictZspam_valuesr   r   r   Útest_put_entity_w_completed_keyc   s4    ü


z)TestBatch.test_put_entity_w_completed_keyc                 C   s@   d}t ƒ }t||ƒ}|  |¡}t|ƒ}d |_|  t|j|¡ d S r   )r   r   r
   r,   r   r$   r%   Údelete©r   r   r   r	   r   r-   r   r   r   Útest_delete_w_partial_key„   s    

z#TestBatch.test_delete_w_partial_keyc                 C   s:   d}t ƒ }t||ƒ}|  |¡}tdƒ}|  t|j|¡ d S r*   )r   r   r
   r,   r$   r%   rF   rG   r   r   r   Útest_delete_w_key_wrong_projectŽ   s    

z)TestBatch.test_delete_w_key_wrong_projectc                 C   sP   d}t ƒ }t||ƒ}|  |¡}t|ƒ}| |¡ t| |jdƒ}|  ||j¡ d S )Nr   rF   )	r   r   r
   r,   rF   r3   r   r   r4   )r   r   r   r	   r   r-   Zmutated_keyr   r   r   Útest_delete_w_completed_key—   s    


z%TestBatch.test_delete_w_completed_keyc                 C   sD   d}t |d ƒ}|  |¡}|  |j|j¡ | ¡  |  |j|j¡ d S r   )r   r
   r   r   r   ÚbeginÚ_IN_PROGRESS©r   r   r	   r   r   r   r   Ú
test_begin£   s    

zTestBatch.test_beginc                 C   sV   d}t |d ƒ}|  |¡}|j|_|  t¡ | ¡  W d   ƒ n1 sH0    Y  d S r   )r   r
   rL   r   r$   r%   rK   rM   r   r   r   Útest_begin_fail«   s    

zTestBatch.test_begin_failc                 C   sD   d}t |d ƒ}|  |¡}|  |j|j¡ | ¡  |  |j|j¡ d S r   )r   r
   r   r   r   ÚrollbackZ_ABORTEDrM   r   r   r   Útest_rollback³   s    

zTestBatch.test_rollbackc                 C   sb   d}t ƒ }t||ƒ}|  |¡}|  |j|j¡ | ¡  |  |j|j¡ |  |j||j	d fg¡ d S r   )
r   r   r
   r   r   r   ÚcommitÚ	_FINISHEDÚ
_committedr   r(   r   r   r   Útest_commit»   s    

ÿzTestBatch.test_commitc                 C   s®   d}d}t |ƒ}t||ƒ}|  |¡}ti ƒ}t|ƒ }|_d |_|j |¡ |  	|j
|j¡ | ¡  |  	|j
|j¡ |  	|j||jd fg¡ |  |jj¡ |  	|jj|¡ d S )Nr   éÒ  )r   r   r
   r'   r,   r-   r   r   Úappendr   r   r   rR   rS   rT   r   rC   Ú
is_partial)r   r   Z_NEW_IDr   r	   r   r.   r-   r   r   r   Ú"test_commit_w_partial_key_entitiesÈ   s"    

ÿz,TestBatch.test_commit_w_partial_key_entitiesc           	      C   sØ   d}ddi}t ƒ }t|ƒ}t|ƒ }|_t||ƒ}|  t|jƒg ¡ |  |¡.}|  t|jƒ|g¡ | 	|¡ W d   ƒ n1 s‚0    Y  |  t|jƒg ¡ t
| |jdƒ}|  |j|j¡ |  |j||jd fg¡ d S ©Nr   r0   r1   r?   ©r   r'   r,   r-   r   r   ÚlistÚ_batchesr
   r&   r3   r   r4   rT   r   ©	r   r   r5   r   r.   r-   r	   r   r6   r   r   r   Útest_as_context_mgr_wo_errorÜ   s     
(ÿz&TestBatch.test_as_context_mgr_wo_errorc              	   C   st  d}ddi}t ƒ }t|ƒ}t|ƒ }|_t|ƒ}t|ƒ }|_t||ƒ}|  t|jƒg ¡ |  |¡Œ}	|  t|jƒ|	g¡ |	 	|¡ |  |¡0}
|  t|jƒ|
|	g¡ |
 	|¡ W d   ƒ n1 sÄ0    Y  |  t|jƒ|	g¡ W d   ƒ n1 sö0    Y  |  t|jƒg ¡ t
| |	jdƒ}|  |j|j¡ t
| |
jdƒ}|  |j|j¡ |  |j||
jd f||	jd fg¡ d S rZ   r[   )r   r   r5   r   Zentity1Úkey1Zentity2Úkey2r	   r!   r"   Zmutated_entity1Zmutated_entity2r   r   r   Útest_as_context_mgr_nestedñ   s4    

(2

ÿÿz$TestBatch.test_as_context_mgr_nestedc           	      C   sî   d}ddi}t ƒ }t|ƒ}t|ƒ }|_t||ƒ}|  t|jƒg ¡ zT|  |¡6}|  t|jƒ|g¡ | 	|¡ t
dƒ‚W d   ƒ n1 sŒ0    Y  W n t
yª   Y n0 |  t|jƒg ¡ t| |jdƒ}|  |j|j¡ |  |jg ¡ d S )Nr   r0   r1   Útestingr?   )r   r'   r,   r-   r   r   r\   r]   r
   r&   r%   r3   r   r4   rT   r^   r   r   r   Útest_as_context_mgr_w_error  s$    

*z%TestBatch.test_as_context_mgr_w_errorN)Ú__name__Ú
__module__Ú__qualname__r   r
   r   r#   r)   r/   r7   rE   rH   rI   rJ   rN   rO   rQ   rU   rY   r_   rb   rd   r   r   r   r   r      s&   
!
	!r   c                   @   s   e Zd Zdd„ ZdS )Ú_PathElementPBc                 C   s
   || _ d S r   )Úid©r   Zid_r   r   r   Ú__init__-  s    z_PathElementPB.__init__N©re   rf   rg   rk   r   r   r   r   rh   +  s   rh   c                   @   s   e Zd Zdd„ ZdS )Ú_KeyPBc                 C   s   t |ƒg| _d S r   )rh   Úpathrj   r   r   r   rk   3  s    z_KeyPB.__init__Nrl   r   r   r   r   rm   1  s   rm   c                   @   s&   e Zd Zeƒ ZdZdd„ Zdd„ ZdS )r   )FNc                 G   s    dd„ |D ƒ| _ g | _d| _d S )Nc                 S   s   g | ]}t |ƒ‘qS r   )rm   )Ú.0r-   r   r   r   Ú
<listcomp><  ó    z(_Connection.__init__.<locals>.<listcomp>r   )Ú_completed_keysrT   Ú_index_updates)r   Znew_keysr   r   r   rk   ;  s    z_Connection.__init__c                 C   s   | j  |||f¡ | j| jfS r   )rT   rW   rs   rr   )r   r   Zcommit_requestZtransaction_idr   r   r   rR   @  s    z_Connection.commitN)re   rf   rg   ÚobjectZ_markerZ_save_resultrk   rR   r   r   r   r   r   7  s   r   c                   @   s   e Zd ZdZdZi ZdS )r'   Nr   )re   rf   rg   r-   r@   Z	_meaningsr   r   r   r   r'   E  s   r'   c                   @   sJ   e Zd Zeƒ ZdZdZdZdZdZ	dd„ Z
edd„ ƒZd	d
„ Zdd„ ZdS )r,   ZKINDZKEYNrV   c                 C   s
   || _ d S r   )r   )r   r   r   r   r   rk   S  s    z_Key.__init__c                 C   s
   | j d u S r   )r   ©r   r   r   r   rX   V  s    z_Key.is_partialc                 C   sB   ddl m} | ¡  }| _|j ¡ }| j|_| jd ur>| j|_	|S )Nr   )Ú
entity_pb2)
r   rv   ÚKeyr4   rn   ÚaddÚ_kindÚkindr   ri   )r   rv   r-   Úelementr   r   r   Úto_protobufZ  s    

z_Key.to_protobufc                 C   s    | j s
J ‚|  | j¡}||_|S r   )rX   Ú	__class__r   r   )r   Znew_idZnew_keyr   r   r   Úcompleted_keyg  s    
z_Key.completed_key)re   rf   rg   rt   Z_MARKERry   r4   Ú_pathr   Z_storedrk   ÚpropertyrX   r|   r~   r   r   r   r   r,   K  s   
r,   c                   @   s2   e Zd Zd
dd„Zdd„ Zdd„ Zedd	„ ƒZdS )r   Nc                 C   s   || _ || _|| _g | _d S r   )r   r   r   r]   )r   r   r   r   r   r   r   rk   p  s    z_Client.__init__c                 C   s   | j  d|¡ d S ©Nr   )r]   r2   )r   r   r   r   r   Ú_push_batchv  s    z_Client._push_batchc                 C   s   | j  d¡S r   )r]   Úpopru   r   r   r   Ú
_pop_batchy  s    z_Client._pop_batchc                 C   s   | j r| j d S d S r   )r]   ru   r   r   r   Úcurrent_batch|  s    z_Client.current_batch)N)re   rf   rg   rk   r‚   r„   r€   r…   r   r   r   r   r   n  s
   
r   c                 C   s   |   t|ƒ|¡ d S r   )r   rB   )Ú	test_caseÚmutation_pb_listZnum_mutationsr   r   r   Ú_assert_num_mutations‚  s    rˆ   c                 C   s0   t | |dƒ |d }|  | d¡|¡ t||ƒS )Nr9   r   Z	operation)rˆ   r   Z
WhichOneofÚgetattr)r†   r‡   Zmutation_typeZ
mutated_pbr   r   r   r3   †  s    ÿr3   )Z	unittest2ZTestCaser   rt   rh   rm   r   rA   r'   r,   r   rˆ   r3   r   r   r   r   Ú<module>   s     #