a
    ù!fÐ  ã                   @   sV   d dl Z G dd„ de jƒZdd„ ZG dd„ deƒZG dd	„ d	eƒZG d
d„ deƒZdS )é    Nc                   @   sd   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S )ÚTestTransactionc                 C   s   ddl m} |S )Nr   )ÚTransaction)Zgcloud.datastore.transactionr   )Úselfr   © r   úb/var/www/html/python-backend/venv/lib/python3.9/site-packages/gcloud/datastore/test_transaction.pyÚ_getTargetClass   s    zTestTransaction._getTargetClassc                 K   s   |   ¡ |fi |¤ŽS ©N)r   )r   ÚclientÚkwr   r   r   Ú_makeOne   s    zTestTransaction._makeOnec                 C   s¦   ddl m} d}tƒ }t||ƒ}|  |¡}|  |j|¡ |  |j|¡ |  |jd ¡ |  |j	|  
¡ j¡ |  t|j|jƒ¡ |  |j|jju ¡ |  t|jƒd¡ d S )Nr   )Údatastore_pb2ÚPROJECT)Úgcloud.datastore._generatedr   Ú_ConnectionÚ_Clientr   ÚassertEqualÚprojectÚ
connectionÚidZ_statusr   Z_INITIALÚ
assertTrueÚ
isinstanceÚ_commit_requestZCommitRequestZ	mutationsÚlenZ_partial_key_entities)r   r   Ú_PROJECTr   r	   Úxactr   r   r   Útest_ctor_defaults   s    


ÿz"TestTransaction.test_ctor_defaultsc              
   C   sÔ  ddl m} d}tƒ }t||ƒ}|  |¡}|  |¡}|  | ¡ d u ¡ |  | ¡ d u ¡ |< |  | ¡ |u ¡ |  | ¡ |u ¡ ||ƒ4 |  | ¡ d u ¡ |  | ¡ d u ¡ W d   ƒ n1 sÆ0    Y  |‚ |  | ¡ |u ¡ |  | ¡ |u ¡ ||ƒ4 |  | ¡ d u ¡ |  | ¡ d u ¡ W d   ƒ n1 s>0    Y  W d   ƒ n1 s^0    Y  |  | ¡ |u ¡ |  | ¡ |u ¡ W d   ƒ n1 s¢0    Y  |  | ¡ d u ¡ |  | ¡ d u ¡ d S )Nr   )Ú_NoCommitBatchr   )Zgcloud.datastore.test_clientr   r   r   r   r   Úcurrent)r   r   r   r   r	   Zxact1Zxact2r   r   r   Útest_current+   s0    



0
R2zTestTransaction.test_currentc                 C   sH   d}t dƒ}t||ƒ}|  |¡}| ¡  |  |jd¡ |  |j|¡ d S ©Nr   éê   )r   r   r   Úbeginr   r   Ú_begun©r   r   r   r	   r   r   r   r   Ú
test_beginE   s    

zTestTransaction.test_beginc                 C   sl   d}t dƒ}t||ƒ}|  |¡}| ¡  |  |jd¡ |  |j|¡ | ¡  |  |jd ¡ |  t	|j¡ d S r   )
r   r   r   r!   r   r   r"   ÚrollbackÚassertRaisesÚ
ValueErrorr#   r   r   r   Útest_begin_tombstonedN   s    

z%TestTransaction.test_begin_tombstonedc                 C   sT   d}t dƒ}t||ƒ}|  |¡}| ¡  | ¡  |  |jd ¡ |  |j|df¡ d S r   )r   r   r   r!   r%   r   r   Ú_rolled_backr#   r   r   r   Útest_rollback\   s    

zTestTransaction.test_rollbackc                 C   sb   d}t dƒ}t||ƒ}|  |¡}tƒ  |_}| ¡  | ¡  |  |j||df¡ |  |j	d ¡ d S r   )
r   r   r   Úobjectr   r!   Úcommitr   Ú
_committedr   ©r   r   r   r	   r   Úcommit_requestr   r   r   Útest_commit_no_partial_keysf   s    

ÿz+TestTransaction.test_commit_no_partial_keysc           	      C   s¢   d}d}d}t dƒ}t|||ƒg|_t||ƒ}|  |¡}tƒ }| |¡ tƒ  |_}| 	¡  | 
¡  |  |j||df¡ |  |jd ¡ |  |jj||dœg¡ d S )Nr   ÚKINDé{   r    )Úkindr   )r   Ú	_make_keyÚ_completed_keysr   r   Ú_EntityÚputr+   r   r!   r,   r   r-   r   ÚkeyÚpath)	r   r   Z_KINDZ_IDr   r	   r   Úentityr/   r   r   r   Útest_commit_w_partial_keysr   s"    


ÿz*TestTransaction.test_commit_w_partial_keysc                 C   s’   d}t dƒ}t||ƒ}|  |¡}tƒ  |_}|, |  |jd¡ |  |j|¡ W d   ƒ n1 sb0    Y  |  |j||df¡ |  |jd ¡ d S r   )	r   r   r   r+   r   r   r   r"   r-   r.   r   r   r   Útest_context_manager_no_raise„   s    

,ÿz-TestTransaction.test_context_manager_no_raisec                 C   sÖ   G dd„ dt ƒ}d}tdƒ}t||ƒ}|  |¡}tƒ |_zJ|2 |  |jd¡ |  |j|¡ |ƒ ‚W d   ƒ n1 sv0    Y  W n2 |y´   |  |jd ¡ |  |j	|df¡ Y n0 |  |j
d ¡ |  |jd ¡ d S )Nc                   @   s   e Zd ZdS )z9TestTransaction.test_context_manager_w_raise.<locals>.FooN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   ÚFoo“   s   r@   r   r    )Ú	Exceptionr   r   r   r+   Z	_mutationr   r   r"   r)   r-   )r   r@   r   r   r	   r   r   r   r   Útest_context_manager_w_raise‘   s     

(z,TestTransaction.test_context_manager_w_raiseN)r=   r>   r?   r   r   r   r   r$   r(   r*   r0   r;   r<   rB   r   r   r   r   r      s   	
r   c                 C   s6   ddl m} | ¡ }||j_|j ¡ }| |_||_|S )Nr   )Ú
entity_pb2)	r   rC   ÚKeyZpartition_idZ
project_idr9   Úaddr3   r   )r3   Zid_r   rC   r8   Úelemr   r   r   r4   §   s    
r4   c                   @   s@   e Zd Zeƒ Zd Z ZZddd„Zdd„ Z	dd„ Z
d	d
„ ZdS )r   Nr2   c                 C   s   || _ g | _d| _d S ©Nr   )Ú_xact_idr5   Ú_index_updates)r   Zxact_idr   r   r   Ú__init__¶   s    z_Connection.__init__c                 C   s   || _ | jS r   )r"   rH   )r   r   r   r   r   Úbegin_transaction»   s    z_Connection.begin_transactionc                 C   s   ||f| _ d S r   )r)   )r   r   Útransaction_idr   r   r   r%   ¿   s    z_Connection.rollbackc                 C   s   |||f| _ | j| jfS r   )r-   rI   r5   )r   r   r/   rL   r   r   r   r,   Â   s    z_Connection.commit)r2   )r=   r>   r?   r+   Z_markerr"   r)   r-   rJ   rK   r%   r,   r   r   r   r   r   ²   s   
r   c                       s   e Zd Z‡ fdd„Z‡  ZS )r6   c                    s,   t t| ƒ ¡  ddlm} |ddd| _d S )Nr   )rD   r1   r   )r   )Úsuperr6   rJ   Zgcloud.datastore.keyrD   r8   )r   rD   ©Ú	__class__r   r   rJ   É   s    z_Entity.__init__)r=   r>   r?   rJ   Ú__classcell__r   r   rN   r   r6   Ç   s   r6   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   Ú	namespaceÚ_batches)r   r   r   rQ   r   r   r   rJ   Ñ   s    z_Client.__init__c                 C   s   | j  d|¡ d S rG   )rR   Úinsert)r   Úbatchr   r   r   Ú_push_batch×   s    z_Client._push_batchc                 C   s   | j  d¡S rG   )rR   Úpop©r   r   r   r   Ú
_pop_batchÚ   s    z_Client._pop_batchc                 C   s   | j r| j d pd S rG   )rR   rW   r   r   r   Úcurrent_batchÝ   s    z_Client.current_batch)N)r=   r>   r?   rJ   rU   rX   ÚpropertyrY   r   r   r   r   r   Ï   s
   
r   )	Z	unittest2ZTestCaser   r4   r+   r   Údictr6   r   r   r   r   r   Ú<module>   s    