a
    ù!fc  ã                   @   s¬   d dl 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 jƒZd
d„ 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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 )ÚTestCellc                 C   s   ddl m} |S )Nr   )ÚCell)Úgcloud.bigtable.row_datar   )Úselfr   © r   ú^/var/www/html/python-backend/venv/lib/python3.9/site-packages/gcloud/bigtable/test_row_data.pyÚ_getTargetClass   s    zTestCell._getTargetClassc                 O   s   |   ¡ |i |¤ŽS ©N©r   ©r   ÚargsÚkwargsr   r   r   Ú_makeOne   s    zTestCell._makeOneNc                 C   sž   dd l }ddlm} ddlm} d}||j|d }d}|d u r\|j||d}|  ||¡}	n |j|||d}| j|||d	}	|  ¡ }
|
 	|¡}|  
||	¡ d S )
Nr   )Ú_EPOCH)Údata_pb2l    <Ô9 )Úmicrosecondss   value-bytes)ÚvalueÚtimestamp_micros)r   r   Úlabels)r   )ÚdatetimeÚgcloud._helpersr   Zgcloud.bigtable._generatedr   Ú	timedeltar   r   r   Zfrom_pbÚassertEqual)r   r   r   r   Zdata_v2_pb2r   Ú	timestampr   Zcell_pbZcell_expectedÚklassÚresultr   r   r   Ú_from_pb_test_helper   s$    ÿÿ
zTestCell._from_pb_test_helperc                 C   s   |   ¡  d S r	   ©r   ©r   r   r   r   Útest_from_pb3   s    zTestCell.test_from_pbc                 C   s   ddg}|   |¡ d S )NÚlabel1Úlabel2r   )r   r   r   r   r   Útest_from_pb_with_labels6   s    z!TestCell.test_from_pb_with_labelsc                 C   s8   t ƒ }t ƒ }|  ||¡}|  |j|¡ |  |j|¡ d S r	   )Úobjectr   r   r   r   )r   r   r   Úcellr   r   r   Útest_constructor:   s
    zTestCell.test_constructorc                 C   s4   t ƒ }t ƒ }|  ||¡}|  ||¡}|  ||¡ d S r	   ©r#   r   r   )r   r   r   Úcell1Úcell2r   r   r   Útest___eq__A   s
    zTestCell.test___eq__c                 C   s"   |   d d ¡}tƒ }|  ||¡ d S r	   ©r   r#   ÚassertNotEqual)r   r'   r(   r   r   r   Útest___eq__type_differH   s    zTestCell.test___eq__type_differc                 C   s:   t ƒ }t ƒ }|  ||¡}|  ||¡}||k}|  |¡ d S r	   ©r#   r   ÚassertFalse)r   r   r   r'   r(   Úcomparison_valr   r   r   Útest___ne__same_valueM   s    zTestCell.test___ne__same_valuec                 C   s6   d}d}t ƒ }|  ||¡}|  ||¡}|  ||¡ d S )NÚvalue1Úvalue2©r#   r   r+   )r   r1   r2   r   r'   r(   r   r   r   Útest___ne__U   s    zTestCell.test___ne__)N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r"   r%   r)   r,   r0   r4   r   r   r   r   r      s   
r   c                   @   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 )ÚTestPartialRowDatac                 C   s   ddl m} |S )Nr   )ÚPartialRowData)r   r9   )r   r9   r   r   r   r   `   s    z"TestPartialRowData._getTargetClassc                 O   s   |   ¡ |i |¤ŽS r	   r
   r   r   r   r   r   d   s    zTestPartialRowData._makeOnec                 C   s2   t ƒ }|  |¡}|  |j|u ¡ |  |ji ¡ d S r	   )r#   r   Ú
assertTrueZ_row_keyr   Ú_cells©r   Úrow_keyÚpartial_row_datar   r   r   r%   g   s    
z#TestPartialRowData.test_constructorc                 C   s*   t ƒ }|  |¡}|  |¡}|  ||¡ d S r	   r&   ©r   r=   Úpartial_row_data1Úpartial_row_data2r   r   r   r)   m   s    

zTestPartialRowData.test___eq__c                 C   s    |   d ¡}tƒ }|  ||¡ d S r	   r*   )r   r@   rA   r   r   r   r,   s   s    
z)TestPartialRowData.test___eq__type_differc                 C   s0   t ƒ }|  |¡}|  |¡}||k}|  |¡ d S r	   r-   )r   r=   r@   rA   r/   r   r   r   r0   x   s
    

z(TestPartialRowData.test___ne__same_valuec                 C   s0   t ƒ }|  |¡}t ƒ }|  |¡}|  ||¡ d S r	   r3   )r   Zrow_key1r@   Zrow_key2rA   r   r   r   r4      s
    

zTestPartialRowData.test___ne__c                 C   s2   t ƒ }|  |¡}t ƒ |_|  |¡}|  ||¡ d S r	   )r#   r   r;   r+   r?   r   r   r   Útest___ne__cells†   s
    

z#TestPartialRowData.test___ne__cellsc                 C   sn   t ƒ }t ƒ }t ƒ }d}d}d}d}d}|  d ¡}	|||||i|||ii|	_|	 ¡ }
|||dœ}|  |
|¡ d S )NZname1Zname2s   col1s   col2s   col3)s
   name1:col1s
   name1:col2s
   name2:col3)r#   r   r;   Úto_dictr   )r   r'   r(   Zcell3Zfamily_name1Zfamily_name2Zqual1Zqual2Zqual3r>   r   Úexpected_resultr   r   r   Útest_to_dict   s.    
þÿû
ýzTestPartialRowData.test_to_dictc                 C   s:   |   d ¡}ddi}||_|  |j|u ¡ |  |j|¡ d S )Né   é   )r   r;   r.   Úcellsr   )r   r>   rH   r   r   r   Útest_cells_property«   s
    
z&TestPartialRowData.test_cells_propertyc                 C   s$   t ƒ }|  |¡}|  |j|u ¡ d S r	   )r#   r   r:   r=   r<   r   r   r   Útest_row_key_getter³   s    
z&TestPartialRowData.test_row_key_getterN)r5   r6   r7   r   r   r%   r)   r,   r0   r4   rB   rE   rI   rJ   r   r   r   r   r8   ^   s   r8   c                   @   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'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1S )2ÚTestPartialRowsDatac                 C   s   ddl m} |S ©Nr   )ÚPartialRowsData©r   rM   ©r   rM   r   r   r   r   »   s    z#TestPartialRowsData._getTargetClassc                    s    |   ¡ }G ‡ fdd„d|ƒ‰ ˆ S )Nc                       s&   e Zd Z‡‡ fdd„Zdd„ Z‡  ZS )zCTestPartialRowsData._getDoNothingClass.<locals>.FakePartialRowsDatac                    s    t ˆ | ƒj|i |¤Ž g | _d S r	   )ÚsuperÚ__init__Ú	_consumedr   )ÚFakePartialRowsDataÚ	__class__r   r   rQ   Ä   s    zLTestPartialRowsData._getDoNothingClass.<locals>.FakePartialRowsData.__init__c                 S   s   | j  ¡ }| j |¡ |S r	   )Ú_response_iteratorÚnextrR   Úappend)r   r   r   r   r   Úconsume_nextÈ   s    
zPTestPartialRowsData._getDoNothingClass.<locals>.FakePartialRowsData.consume_next)r5   r6   r7   rQ   rX   Ú__classcell__r   ©rS   )rT   r   rS   Â   s   rS   r
   )r   r   r   rZ   r   Ú_getDoNothingClass¿   s    z&TestPartialRowsData._getDoNothingClassc                 O   s   |   ¡ |i |¤ŽS r	   r
   r   r   r   r   r   Ï   s    zTestPartialRowsData._makeOnec                 C   s2   t ƒ }|  |¡}|  |j|u ¡ |  |ji ¡ d S r	   )r#   r   r:   rU   r   Ú_rows©r   Úresponse_iteratorÚpartial_rows_datar   r   r   r%   Ò   s    
ÿz$TestPartialRowsData.test_constructorc                 C   s*   t ƒ }|  |¡}|  |¡}|  ||¡ d S r	   r&   )r   r^   Úpartial_rows_data1Úpartial_rows_data2r   r   r   r)   Ù   s    

zTestPartialRowsData.test___eq__c                 C   s    |   d ¡}tƒ }|  ||¡ d S r	   r*   )r   r`   ra   r   r   r   r,   ß   s    
z*TestPartialRowsData.test___eq__type_differc                 C   s0   t ƒ }|  |¡}|  |¡}||k}|  |¡ d S r	   r-   )r   r^   r`   ra   r/   r   r   r   r0   ä   s
    

z)TestPartialRowsData.test___ne__same_valuec                 C   s0   t ƒ }|  |¡}t ƒ }|  |¡}|  ||¡ d S r	   r3   )r   Zresponse_iterator1r`   Zresponse_iterator2ra   r   r   r   r4   ë   s
    

zTestPartialRowsData.test___ne__c                 C   s   |   g ¡}|  |j|j¡ d S r	   )r   r   ÚstateÚSTART©r   Úprdr   r   r   Útest_state_startò   s    
z$TestPartialRowsData.test_state_startc                 C   s,   |   g ¡}d|_tƒ |_|  |j|j¡ d S )NÚ )r   Ú_last_scanned_row_keyr#   Ú_rowr   rb   ZNEW_ROWrd   r   r   r   Útest_state_new_row_w_rowö   s    
z,TestPartialRowsData.test_state_new_row_w_rowc                 C   s*   |   d ¡}tƒ  |_}|  |j|u ¡ d S r	   )r   r#   r\   r:   Úrows)r   r_   r   r   r   r   Útest_rows_getterü   s    
z$TestPartialRowsData.test_rows_getterc                 C   s8   t ƒ }|  |¡}|  |jd¡ | ¡  |  |jd¡ d S )Nr   rF   )Ú_MockCancellableIteratorr   r   Úcancel_callsÚcancelr]   r   r   r   Útest_cancel  s
    
zTestPartialRowsData.test_cancelc                 C   s`   |   ¡ }tƒ tƒ tƒ   }}}t|||ƒ}||ƒ}|  |jg ¡ | ¡  |  |j|||g¡ d S r	   )r[   r#   rm   r   rR   Úconsume_all©r   r   r1   r2   Zvalue3r^   r_   r   r   r   Útest_consume_all
  s    ÿz$TestPartialRowsData.test_consume_allc                 C   sv   |   ¡ }tƒ tƒ tƒ   }}}t|||ƒ}||ƒ}|  |jg ¡ |jdd |  |j|g¡ |  t|jƒ||g¡ d S )NrF   )Z	max_loops)r[   r#   rm   r   rR   rq   ÚlistÚiter_valuesrr   r   r   r   Útest_consume_all_with_max_loops  s    ÿz3TestPartialRowsData.test_consume_all_with_max_loopsc                 C   st   |   g ¡}tdgƒ}|d }| |¡ |  |jd¡ |  |jjd¡ |  |jjd¡ |  |jd¡ |  |j	g ¡ d S )Nrg   r   ó    )
r   Ú_generate_cell_chunksÚ_copy_from_currentr   r=   Úfamily_namer   Ú	qualifierr   r   )r   re   ÚchunksÚchunkr   r   r   Útest__copy_from_current_unset"  s    


z1TestPartialRowsData.test__copy_from_current_unsetc           	      C   s¼   d}d}d}d}ddg}|   g ¡}tƒ |_tdgƒ}|d }||_||j_||j_||_|j	 
|¡ | |¡ |  |j|¡ |  |jj|¡ |  |jj|¡ |  |j|¡ |  |j	|¡ d S )	Nó   RKÚAó   Céd   ÚL1ÚL2rg   r   )r   Ú_PartialCellDataÚ_cellrx   r=   rz   r   r{   r   r   Úextendry   r   )	r   ÚROW_KEYÚFAMILY_NAMEÚ	QUALIFIERÚTIMESTAMP_MICROSÚLABELSre   r|   r}   r   r   r   Útest__copy_from_current_blank-  s(    


z1TestPartialRowsData.test__copy_from_current_blankc                 C   sd   |   g ¡}tƒ }| |¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jd¡ |  |jg ¡ d S )Nrg   rw   r   )	r   r…   Ú_copy_from_previousr   r=   rz   r{   r   r   )r   re   r$   r   r   r   Útest__copy_from_previous_unsetC  s    

z2TestPartialRowsData.test__copy_from_previous_unsetc                 C   s   d}d}d}d}ddg}|   g ¡}t|||||d}tƒ |_| |¡ |  |j|¡ |  |j|¡ |  |j|¡ |  |j|¡ |  |j	|¡ d S )NÚRKr€   r   r‚   rƒ   r„   ©r=   rz   r{   r   r   ©
r   r…   Z_previous_cellrŽ   r   r=   rz   r{   r   r   ©r   rˆ   r‰   rŠ   r‹   rŒ   re   r$   r   r   r   Útest__copy_from_previous_blankM  s(    
û
z2TestPartialRowsData.test__copy_from_previous_blankc                 C   s   d}d}d}d}ddg}|   g ¡}t|||||d|_tƒ }| |¡ |  |j|¡ |  |j|¡ |  |j|¡ |  |jd¡ |  |j	g ¡ d S )	Nr   r€   r   r‚   rƒ   r„   r‘   r   r’   r“   r   r   r   Útest__copy_from_previous_filledc  s(    
û
z3TestPartialRowsData.test__copy_from_previous_filledc                 C   sD   d}|   g ¡}t|d }|_d |_| ¡  |  |j| |u ¡ d S )Nr   )r=   )r   Ú_Dummyri   r†   Z_save_current_rowr:   r\   )r   rˆ   re   Úrowr   r   r   Útest__save_row_no_celly  s    
z*TestPartialRowsData.test__save_row_no_cellc                 C   s`   ddl m} tddd}t|ƒ}|  |¡}|  |¡ | ¡  W d   ƒ n1 sR0    Y  d S )Nr   )ÚInvalidReadRowsResponser   ÚABC©r|   Úlast_scanned_row_key)r   r™   Ú_ReadRowsResponseV2rm   r   ÚassertRaisesrX   )r   r™   ÚresponseÚiteratorre   r   r   r   Ú*test_invalid_last_scanned_row_key_on_start  s    
z>TestPartialRowsData.test_invalid_last_scanned_row_key_on_startc                 C   s>   t ddd}t|ƒ}|  |¡}d|_| ¡  |  |jd¡ d S )Nr   ZAFTERr›   ZBEFORE)r   rm   r   rh   rX   r   )r   rŸ   r    re   r   r   r   Ú(test_valid_last_scanned_row_key_on_start‰  s    ÿ
z<TestPartialRowsData.test_valid_last_scanned_row_key_on_startc                 C   sf   ddl m} tdgƒ}t|ƒ}t|ƒ}|  |¡}|  |¡ | ¡  W d   ƒ n1 sX0    Y  d S )Nr   ©ÚInvalidChunkrg   )r   r¤   rx   r   rm   r   rž   rX   )r   r¤   r|   rŸ   r    re   r   r   r   Útest_invalid_empty_chunk’  s    

z,TestPartialRowsData.test_invalid_empty_chunkc                 C   s†   ddl m} tddgƒ}|d }d|_d|j_d|j_t|ƒ}t|ƒ}|  	|¡}|  
|¡ | ¡  W d   ƒ n1 sx0    Y  d S )Nr   r£   rg   r   r€   r   )r   r¤   rx   r=   rz   r   r{   r   rm   r   rž   rX   )r   r¤   r|   ÚfirstrŸ   r    re   r   r   r   Útest_invalid_empty_second_chunk›  s    
z3TestPartialRowsData.test_invalid_empty_second_chunkN)r5   r6   r7   r   r[   r   r%   r)   r,   r0   r4   rf   rj   rl   rp   rs   rv   r~   r   r   r”   r•   r˜   r¡   r¢   r¥   r§   r   r   r   r   rK   ¹   s0   	
		rK   c                   @   sÂ  e Zd 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(d)„ Zeƒ Zefd*d+„Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Z d8d9„ Z!d:d;„ Z"d<d=„ Z#d>d?„ Z$d@dA„ Z%dBdC„ Z&dDdE„ Z'dFdG„ Z(dHdI„ Z)dJdK„ Z*dLdM„ Z+dNdO„ Z,dPdQ„ Z-dRdS„ Z.dTdU„ Z/dVdW„ Z0dXdY„ Z1dZd[„ Z2d\d]„ Z3d^d_„ Z4d`da„ Z5dbdc„ Z6ddde„ Z7dfdg„ Z8dhdi„ Z9djdk„ Z:dS )lÚ)TestPartialRowsData_JSON_acceptance_testsNc                 C   s   ddl m} |S rL   rN   rO   r   r   r   r   ­  s    z9TestPartialRowsData_JSON_acceptance_tests._getTargetClassc                 O   s   |   ¡ |i |¤ŽS r	   r
   r   r   r   r   r   ±  s    z2TestPartialRowsData_JSON_acceptance_tests._makeOnec           
      C   sj   dd l }| jjd u r^|j t¡}|j |d¡}t|ƒ}i  }| j_|D ]\}}}	||	f||< qF| jj| S )Nr   zread-rows-acceptance-test.json)ÚosrT   Ú_json_testsÚpathÚdirnameÚ__file__ÚjoinÚ _parse_readrows_acceptance_tests)
r   Z	test_namer©   r¬   ÚfilenameÚrawÚtestsÚnamer|   Úresultsr   r   r   Ú_load_json_test´  s    z9TestPartialRowsData_JSON_acceptance_tests._load_json_testc           
      C   s˜   ddl m} |  |¡\}}t|ƒ}t|ƒ}|  |¡}|  |¡ | ¡  W d   ƒ n1 s\0    Y  |  dd„ |D ƒ¡}|  t	|ƒ¡}	|  
|	|¡ d S )Nr   r£   c                 S   s   g | ]}|d  s|‘qS ©Úerrorr   ©Ú.0r   r   r   r   Ú
<listcomp>Ê  rw   zRTestPartialRowsData_JSON_acceptance_tests._fail_during_consume.<locals>.<listcomp>)r   r¤   rµ   r   rm   r   rž   rX   Ú_sort_flattend_cellsÚ_flatten_cellsr   )
r   Útestcase_namer¤   r|   r´   rŸ   r    re   rD   Ú	flattenedr   r   r   Ú_fail_during_consumeÁ  s    
&ÿz>TestPartialRowsData_JSON_acceptance_tests._fail_during_consumec                 C   s   |   d¡ d S )Nz#invalid - no cell key before commit©r¿   r   r   r   r   Ú&test_invalid_no_cell_key_before_commitÎ  s    zPTestPartialRowsData_JSON_acceptance_tests.test_invalid_no_cell_key_before_commitc                 C   s   |   d¡ d S )Nz"invalid - no cell key before valuerÀ   r   r   r   r   Ú%test_invalid_no_cell_key_before_valueÑ  s    zOTestPartialRowsData_JSON_acceptance_tests.test_invalid_no_cell_key_before_valuec                 C   s   |   d¡ d S )Nz/invalid - new col family must specify qualifierrÀ   r   r   r   r   Ú(test_invalid_new_col_family_wo_qualifierÔ  s    ÿzRTestPartialRowsData_JSON_acceptance_tests.test_invalid_new_col_family_wo_qualifierc                 C   s   |   d¡ d S )Nz invalid - no commit between rowsrÀ   r   r   r   r   Ú#test_invalid_no_commit_between_rowsØ  s    zMTestPartialRowsData_JSON_acceptance_tests.test_invalid_no_commit_between_rowsc                 C   s   |   d¡ d S )Nz#invalid - no commit after first rowrÀ   r   r   r   r   Ú&test_invalid_no_commit_after_first_rowÛ  s    zPTestPartialRowsData_JSON_acceptance_tests.test_invalid_no_commit_after_first_rowc                 C   s   |   d¡ d S )Nzinvalid - duplicate row keyrÀ   r   r   r   r   Útest_invalid_duplicate_row_keyÞ  s    zHTestPartialRowsData_JSON_acceptance_tests.test_invalid_duplicate_row_keyc                 C   s   |   d¡ d S )Nz!invalid - new row missing row keyrÀ   r   r   r   r   Ú$test_invalid_new_row_missing_row_keyá  s    zNTestPartialRowsData_JSON_acceptance_tests.test_invalid_new_row_missing_row_keyc                 C   s   |   d¡ d S )Nzinvalid - bare resetrÀ   r   r   r   r   Útest_invalid_bare_resetä  s    zATestPartialRowsData_JSON_acceptance_tests.test_invalid_bare_resetc                 C   s   |   d¡ d S )Nzinvalid - bad reset, no commitrÀ   r   r   r   r   Ú test_invalid_bad_reset_no_commitç  s    zJTestPartialRowsData_JSON_acceptance_tests.test_invalid_bad_reset_no_commitc                 C   s   |   d¡ d S )Nz!invalid - missing key after resetrÀ   r   r   r   r   Ú$test_invalid_missing_key_after_resetê  s    zNTestPartialRowsData_JSON_acceptance_tests.test_invalid_missing_key_after_resetc                 C   s   |   d¡ d S )Nzinvalid - reset with chunkrÀ   r   r   r   r   Útest_invalid_reset_with_chunkí  s    zGTestPartialRowsData_JSON_acceptance_tests.test_invalid_reset_with_chunkc                 C   s   |   d¡ d S )Nzinvalid - commit with chunkrÀ   r   r   r   r   Útest_invalid_commit_with_chunkð  s    zHTestPartialRowsData_JSON_acceptance_tests.test_invalid_commit_with_chunkc                 C   s"   dd l }| ddd¡}t||dS )Nr   ÚrkÚfmÚqual)Úkey)ÚoperatorÚ
itemgetterÚsorted)r   r¾   rÑ   Zkey_funcr   r   r   r»   õ  s    z>TestPartialRowsData_JSON_acceptance_tests._sort_flattend_cellsc           	      C   sr   |   |¡\}}t|ƒ}t|ƒ}|  |¡}| ¡  |  |j|j¡ |  dd„ |D ƒ¡}|  t	|ƒ¡}|  ||¡ d S )Nc                 S   s   g | ]}|d  s|‘qS r¶   r   r¸   r   r   r   rº     rw   zSTestPartialRowsData_JSON_acceptance_tests._incomplete_final_row.<locals>.<listcomp>)
rµ   r   rm   r   rX   r   rb   ZROW_IN_PROGRESSr»   r¼   )	r   r½   r|   r´   rŸ   r    re   rD   r¾   r   r   r   Ú_incomplete_final_rowú  s    
ÿz?TestPartialRowsData_JSON_acceptance_tests._incomplete_final_rowc                 C   s   |   d¡ d S )Nzinvalid - no commit©rÔ   r   r   r   r   Útest_invalid_no_commit  s    z@TestPartialRowsData_JSON_acceptance_tests.test_invalid_no_commitc                 C   s   |   d¡ d S )Nz!invalid - last row missing commitrÕ   r   r   r   r   Ú$test_invalid_last_row_missing_commit	  s    zNTestPartialRowsData_JSON_acceptance_tests.test_invalid_last_row_missing_commitc           	      C   sb   |   |¡\}}t|ƒ}t|ƒ}|  |¡}| ¡  |  t|ƒ¡}|| ju rR|  |¡}|  ||¡ d S r	   )	rµ   r   rm   r   rX   r»   r¼   Ú_markerr   )	r   r½   rD   r|   r´   rŸ   r    re   r¾   r   r   r   Ú_match_results  s    


z8TestPartialRowsData_JSON_acceptance_tests._match_resultsc                 C   s   |   d¡ d S )Nzbare commit implies ts=0©rÙ   r   r   r   r   Ú test_bare_commit_implies_ts_zero  s    zJTestPartialRowsData_JSON_acceptance_tests.test_bare_commit_implies_ts_zeroc                 C   s   |   d¡ d S )Nzsimple row with timestamprÚ   r   r   r   r   Útest_simple_row_with_timestamp  s    zHTestPartialRowsData_JSON_acceptance_tests.test_simple_row_with_timestampc                 C   s   |   d¡ d S )Nzmissing timestamp, implied ts=0rÚ   r   r   r   r   Ú&test_missing_timestamp_implies_ts_zero!  s    zPTestPartialRowsData_JSON_acceptance_tests.test_missing_timestamp_implies_ts_zeroc                 C   s   |   d¡ d S )Nzempty cell valuerÚ   r   r   r   r   Útest_empty_cell_value$  s    z?TestPartialRowsData_JSON_acceptance_tests.test_empty_cell_valuec                 C   s   |   d¡ d S )Nztwo unsplit cellsrÚ   r   r   r   r   Útest_two_unsplit_cells'  s    z@TestPartialRowsData_JSON_acceptance_tests.test_two_unsplit_cellsc                 C   s   |   d¡ d S )Nztwo qualifiersrÚ   r   r   r   r   Útest_two_qualifiers*  s    z=TestPartialRowsData_JSON_acceptance_tests.test_two_qualifiersc                 C   s   |   d¡ d S )Nztwo familiesrÚ   r   r   r   r   Útest_two_families-  s    z;TestPartialRowsData_JSON_acceptance_tests.test_two_familiesc                 C   s   |   d¡ d S )Nzwith labelsrÚ   r   r   r   r   Útest_with_labels0  s    z:TestPartialRowsData_JSON_acceptance_tests.test_with_labelsc                 C   s   |   d¡ d S )Nzsplit cell, bare commitrÚ   r   r   r   r   Útest_split_cell_bare_commit3  s    zETestPartialRowsData_JSON_acceptance_tests.test_split_cell_bare_commitc                 C   s   |   d¡ d S )Nz
split cellrÚ   r   r   r   r   Útest_split_cell6  s    z9TestPartialRowsData_JSON_acceptance_tests.test_split_cellc                 C   s   |   d¡ d S )Nzsplit four waysrÚ   r   r   r   r   Útest_split_four_ways9  s    z>TestPartialRowsData_JSON_acceptance_tests.test_split_four_waysc                 C   s   |   d¡ d S )Nztwo split cellsrÚ   r   r   r   r   Útest_two_split_cells<  s    z>TestPartialRowsData_JSON_acceptance_tests.test_two_split_cellsc                 C   s   |   d¡ d S )Nzmulti-qualifier splitsrÚ   r   r   r   r   Útest_multi_qualifier_splits?  s    zETestPartialRowsData_JSON_acceptance_tests.test_multi_qualifier_splitsc                 C   s   |   d¡ d S )Nzmulti-qualifier multi-splitrÚ   r   r   r   r   Ú test_multi_qualifier_multi_splitB  s    zJTestPartialRowsData_JSON_acceptance_tests.test_multi_qualifier_multi_splitc                 C   s   |   d¡ d S )Nzmulti-family splitrÚ   r   r   r   r   Útest_multi_family_splitE  s    zATestPartialRowsData_JSON_acceptance_tests.test_multi_family_splitc                 C   s   |   d¡ d S )Nztwo rowsrÚ   r   r   r   r   Útest_two_rowsH  s    z7TestPartialRowsData_JSON_acceptance_tests.test_two_rowsc                 C   s   |   d¡ d S )Nztwo rows implicit timestamprÚ   r   r   r   r   Ú test_two_rows_implicit_timestampK  s    zJTestPartialRowsData_JSON_acceptance_tests.test_two_rows_implicit_timestampc                 C   s   |   d¡ d S )Nztwo rows empty valuerÚ   r   r   r   r   Útest_two_rows_empty_valueN  s    zCTestPartialRowsData_JSON_acceptance_tests.test_two_rows_empty_valuec                 C   s   |   d¡ d S )Nz!two rows, one with multiple cellsrÚ   r   r   r   r   Ú%test_two_rows_one_with_multiple_cellsQ  s    zOTestPartialRowsData_JSON_acceptance_tests.test_two_rows_one_with_multiple_cellsc                 C   s   |   d¡ d S )Nz+two rows, multiple cells, multiple familiesrÚ   r   r   r   r   Ú.test_two_rows_multiple_cells_multiple_familiesT  s    zXTestPartialRowsData_JSON_acceptance_tests.test_two_rows_multiple_cells_multiple_familiesc                 C   s   |   d¡ d S )Nztwo rows, multiple cellsrÚ   r   r   r   r   Útest_two_rows_multiple_cellsW  s    zFTestPartialRowsData_JSON_acceptance_tests.test_two_rows_multiple_cellsc                 C   s   |   d¡ d S )Nztwo rows, four cells, 2 labelsrÚ   r   r   r   r   Ú#test_two_rows_four_cells_two_labelsZ  s    zMTestPartialRowsData_JSON_acceptance_tests.test_two_rows_four_cells_two_labelsc                 C   s   |   d¡ d S )Nz$two rows with splits, same timestamprÚ   r   r   r   r   Ú(test_two_rows_with_splits_same_timestamp]  s    zRTestPartialRowsData_JSON_acceptance_tests.test_two_rows_with_splits_same_timestampc                 C   s   | j dg d d S )Nzno data after reset)rD   rÚ   r   r   r   r   Útest_no_data_after_reset`  s    zBTestPartialRowsData_JSON_acceptance_tests.test_no_data_after_resetc                 C   s   |   d¡ d S )Nzsimple resetrÚ   r   r   r   r   Útest_simple_resetd  s    z;TestPartialRowsData_JSON_acceptance_tests.test_simple_resetc                 C   s   |   d¡ d S )Nzreset to new valrÚ   r   r   r   r   Útest_reset_to_new_valg  s    z?TestPartialRowsData_JSON_acceptance_tests.test_reset_to_new_valc                 C   s   |   d¡ d S )Nzreset to new qualrÚ   r   r   r   r   Útest_reset_to_new_qualj  s    z@TestPartialRowsData_JSON_acceptance_tests.test_reset_to_new_qualc                 C   s   |   d¡ d S )Nzreset with splitsrÚ   r   r   r   r   Útest_reset_with_splitsm  s    z@TestPartialRowsData_JSON_acceptance_tests.test_reset_with_splitsc                 C   s   |   d¡ d S )Nz
two resetsrÚ   r   r   r   r   Útest_two_resetsp  s    z9TestPartialRowsData_JSON_acceptance_tests.test_two_resetsc                 C   s   |   d¡ d S )Nzreset to new rowrÚ   r   r   r   r   Útest_reset_to_new_rows  s    z?TestPartialRowsData_JSON_acceptance_tests.test_reset_to_new_rowc                 C   s   |   d¡ d S )Nzreset in between chunksrÚ   r   r   r   r   Útest_reset_in_between_chunksv  s    zFTestPartialRowsData_JSON_acceptance_tests.test_reset_in_between_chunksc                 C   s   |   d¡ d S )Nzempty cell chunkrÚ   r   r   r   r   Útest_empty_cell_chunky  s    z?TestPartialRowsData_JSON_acceptance_tests.test_empty_cell_chunk);r5   r6   r7   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ì   rí   rî   rï   rð   rñ   rò   ró   rô   rõ   rö   r÷   rø   rù   rú   r   r   r   r   r¨   ©  sn   r¨   c           
      c   s’   ddl m} ddl m} | j ¡ D ]j\}}|j ¡ D ]V\}}| ¡ D ]D\}}|D ]6}	||ƒ|||ƒ||	jƒ||	jƒd |	j	¡ddœV  qPqDq4q"d S )Nr   )Ú_bytes_to_unicode)Ú_microseconds_from_datetimeú F)rÍ   rÎ   rÏ   Útsr   Úlabelr·   )
r   rû   rü   rk   ÚitemsrH   r   r   r®   r   )
re   rû   rü   r=   r—   rz   Úfamilyr{   Úcolumnr$   r   r   r   r¼   }  s    
ùr¼   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )rm   r   c                 G   s   t |ƒ| _d S r	   )Úiterru   )r   Úvaluesr   r   r   rQ   •  s    z!_MockCancellableIterator.__init__c                 C   s   |  j d7  _ d S )NrF   )rn   r   r   r   r   ro   ˜  s    z_MockCancellableIterator.cancelc                 C   s
   t | jƒS r	   )rV   ru   r   r   r   r   rV   ›  s    z_MockCancellableIterator.nextc                 C   s   |   ¡ S r	   )rV   r   r   r   r   Ú__next__ž  s    z!_MockCancellableIterator.__next__N)r5   r6   r7   rn   rQ   ro   rV   r  r   r   r   r   rm   ‘  s
   rm   c                   @   s   e Zd Zdd„ ZdS )r–   c                 K   s   | j  |¡ d S r	   )Ú__dict__Úupdate©r   Úkwr   r   r   rQ   ¤  s    z_Dummy.__init__N©r5   r6   r7   rQ   r   r   r   r   r–   ¢  s   r–   c                   @   s$   e Zd ZdZdZdZdZdd„ ZdS )r…   rg   rw   r   c                 K   s   |  dg ¡| _| j |¡ d S )Nr   )Úpopr   r  r  r  r   r   r   rQ   ¯  s    z_PartialCellData.__init__N)r5   r6   r7   r=   rz   r{   r   rQ   r   r   r   r   r…   ¨  s
   r…   c                   @   s   e Zd Zddd„ZdS )r   rg   c                 C   s   || _ || _d S r	   r›   )r   r|   rœ   r   r   r   rQ   ¶  s    z_ReadRowsResponseV2.__init__N)rg   r
  r   r   r   r   r   ´  s   r   c                 C   sB   ddl m} ddlm} g }| D ]}| ¡ }| |||ƒ¡ q |S )Nr   )ÚMerge)ÚReadRowsResponse)Zgoogle.protobuf.text_formatr  Z'gcloud.bigtable._generated.bigtable_pb2r  Z	CellChunkrW   )Zchunk_text_pbsr  r  r|   Zchunk_text_pbr}   r   r   r   rx   »  s    rx   c                 c   st   ddl }t| ƒ}| |¡}W d  ƒ n1 s00    Y  |d D ],}|d }t|d ƒ}|d }|||fV  qBdS )zíParse acceptance tests from JSON

    See:
    https://github.com/GoogleCloudPlatform/cloud-bigtable-client/blob/master/bigtable-client-core/src/test/resources/com/google/cloud/bigtable/grpc/scanner/v2/read-rows-acceptance-test.json
    r   Nr²   r³   r|   r´   )ÚjsonÚopenÚloadrx   )r°   r  Z	json_fileZ	test_jsonÚtestr³   r|   r´   r   r   r   r¯   È  s    
(r¯   )Z	unittest2ZTestCaser   r8   rK   r¨   r¼   r#   rm   r–   r…   r   rx   r¯   r   r   r   r   Ú<module>   s   K[ q U