a
    !f[                    @   s   d dl Z G dd de jZG dd deZG dd de jeZG dd	 d	e jeZG d
d de j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S )    Nc                   @   st   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S )TestSchemaFieldc                 C   s   ddl m} |S )Nr   SchemaField)gcloud.bigquery.tabler   )selfr    r   [/var/www/html/python-backend/venv/lib/python3.9/site-packages/gcloud/bigquery/test_table.py_getTargetClass   s    zTestSchemaField._getTargetClassc                 O   s   |   |i |S Nr	   r   argskwr   r   r   _makeOne   s    zTestSchemaField._makeOnec                 C   sV   |  dd}| |jd | |jd | |jd | |jd  | |jd  d S )NtestSTRINGNULLABLEr   assertEqualname
field_typemodedescriptionfieldsr   fieldr   r   r   test_ctor_defaults   s    z"TestSchemaField.test_ctor_defaultsc                 C   s\   | j ddddd}| |jd | |jd | |jd | |jd | |jd  d S Nr   r   REQUIREDTestingr   r   r   r   r   r   r   test_ctor_explicit#   s    
z"TestSchemaField.test_ctor_explicitc                 C   s:  | j dd|  dd|  ddgd}| |jd | |jd | |jd | |jd  | t|jd | |jd	 jd | |jd	 jd | |jd	 jd | |jd	 jd  | |jd	 jd  | |jd
 jd | |jd
 jd | |jd
 jd | |jd
 jd  | |jd
 jd  d S )NZphone_numberRECORD	area_coder   local_numberr   r      r      )r   r   r   r   r   r   lenr   r   r   r   r   test_ctor_subfields,   s(    

z#TestSchemaField.test_ctor_subfieldsc                 C   s(   |  dd}|  dd}| || d S )Nr   r   otherr   ZassertNotEqualr   r   r*   r   r   r   test___eq___name_mismatch@   s    z)TestSchemaField.test___eq___name_mismatchc                 C   s(   |  dd}|  dd}| || d S )Nr   r   INTEGERr+   r,   r   r   r   test___eq___field_type_mismatchE   s    z/TestSchemaField.test___eq___field_type_mismatchc                 C   s0   | j dddd}| j dddd}| || d S )Nr   r   r   r   r   r+   r,   r   r   r   test___eq___mode_mismatchJ   s    z)TestSchemaField.test___eq___mode_mismatchc                 C   s0   | j dddd}| j dddd}| || d S )Nr   r   r   )r   Otherr+   r,   r   r   r    test___eq___description_mismatchO   s    z0TestSchemaField.test___eq___description_mismatchc                 C   sL   |  dd}|  dd}| j dd|gd}| j dd|gd}| || d S Nsub1r   sub2r   r"   r%   r+   r   r5   r6   r   r*   r   r   r   test___eq___fields_mismatchT   s
    z+TestSchemaField.test___eq___fields_mismatchc                 C   s4   | j ddddd}| j ddddd}| || d S r   r   r   r,   r   r   r   test___eq___hit[   s    

zTestSchemaField.test___eq___hitc                 C   s4   | j ddddd}| j ddddd}| || d S )Nr   r   r   r   r    stringr9   r,   r   r   r   !test___eq___hit_case_diff_on_typeb   s    

z1TestSchemaField.test___eq___hit_case_diff_on_typec                 C   sP   |  dd}|  dd}| j dd||gd}| j dd||gd}| || d S r4   r9   r7   r   r   r   test___eq___hit_w_fieldsi   s
    z(TestSchemaField.test___eq___hit_w_fieldsN)__name__
__module____qualname__r	   r   r   r!   r)   r-   r/   r1   r3   r8   r:   r<   r=   r   r   r   r   r      s   	r   c                   @   s   e Zd Zdd Zdd ZdS )_SchemaBasec                 C   s>   |  |j|d  |  |j|d  |  |j|dd d S )Nr   typer   r   )r   r   r   r   get)r   r   r_fieldr   r   r   _verify_fields   s    z_SchemaBase._verify_fieldc                 C   sD   |d d }|  t|t| t||D ]\}}| || q*d S )Nschemar   )r   r(   ziprE   )r   rF   resourceZr_fieldsr   rD   r   r   r   _verifySchemax   s    z_SchemaBase._verifySchemaN)r>   r?   r@   rE   rI   r   r   r   r   rA   q   s   rA   c                   @   s  e Zd Zd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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 Z/dXdY Z0dZd[ Z1d\d] Z2d^d_ Z3d`da Z4dbdc Z5ddde Z6dfdg Z7dhdi Z8djdk Z9dldm Z:dndo Z;dpdq Z<drds Z=dtdu Z>dvS )w	TestTableprojectzdataset-namez
table-namec                 C   s   ddl m} |S )Nr   )Table)r   rL   )r   rL   r   r   r   r	      s    zTestTable._getTargetClassc                 O   s   |   |i |S r
   r   r   r   r   r   r      s    zTestTable._makeOnec                 C   sd   dd l }ddlm} d| _|j | jj|d| _d| _d| j| j	| j
f | _d| _d| _d	| _d S )
Nr   UTCNblAtzinfoETAG%s:%s:%sz#http://example.com/path/to/resource90  C   )datetimegcloud._helpersrN   WHEN_TSutcfromtimestampreplaceWHENrR   PROJECTDS_NAME
TABLE_NAMETABLE_IDRESOURCE_URL	NUM_BYTESNUM_ROWS)r   rV   rN   r   r   r   _setUpConstants   s    zTestTable._setUpConstantsc                 C   s^   |    | jd | j| j| jdddddddd	ddgid
| j| jd d| j| j| jddS )Ni  Z	projectIdZ	datasetIdZtableIdr   	full_namer   r   r   rB   r   ager.   rR   ZUSTABLE)creationTimetableReferencerF   etagidlastModifiedTimelocationselfLinknumRowsnumBytesrB   )	rc   rX   r\   r]   r^   r_   r`   rb   ra   r   r   r   r   _makeResource   s&    

zTestTable._makeResourcec                 C   s   d|v r|  |j| j n|  |jd  d|v rB|  |j| j n|  |jd  d|v rj|  |j| j n|  |jd  d|v r|  |j| j n|  |jd  d|v r|  |j	| j
 n|  |j	d  |  |j| j |  |jd|vrdnd d S )	Nri   rk   rp   rq   ro   viewrh   VIEW)r   createdr[   rk   rR   num_rowsrb   	num_bytesra   	self_linkr`   table_idr_   
table_typer   tablerH   r   r   r   !_verifyReadonlyResourceProperties   s&    z+TestTable._verifyReadonlyResourcePropertiesc                 C   s   |  || d|v r&| |j| j n| |jd  | |j|d | |j|d | |j|d d|v r| |j|d d  n| |jd  d|v r| 	|j
| n| |j
g  d S )NexpirationTimer   friendlyNamern   rt   queryrF   )r~   r   expiresEXP_TIMEr   rC   friendly_namern   
view_queryrI   rF   r|   r   r   r   _verifyResourceProperties   s    z#TestTable._verifyResourcePropertiesc                 C   sF  t | j}t|}| | j|}| |j| j | |j|u  | |j	| j | |j
| j | |jd| j| j| jf  | |jg  | |jd  | |jd  | |jd  | |jd  | |jd  | |jd  | |jd  | |jd  | |jd  | |jd  | |jd  | |jd  | |jd  d S )Nz"/projects/%s/datasets/%s/tables/%s)_Clientr\   _Datasetr   r^   r   r   
assertTrue_datasetrK   Zdataset_namer]   pathrF   rv   rk   modifiedrx   rw   ry   rz   r{   r   r   r   rn   r   r   clientdatasetr}   r   r   r   	test_ctor   s6    
zTestTable.test_ctorc                 C   sf   ddl m} t| j}t|}|dddd}|dddd}| j| j|||gd	}| |j||g d S )
Nr   r   re   r   r   r0   rg   r.   rF   )	r   r   r   r\   r   r   r^   r   rF   )r   r   r   r   re   rg   r}   r   r   r   test_ctor_w_schema  s    

zTestTable.test_ctor_w_schemac                 C   s   t | j}t|}| | j|}| |jd  d}d|i|_| |j| dt|i|_| |j| ddi|_| 	t
 t|d W d    n1 s0    Y  d S )Ni9  rq   xrx   )r   r\   r   r   r^   r   rx   _propertiesstrassertRaises
ValueErrorgetattr)r   r   r   r}   rx   r   r   r   test_num_bytes_getter  s    


zTestTable.test_num_bytes_getterc                 C   s   t | j}t|}| | j|}| |jd  d}d|i|_| |j| dt|i|_| |j| ddi|_| 	t
 t|d W d    n1 s0    Y  d S )N*   rp   r   rw   )r   r\   r   r   r^   r   rw   r   r   r   r   r   )r   r   r   r}   rw   r   r   r   test_num_rows_getter!  s    


zTestTable.test_num_rows_getterc                 C   sV   t | j}t|}| | j|}| t t |_W d    n1 sH0    Y  d S r
   )	r   r\   r   r   r^   r   	TypeErrorobjectrF   r   r   r   r   test_schema_setter_non_list7  s
    
z%TestTable.test_schema_setter_non_listc                 C   st   ddl m} t| j}t|}| | j|}|dddd}| t |t	 g|_
W d    n1 sf0    Y  d S )Nr   r   re   r   r   r0   )r   r   r   r\   r   r   r^   r   r   r   rF   )r   r   r   r   r}   re   r   r   r    test_schema_setter_invalid_field>  s    
z*TestTable.test_schema_setter_invalid_fieldc                 C   sh   ddl m} t| j}t|}| | j|}|dddd}|dddd}||g|_| |j||g d S )	Nr   r   re   r   r   r0   rg   r.   )	r   r   r   r\   r   r   r^   rF   r   )r   r   r   r   r}   re   rg   r   r   r   test_schema_setterG  s    

zTestTable.test_schema_setterc              	   C   sd  dd l }ddlm} ddlm} |j dddddd	|d
}|j dddddd|d
}d| j| j| jf }d| j| j| jf }t| j}t|}	| 	| j|	}
|||
j
d< d|
j
d< |||
j
d< d|
j
d< d|
j
d< ||
j
d< ||
j
d< d|
j
d< | |
j| | |
jd | |
j| | |
jd | |
jd | |
j| | |
j| | |
jd d S )Nr   rM   _millis                 rP      /      rS   z4http://example.com/projects/%s/datasets/%s/tables/%sri   rR   rk   rm   rT   rq   B   rp   ro   rl   rh   rB   )rV   rW   rN   r   r\   r]   r^   r   r   r   r   r   rv   rk   r   rx   rw   ry   rz   r{   )r   rV   rN   r   CREATEDZMODIFIEDr_   URLr   r   r}   r   r   r   test_props_set_by_serverQ  s<    






z"TestTable.test_props_set_by_serverc                 C   sT   t | j}t|}| | j|}| t d|_W d    n1 sF0    Y  d S NrT   )r   r\   r   r   r^   r   r   r   r   r   r   r   !test_description_setter_bad_valueq  s
    
z+TestTable.test_description_setter_bad_valuec                 C   s8   t | j}t|}| | j|}d|_| |jd d S )NDESCRIPTION)r   r\   r   r   r^   r   r   r   r   r   r   test_description_setterx  s
    
z!TestTable.test_description_setterc                 C   sV   t | j}t|}| | j|}| t t |_W d    n1 sH0    Y  d S r
   )	r   r\   r   r   r^   r   r   r   r   r   r   r   r   test_expires_setter_bad_value  s
    
z'TestTable.test_expires_setter_bad_valuec                 C   sb   dd l }ddlm} |j ddddd|d}t| j}t|}| | j|}||_| 	|j| d S )	Nr   rM   r   r         '   rP   )
rV   rW   rN   r   r\   r   r   r^   r   r   )r   rV   rN   r[   r   r   r}   r   r   r   test_expires_setter  s    
zTestTable.test_expires_setterc                 C   sT   t | j}t|}| | j|}| t d|_W d    n1 sF0    Y  d S r   )r   r\   r   r   r^   r   r   r   r   r   r   r   #test_friendly_name_setter_bad_value  s
    
z-TestTable.test_friendly_name_setter_bad_valuec                 C   s8   t | j}t|}| | j|}d|_| |jd d S )NZFRIENDLY)r   r\   r   r   r^   r   r   r   r   r   r   test_friendly_name_setter  s
    
z#TestTable.test_friendly_name_setterc                 C   sT   t | j}t|}| | j|}| t d|_W d    n1 sF0    Y  d S r   )r   r\   r   r   r^   r   r   rn   r   r   r   r   test_location_setter_bad_value  s
    
z(TestTable.test_location_setter_bad_valuec                 C   s8   t | j}t|}| | j|}d|_| |jd d S )NLOCATION)r   r\   r   r   r^   rn   r   r   r   r   r   test_location_setter  s
    
zTestTable.test_location_setterc                 C   sT   t | j}t|}| | j|}| t d|_W d    n1 sF0    Y  d S r   )r   r\   r   r   r^   r   r   r   r   r   r   r    test_view_query_setter_bad_value  s
    
z*TestTable.test_view_query_setter_bad_valuec                 C   s8   t | j}t|}| | j|}d|_| |jd d S Nzselect * from foor   r\   r   r   r^   r   r   r   r   r   r   test_view_query_setter  s
    
z TestTable.test_view_query_setterc                 C   s<   t | j}t|}| | j|}d|_|`| |jd  d S r   r   r   r   r   r   test_view_query_deleter  s    
z!TestTable.test_view_query_deleterc                 C   s`   |    t| j}t|}i }|  }| t ||| W d    n1 sR0    Y  d S r
   )rc   r   r\   r   r	   r   KeyErrorfrom_api_repr)r   r   r   RESOURCEklassr   r   r   #test_from_api_repr_missing_identity  s    
z-TestTable.test_from_api_repr_missing_identityc                 C   s   |    t| j}t|}d| j| j| jf | j| j| jddd}|  }|||}| |j	| j | 
|j|u  | || d S )NrS   rd   rh   )rl   rj   rB   )rc   r   r\   r   r]   r^   r	   r   r   r   r   r   r   r   r   r   r   r   r}   r   r   r   test_from_api_repr_bare  s    
	z!TestTable.test_from_api_repr_barec                 C   sP   t | j}t|}|  }|  }|||}| |jj|u  | 	|| d S r
   )
r   r\   r   rs   r	   r   r   r   _clientr   r   r   r   r   test_from_api_repr_w_properties  s    
z)TestTable.test_from_api_repr_w_propertiesc                 C   s`   t  }t| j|d}t|}| | j|}| t |  W d    n1 sR0    Y  d S )NrK   
connection)	_Connectionr   r\   r   r   r^   r   r   create)r   connr   r   r}   r   r   r   #test_create_no_view_query_no_schema  s    z-TestTable.test_create_no_view_query_no_schemac                 C   s  ddl m} d| j| jf }|  }t|}t| j|d}t|}|dddd}|d	d
dd}| j| j	|||gd}	|	
  | t|jd |jd }
| |
d d | |
d d|  | j| j| j	ddddddd	d
ddgid}| |
d | | |	| d S )Nr   r   projects/%s/datasets/%s/tablesr   re   r   r   r0   rg   r.   r   r'   methodPOSTr   /%srd   r   rf   rj   rF   data)r   r   r\   r]   rs   r   r   r   r   r^   r   r   r(   
_requestedr   r   r   PATHr   r   r   r   re   rg   r}   reqSENTr   r   r   test_create_w_bound_client  s6    



	z$TestTable.test_create_w_bound_clientc              	   C   s  dd l }ddlm} ddlm} ddlm} d| j| jf }d}d}d}|  }	||	d	< ||	d
< |j dddddd|d| _	|| j	|	d< i |	d< ||	d d< d|	d< t
 }
t| j|
d}t
|	}t| j|d}t|d}|dddd}|dddd}| j| j|||gd}||_||_||_|j|d | t|
jd | t|jd |jd }| |d d  | |d! d"|  | j| j| jd#||d|id$}| |d% | | ||	 d S )&Nr   rM   r   r   r   r   TITLE%select fullname, age from person_agesr   r   r      r'      ;   rP   r   rt   r   ru   rB   r   r   re   r   r   r0   rg   r.   r   rF   r   r   r   r   rd   )rj   r   r   rt   r   )rV   rW   rN   r   r   r   r\   r]   rs   r   r   r   r   r   r^   r   r   r   r   r   r(   r   r   )r   rV   rN   r   r   r   r   r   QUERYr   conn1client1conn2client2r   re   rg   r}   r   r   r   r   r   test_create_w_alternate_client  s^    


	z(TestTable.test_create_w_alternate_clientc                 C   s  ddl m} d| j| jf }|  }|d= |d= d | _t|}t| j|d}t|}|ddd	d
}|ddd	d
}| j	| j
|||gd}	|	  | t|jd |jd }
| |
d d | |
d d|  | j| j| j
ddddd	dddd	dgid}| |
d | | |	| d S )Nr   r   r   ri   rm   r   re   r   r   r0   rg   r.   r   r'   r   r   r   r   rd   r   rf   r   r   )r   r   r\   r]   rs   r[   r   r   r   r   r^   r   r   r(   r   r   r   r   r   r   'test_create_w_missing_output_propertiesB  s<    



	z1TestTable.test_create_w_missing_output_propertiesc                 C   s   d| j | j| jf }t }t| j |d}t|}| j| j|d}| |  | 	t
|jd |jd }| 	|d d | 	|d d	|  | 	|d
 ddi d S )N!projects/%s/datasets/%s/tables/%sr   r   r'   r   r   GETr   r   query_paramsr   rl   )r\   r]   r^   r   r   r   r   ZassertFalseexistsr   r(   r   r   r   r   r   r   r}   r   r   r   r   test_exists_miss_w_bound_cliente  s    
z)TestTable.test_exists_miss_w_bound_clientc           	      C   s   d| j | j| jf }t }t| j |d}ti }t| j |d}t|}| j| j|d}| |j|d | 	t
|jd | 	t
|jd |jd }| 	|d d | 	|d	 d
|  | 	|d ddi d S )Nr   r   r   r   r   r'   r   r   r   r   r   r   rl   )r\   r]   r^   r   r   r   r   r   r   r   r(   r   	r   r   r   r   r   r   r   r}   r   r   r   r   "test_exists_hit_w_alternate_clientu  s     
z,TestTable.test_exists_hit_w_alternate_clientc                 C   s   d| j | j| jf }|  }t|}t| j |d}t|}| j| j|d}|  | 	t
|jd |jd }| 	|d d | 	|d d	|  | || d S )
Nr   r   r   r'   r   r   r   r   r   r\   r]   r^   rs   r   r   r   r   reloadr   r(   r   r   )r   r   r   r   r   r   r}   r   r   r   r   test_reload_w_bound_client  s    
z$TestTable.test_reload_w_bound_clientc           
      C   s   d| j | j| jf }|  }t }t| j |d}t|}t| j |d}t|}| j| j|d}|j|d | 	t
|jd | 	t
|jd |jd }	| 	|	d d | 	|	d	 d
|  | || d S )Nr   r   r   r   r   r'   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r}   r   r   r   r   test_reload_w_alternate_client  s"    
z(TestTable.test_reload_w_alternate_clientc                 C   sp   |   }t|}t| j|d}t|}| j| j|d}| t |j	dd W d    n1 sb0    Y  d S )Nr   r   ZBOGUS)r   )
rs   r   r   r\   r   r   r^   r   r   patch)r   r   r   r   r   r}   r   r   r   test_patch_w_invalid_expiration  s    z)TestTable.test_patch_w_invalid_expirationc                 C   s   d| j | j| jf }d}d}|  }||d< ||d< t|}t| j |d}t|}| j| j|d}|j||d d | 	t
|jd	 |jd
 }	| 	|	d d ||d d}
| 	|	d |
 | 	|	d d|  | || d S )Nr   r   r   r   r   r   r   )r   r   r   r'   r   r   PATCH)r   r   rt   r   r   r   r\   r]   r^   rs   r   r   r   r   r   r   r(   r   r   r   r   r   r   r   r   r   r   r}   r   r   r   r   r   test_patch_w_bound_client  s4    
z#TestTable.test_patch_w_bound_clientc              	   C   s  dd l }ddlm} ddlm} ddlm} d| j| j| jf }d}d}| 	 }d|i|d	< d
|d< ||d< |j dddddd|d| _
|| j
|d< t }	t| j|	d}
t|}t| j|d}t|
}| j| j|d}|dddd}|dddd}|j|||| j
||gd | t|	jd | t|jd |jd }| |d d | |d  d!|  d|i||| j
d"dddd#dddd#gid$}| |d% | | || d S )&Nr   rM   r   r   r   r   EUr   rt   ru   rB   rn   r   r   r'   r   r   rP   r   r   r   re   r   r   r0   rg   r.   r   )r   r   rn   r   rF   r   r   r   r   r   rf   )rt   rn   r   rF   r   )rV   rW   rN   r   r   r   r\   r]   r^   rs   r   r   r   r   r   r   r   r(   r   r   )r   rV   rN   r   r   r   r   r   r   r   r   r   r   r   r}   re   rg   r   r   r   r   r   test_patch_w_alternate_client  sV    




z'TestTable.test_patch_w_alternate_clientc                 C   s   d| j | j| jf }d}d}|  }||d< ||d< t|}t| j |d}t|}| j| j|d}|jd d | 	t
|jd	 |jd
 }	| 	|	d d dd i}
| 	|	d |
 | 	|	d d|  | || d S )Nr   r   r   r   r   r   r   r   r'   r   r   r   rF   r   r   r   r   r   r   r   r   test_patch_w_schema_None  s(    
z"TestTable.test_patch_w_schema_Nonec                 C   s8  ddl m} d| j| j| jf }d}d}|  }||d< ||d< t|}t| j|d}t|}|d	d
dd}	|dddd}
| j	| j||	|
gd}||_
||_|  | t|jd |jd }| |d d | j| j| jddd	d
ddddddgi||d}| |d | | |d d|  | || d S )Nr   r   r   r   r   r   r   r   re   r   r   r0   rg   r.   r   r'   r   PUTrd   r   rf   )rj   rF   r   r   r   r   r   )r   r   r\   r]   r^   rs   r   r   r   r   r   r   updater   r(   r   r   )r   r   r   r   r   r   r   r   r   re   rg   r}   r   r   r   r   r   test_update_w_bound_client  sJ    



z$TestTable.test_update_w_bound_clientc              	   C   s  dd l }ddlm} ddlm} d| j| j| jf }d}d}d}|  }d|d< ||d	< |j d
ddddd|d| _|| j|d< d|i|d< d|d< t	 }	t
| j|	d}
t	|}t
| j|d}t|
}| j| j|d}||_||_| j|_||_|j|d | t|	jd | t|jd |jd }| |d d | |d d|  | j| j| jd|| jdd|id}| |d | | || d S )Nr   rM   r   r   rT   r   r   ZdefaultTableExpirationMsrn   r   r   r'   r   r   rP   r   r   rt   ru   rB   r   r   r   r   r  r   r   rd   )rj   r   rn   rt   r   )rV   rW   rN   r   r\   r]   r^   rs   r   r   r   r   r   Zdefault_table_expiration_msrn   r   r   r  r   r(   r   r   )r   rV   rN   r   r   ZDEF_TABLE_EXPr   r   r   r   r   r   r   r   r}   r   r   r   r   r   test_update_w_alternate_clientA  sX    
	z(TestTable.test_update_w_alternate_clientc                 C   s   d| j | j| jf }ti }t| j |d}t|}| j| j|d}|  | t	|j
d |j
d }| |d d | |d d	|  d S )
Nr   r   r   r'   r   r   DELETEr   r   r\   r]   r^   r   r   r   r   deleter   r(   r   r   r   r   r   test_delete_w_bound_clientq  s    
z$TestTable.test_delete_w_bound_clientc           	      C   s   d| j | j| jf }t }t| j |d}ti }t| j |d}t|}| j| j|d}|j|d | t	|j
d | t	|j
d |j
d }| |d d | |d	 d
|  d S )Nr   r   r   r   r   r'   r   r  r   r   r  r   r   r   r   test_delete_w_alternate_client  s    
z(TestTable.test_delete_w_alternate_clientc                 C   s,  dd l }ddlm} ddlm} d| j| j| jf }d}|j |j	|d}||j
dd }||j
d	d }d
}	d}
dd }t|	|
dddiddid||igidddiddid||d igidddiddid||d	 igidddidd idd igigd}t|}t| j|d}t|}|dddd}|dddd}|d d!dd}| j| j||||gd"}| \}}}| t|d# | |d dd$|f | |d dd%|f | |d	 dd&|f | |d' d( | ||	 | ||
 | t|jd |jd }| |d) d* | |d+ d,|  d S )-Nr   rM   r   &projects/%s/datasets/%s/tables/%s/datarO   rP   r'   secondsr&     TOKENc                 S   s
   d| f S )Nz%0.15Er   )Zts_floatr   r   r   _bigquery_timestamp_float_repr  s    zPTestTable.test_fetch_data_w_bound_client.<locals>._bigquery_timestamp_float_reprfvPhred Phlyntstone32Bharney Rhubble33Wylma Phlyntstone29Bhettye RhubbleZ	totalRows	pageTokenrowsr   re   r   r   r0   rg   r.   r   joined	TIMESTAMPr          !   r      )r  NNr   r   r   r   )rV   rW   rN   r   r   r\   r]   r^   rY   rZ   	timedeltar   r   r   r   r   
fetch_datar   r(   r   )r   rV   rN   r   r   rX   r[   ZWHEN_1ZWHEN_2ROWSr  r  DATAr   r   r   re   rg   r  r}   r  
total_rows
page_tokenr   r   r   r   test_fetch_data_w_bound_client  sx    


z(TestTable.test_fetch_data_w_bound_clientc              
   C   s  ddl m} d| j| j| jf }d}d}dddd	idd
iddiddigidddiddiddiddigidddiddiddiddigidddiddidd idd igigi}t }t| j|d}t|}t| j|d}	t|}
|dddd}|dddd}|dddd}|d d!dd}| j| j|
||||gd"}|j	|	||d#\}}}| 
t|d$ | 
|d d% | 
|d& d' | 
|d( d) | 
|d* d+ | 
|d  | 
|d  | 
t|jd | 
t|jd& |jd }| 
|d, d- | 
|d. d/|  | 
|d0 ||d1 d S )2Nr   r   r  
   r  r  r  r  r  r  truez	3.1415926r  r  false1.414r  r  z2.71828r  27r   re   r   r   r0   rg   r.   voterBOOLEANr   scoreFLOATr   )r   Zmax_resultsr(  r  )r  r   TgJM!	@r'   )r  r!  F9v?r&   )r  r   Tg	@r"  )r     NNr   r   r   r   r   )Z
maxResultsr  r   r   r\   r]   r^   r   r   r   r   r$  r   r(   r   )r   r   r   MAXr  r&  r   r   r   r   r   re   rg   r/  r1  r}   r  r'  r(  r   r   r   r   "test_fetch_data_w_alternate_client  s    



z,TestTable.test_fetch_data_w_alternate_clientc              
   C   s  ddl m} d| j| j| jf }d}d}||dddd	gidddd
dgidddgigigigigd}t|}t| j|d}t|}|dddd}	|ddd}
|ddd}|ddd|
|gd}| j| j||	|gd}|	 \}}}| 
t|d | 
|d d dd	g | 
|d d ddgddgd g | 
|| | 
|| | 
t|jd |jd }| 
|d! d" | 
|d# d$|  d S )%Nr   r   r  r  r  r  r  redgreen12z3.1415r-  r  r   colorr   REPEATEDr0   indexr.   r1  r2  structr"   r   r   r   r'   r&   o!	@r3  r>  r1  r   r   r   r   r5  )r   r   r   r%  r  r&  r   r   r   re   r>  r1  r?  r}   r  r'  r(  r   r   r   r   !test_fetch_data_w_repeated_fields  sP    




z+TestTable.test_fetch_data_w_repeated_fieldsc                 C   s  ddl m} d| j| j| jf }d}d}||dddidddd	idd
iddigiigidddiddddiddiddigiigidddidd igigd}t|}t| j|d}t|}|dddd}	|ddd}
|ddd}|ddd}|ddd|
||gd}| j| j||	|gd}|	 \}}}| 
t|d  | 
|d d d | 
|d d d	d
dd! | 
|d d d | 
|d d dddd! | 
|d d d | 
|d d d  | 
|| | 
|| | 
t|jd |jd }| 
|d" d# | 
|d$ d%|  d S )&Nr   r   r  r  r  r  r  r  800555-1212r'   r  877768-5309r&   r  r  r   re   r   r   r0   r#   r$   rankr.   phoner"   r   r@  r   r"  r#   r$   rH  r   r   r   r   r5  )r   r   r   r%  r  r&  r   r   r   re   r#   r$   rH  rI  r}   r  r'  r(  r   r   r   r   test_fetch_data_w_record_schemaD  sn    

z)TestTable.test_fetch_data_w_record_schemac                    s~  dd l }ddlm} ddlm  ddlm} d}|j |j|d}d| j| j	| j
f }ti }t| j|d}t|}	|d	d
dd}
|dddd}|dddd}| j| j
|	|
||gd}dd|fdd||jdd fdd||jdd fdg} fdddfd d!|D i}||}| t|d | t|jd |jd }| |d" d# | |d$ d%|  | |d& | d S )'Nr   rM   _microseconds_from_datetimer   rO   rP   +projects/%s/datasets/%s/tables/%s/insertAllr   re   r   r   r0   rg   r.   r  r  r   r   r  r   r  r!  r'   r  r  r   r&   r  r4  Nc                    s4   d }| d d ur  | d d }| d | d |dS )Nr&   gư>r   r'   re   rg   r  r   )rowr  rL  r   r   	_row_data  s    z<TestTable.test_insert_data_w_bound_client.<locals>._row_datar  c                    s   g | ]}d  |iqS jsonr   .0rQ  rR  r   r   
<listcomp>      z=TestTable.test_insert_data_w_bound_client.<locals>.<listcomp>r   r   r   r   r   )rV   rW   rN   rM  r   r   rY   rZ   r\   r]   r^   r   r   r   r   r#  insert_datar   r(   r   )r   rV   rN   r   rX   r[   r   r   r   r   re   rg   r  r}   r%  r   errorsr   r   )rM  rR  r   test_insert_data_w_bound_client}  sF    
	

z)TestTable.test_insert_data_w_bound_clientc                    s  ddl m} d| j| j| jf }dddddd	d
gdgi}t }t| j|d}t|}t| j|d}t|}|dddd}	|dddd}
|dddd}| j| j||	|
|gd}g d}dd  ddd fddt	|D d}|j
||dd t	|D dddd }| t|d | |d d! d | t|d d" d | |d d" d |d d d" d  | t|jd | t|jd |jd }| |d# d$ | |d% d&|  | |d' | d S )(Nr   r   rN  ZinsertErrorsr'   ZREASONr   INFOZMESSAGE)reasonrn   Z	debugInfomessage)r>  r[  r   re   r   r   r0   rg   r.   r/  r0  r   r   ))r  r   T)r  r!  F)r  r   T)r  r4  Tc                 S   s   | d | d | d dS )Nr   r'   r&   )re   rg   r/  r   rQ  r   r   r   rR    s    z@TestTable.test_insert_data_w_alternate_client.<locals>._row_dataTZ20160303c                    s   g | ]\}}| |d qS ))ZinsertIdrT  r   )rV  r>  rQ  rW  r   r   rX    s   zATestTable.test_insert_data_w_alternate_client.<locals>.<listcomp>)ZskipInvalidRowsignoreUnknownValuesZtemplateSuffixr  c                 S   s   g | ]\}}|qS r   r   )rV  r>  _r   r   r   rX    rY  )r   r  Zrow_idsZskip_invalid_rowsignore_unknown_valuesZtemplate_suffixr>  r[  r   r   r   r   r   )r   r   r\   r]   r^   r   r   r   r   	enumeraterZ  r   r(   r   )r   r   r   ZRESPONSEr   r   r   r   r   re   rg   r/  r}   r%  r   r[  r   r   rW  r   #test_insert_data_w_alternate_client  sn    


	
z-TestTable.test_insert_data_w_alternate_clientc                    s8  ddl m} d| j| j| jf }ti }t| j|d}t|}|dddd}|d	d
d}|ddd}|ddd||gd}	| j| j|||	gd}
ddgddgddgdgfg}dd  d fdd|D i}|
	|}| 
t|d | 
t|jd |jd }| 
|d d | 
|d d |  | 
|d! | d S )"Nr   r   rN  r   r<  r   r=  r0   r>  r.   r1  r2  r?  r"   r@  r   r8  r9  r'   r&   rA  r3  rB  c                 S   s   | d | d dS )Nr   r'   )r<  r?  r   r`  r   r   r   rR    s    z?TestTable.test_insert_data_w_repeated_fields.<locals>._row_datar  c                    s   g | ]}d  |iqS rS  r   rU  rW  r   r   rX    rY  z@TestTable.test_insert_data_w_repeated_fields.<locals>.<listcomp>r   r   r   r   r   r   r   r\   r]   r^   r   r   r   r   rZ  r   r(   r   )r   r   r   r   r   r   re   r>  r1  r?  r}   r%  r   r[  r   r   rW  r   "test_insert_data_w_repeated_fields  s8    


z,TestTable.test_insert_data_w_repeated_fieldsc                    sJ  ddl m} d| j| j| jf }ti }t| j|d}t|}|dddd}|d	dd}|d
dd}|ddd}	|ddd|||	gd}
| j| j|||
gd}dddddfdddddfdg}dd  d fdd |D i}|	|}| 
t|d | 
t|jd |jd }| 
|d! d" | 
|d# d$|  | 
|d% | d S )&Nr   r   rN  r   re   r   r   r0   r#   r$   rH  r.   rI  r"   r   r@  r   r  rD  rE  r'   rJ  r  rF  rG  r&   )r  Nc                 S   s   | d | d dS )Nr   r'   )re   rI  r   r`  r   r   r   rR  (  s    z=TestTable.test_insert_data_w_record_schema.<locals>._row_datar  c                    s   g | ]}d  |iqS rS  r   rU  rW  r   r   rX  -  rY  z>TestTable.test_insert_data_w_record_schema.<locals>.<listcomp>r   r   r   r   r   rf  )r   r   r   r   r   r   re   r#   r$   rH  rI  r}   r%  r   r[  r   r   rW  r    test_insert_data_w_record_schema  sJ    



z*TestTable.test_insert_data_w_record_schemac                 C   s   G dd dt }t }t| j|d}t|}| }| j| j|d}| t  |j	|ddd W d    n1 sr0    Y  d S )Nc                   @   s   e Zd ZdZdS )zLTestTable.test_upload_from_file_text_mode_file_failure.<locals>.TextModeFilerN)r>   r?   r@   r   r   r   r   r   TextModeFile;  s   rj  r   r   CSVr  size)
r   r   r   r\   r   r   r^   r   r   upload_from_file)r   rj  r   r   r   file_objr}   r   r   r   ,test_upload_from_file_text_mode_file_failure9  s    z6TestTable.test_upload_from_file_text_mode_file_failurec                 C   sp   t  }t| j|d}t|}t }| j| j|d}| t  |j	|dd d W d    n1 sb0    Y  d S )Nr   r   rk  rl  )
r   r   r\   r   r   r   r^   r   r   rn  )r   r   r   r   ro  r}   r   r   r   "test_upload_from_file_size_failureF  s    z,TestTable.test_upload_from_file_size_failurec              	   K   s"  dd l }dd l}ddlm} ddlm} ddlm} ddlm	} d}|j
|j|d}	d| jf }
d	|i}t|d
f}t| j|d}t }d|v r||d _n||_t|}|dddd}|dddd}|dddd}| j| j||||gd}dd|	fdd|	|jdd fdd|	|jdd fd g}| }t|jd!.}||}|d" || W d    n1 sp0    Y  t|jd#N}| }|d$d%}|rt||d&< |j|d'fd(d)i|}W d    n1 s0    Y  W d    n1 s0    Y  | ||u  |jj |
|fS )*Nr   OKrM   )_NamedTemporaryFiler   rO   rP   zprojects/%s/jobsstatus   {}r   r   re   r   r   r0   rg   r.   r  r  r   r   r  r   r  r!  r'   r  r  r   r&   rO  wrP  rb_explicit_sizeFrm  rk  rewindT)!csvrV   six.moves.http_clientrs  rW   rN   gcloud._testingrt  r   r   rY   rZ   r\   r   r   r   _jobr   r   r^   r#  openr   writerwriterow	writerowsreadpopr(   rn  r   httpr   )r   r   r{  rV   rs  rN   rt  r   rX   r[   r   responser   r   Zexpected_jobr   re   rg   r  r}   r%  tempro  r  BODYZexplicit_sizeZjobr   r   r   _upload_from_file_helperO  sf    


*Fz"TestTable._upload_from_file_helperc                 C   s2  dd l }ddlm} ddlm} ddlm} ddlm} |  \}}}| }	| 	t
|d |d }
| 	|
d d |
d	 }||\}}}}}| 	|d
 | 	|d | 	|d|  | 	t||ddi dd |
d d dD \}}| 	|d | |d | |d d||t
dd  }|
d |dd }| 	t
|d |	|d  }| 	t|jddd ||j}|d d  }| j| j| jd!}| 	|d" | | 	|d# d$ |	|d  }| 	t|jd%d&dd' |d( }d)d | D }|j  }| 	|| d S )*Nr   	parse_qslurlsplit)	_to_bytes)_email_chunk_parserr'   r   r   urir  example.comr   
uploadType	multipartc                 S   s   g | ]}|  qS r   strip)rV  r   r   r   r   rX    s   zLTestTable.test_upload_from_file_w_bound_client_multipart.<locals>.<listcomp>headerscontent-type;zmultipart/relatedzboundary="==z=="s   --z
boundary="bodyr&   application/jsonz1.0)Content-TypeMIME-Versionconfigurationloadrd   destinationTablesourceFormatrk  application/octet-streambinary)r  zContent-Transfer-Encodingr  asciic                 S   s   g | ]}|  qS r   r  )rV  liner   r   r   rX    rY  )rT  six.moves.urllib.parser  r  rW   r  Zgcloud.streaming.test_transferr  r  r   r(   dictsplitr   
startswithendswithr  _headersloads_payloadr\   r]   r^   decoderstrip
splitlines)r   rT  r  r  r  r  	requestedr   r  Zparse_chunkr   r  schemenetlocr   qsrb  ctypeboundarydividerchunksZtext_msgmetadataload_configDESTINATION_TABLEZapp_msgr  
body_linesZpayload_linesr   r   r   .test_upload_from_file_w_bound_client_multipart  sh    
z8TestTable.test_upload_from_file_w_bound_client_multipartc                 C   s  dd l }ddlm} ddlm} ddlm} ddlm} ddlm	} d}||d}d	|i}	t
|d
f|	d
f}
t| j|
d}G dd dt}|||d8 | jdddddddddd|dd\}}}W d    n1 s0    Y  | t|d |
jj}| t|d |d }| |d d |d }||\}}}}}| |d | |d | |d|  | t||dd i | |d! d" d# ||d$ }|d% d& }| j| j| jd'}| |d( | | |d) d* | |d+ d | |d, d | |d- d | |d. d | |d/ d | |d0 d | |d1 d | |d2 d | |d3 d | |d4 d |d }| |d d5 | |d | |d! }t|}| |d6 d7 | |d8 d9|d |f  | |d: d;|f  | |d$ | d S )<Nr   rr  r  r  )_Monkey)r}   zhttps://example.com/upload/test)ru  rn   ru  rv  r   c                   @   s&   e Zd ZdgZdZdZdZdZdZdS )zRTestTable.test_upload_from_file_w_explicit_client_resumable.<locals>._UploadConfigz*/*NTz+/upload/bigquery/v2/projects/{project}/jobs )	r>   r?   r@   acceptmax_sizeZresumable_multipartZresumable_pathZsimple_multipartZsimple_pathr   r   r   r   _UploadConfig  s   r  )r  FZCREATE_IF_NEEDEDutf8,"r'   ZWRITE_APPENDT)Zallow_jagged_rowsZallow_quoted_newlinesZcreate_dispositionencodingZfield_delimiterrc  Zmax_bad_recordsZquote_characterZskip_leading_rowsZwrite_dispositionr   ry  r&   r   r   r  r  r  r   r  Z	resumabler  r  r  r  r  r  rd   r  r  rk  ZallowJaggedRowsZallowQuotedNewlinesZcreateDispositionr  ZfieldDelimiterra  ZmaxBadRecordsquoteZskipLeadingRowsZwriteDispositionr  r  r  zContent-Rangezbytes 0-%d/%dzcontent-lengthz%d)rT  r|  rs  r  r  r  r}  r  Zgcloud.bigqueryr}   r   r   r\   r   r  r   r(   r  r   r  r  r]   r^   )r   rT  rs  r  r  r  ZMUTZUPLOAD_PATHZinitial_responseZupload_responser   r   r  Zorig_requestedr   r  r  r   r  r  r  r   r  rb  r  r  r  r  lengthr   r   r   1test_upload_from_file_w_explicit_client_resumable  s    
*
z;TestTable.test_upload_from_file_w_explicit_client_resumableN)?r>   r?   r@   r\   r]   r^   r	   r   rc   rs   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)  r7  rC  rK  r\  re  rg  rh  rp  rq  r  r  r  r   r   r   r   rJ      sx   
	
 			3#
-'0FB*9/@#*	48rJ   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )Test_parse_schema_resourcec                 C   s   ddl m} ||S )Nr   )_parse_schema_resource)r   r  )r   rH   r  r   r   r   _callFUT  s    z#Test_parse_schema_resource._callFUTc                 C   s    ddddddddddgiiS )	NrF   r   re   r   r   rf   rg   r.   r   rr   r   r   r   rs     s
    

z(Test_parse_schema_resource._makeResourcec                 C   s&   |   }| |d }| || d S )NrF   )rs   r  rI   r   r   rF   r   r   r   $test__parse_schema_resource_defaults!  s    z?Test_parse_schema_resource.test__parse_schema_resource_defaultsc              
   C   sV   |   }|d d ddddddd	d
ddd	gd | |d }| || d S )NrF   r   rI  r"   
REPEATABLErB   r   r   rf   numberr   rB   r   r   rs   appendr  rI   r  r   r   r   %test__parse_schema_resource_subfields&  s$    
z@Test_parse_schema_resource.test__parse_schema_resource_subfieldsc                 C   s>   |   }|d d ddd | |d }| || d S )NrF   r   rI  r   )r   rB   r  r  r   r   r   /test__parse_schema_resource_fields_without_mode5  s    zJTest_parse_schema_resource.test__parse_schema_resource_fields_without_modeN)r>   r?   r@   r  rs   r  r  r  r   r   r   r   r    s
   r  c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Test_build_schema_resourcec                 C   s   ddl m} ||S )Nr   )_build_schema_resource)r   r  )r   rH   r  r   r   r   r  A  s    z#Test_build_schema_resource._callFUTc                 C   sz   ddl m} |dddd}|dddd}| ||g}| t|d	 | |d dddd
 | |d dddd
 d S )Nr   r   re   r   r   r0   rg   r.   r&   rf   r'   r   r   r  r   r(   )r   r   re   rg   rH   r   r   r   test_defaultsE  s"    

z(Test_build_schema_resource.test_defaultsc                 C   s   ddl m} d}|ddd|d}|dd	dd
}| ||g}| t|d | |d ddd|d | |d dd	dd d S )Nr   r   r   re   r   r   r    rg   r.   r0   r&   )r   rB   r   r   r'   rf   r  )r   r   r   re   rg   rH   r   r   r   test_w_descriptionT  s*    

z-Test_build_schema_resource.test_w_descriptionc                 C   s   ddl m} |dddd}|ddd}|ddd}|d	d
d||gd}| ||g}| t|d | |d dddd | |d d	d
dddddddddgd d S )Nr   r   re   r   r   r0   rB   r  rI  r"   r  r@  r&   rf   r'   r  r  )r   r   re   Zph_typeZph_numrI  rH   r   r   r   test_w_subfieldsf  s<    

z+Test_build_schema_resource.test_w_subfieldsN)r>   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S )r   rK   Nc                 C   s   || _ || _d S r
   r   )r   rK   r   r   r   r   __init__  s    z_Client.__init__c                 C   s   | j S r
   )r~  )r   rH   r   r   r   job_from_resource  s    z_Client.job_from_resource)rK   N)r>   r?   r@   r  r  r   r   r   r   r     s   
r   c                   @   s2   e Zd ZejfddZedd Zedd ZdS )r   c                 C   s   || _ || _d S r
   )r   r   )r   r   r   r   r   r   r    s    z_Dataset.__init__c                 C   s   d| j j| jf S )Nz/projects/%s/datasets/%s)r   rK   r   rr   r   r   r   r     s    
z_Dataset.pathc                 C   s   | j jS r
   )r   rK   rr   r   r   r   rK     s    z_Dataset.projectN)	r>   r?   r@   rJ   r]   r  propertyr   rK   r   r   r   r   r     s
   
r   c                   @   s   e Zd Zdd Zdd ZdS )
_Responderc                 G   s   |d d  | _ g | _d S r
   )
_responsesr   r   	responsesr   r   r   r    s    z_Responder.__init__c                 K   s,   | j | | jd | jdd   }| _|S )Nr   r'   )r   r  r  )r   r   r  r   r   r   _respond  s    z_Responder._respondN)r>   r?   r@   r  r  r   r   r   r   r    s   r  c                   @   s   e Zd Zi Zdd ZdS )_HTTPc                 K   s,   t |dr| }| jf ||||d|S )Nr  )r  r   r  r  )hasattrr  r  )r   r  r   r  r  r   r   r   r   request  s    
z_HTTP.requestN)r>   r?   r@   connectionsr  r   r   r   r   r    s   r  c                       s:   e Zd ZdZdZ fddZdd Zdefdd	Z  ZS )
r   zhttp://example.comztesting 1.2.3c                    s   t t| j|  t| | _d S r
   )superr   r  r  r  r  	__class__r   r   r    s    z_Connection.__init__c                 K   sV   ddl m} | j| z | jd | jdd   }| _W n   |dY n0 |S d S )Nr   )NotFoundr'   Zmiss)Zgcloud.exceptionsr  r   r  r  )r   r   r  r  r   r   r   api_request  s     z_Connection.api_requestNc                 C   sT   ddl m} ddl m} ddl m} ||p,i }||\}}	}
}
}
|||	||dfS )Nr   )	urlencoder  )
urlunsplitr  )r  r  r  r  )r   r   r   Zapi_base_urlr  r  r  r  r  r  rb  r   r   r   build_api_url  s    z_Connection.build_api_url)	r>   r?   r@   ZAPI_BASE_URLZ
USER_AGENTr  r  r  __classcell__r   r   r  r   r     s   r   )Z	unittest2ZTestCaser   r   rA   rJ   r  r  r   r   r  r  r   r   r   r   r   <module>   s*   _           ,@
