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ƒZdS )é    Nc                   @   s¶   e Zd ZdZdZdZdZd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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 ).ÚTestQueryResultsÚprojectZjob_nameztest-synchronous-queryÚqueryzselect count(*) from personsÚTOKENc                 C   s   ddl m} |S )Nr   )ÚQueryResults)Zgcloud.bigquery.queryr   )Úselfr   © r   ú[/var/www/html/python-backend/venv/lib/python3.9/site-packages/gcloud/bigquery/test_query.pyÚ_getTargetClass   s    z TestQueryResults._getTargetClassc                 O   s   |   ¡ |i |¤ŽS ©N)r
   )r   ÚargsÚkwr   r   r	   Ú_makeOne   s    zTestQueryResults._makeOneFc              	   C   sª   | j | jdœ|g dddddœddddœgid	œ}|r¦d
|d< dddiddigidddiddigidddiddigidddiddigig|d< | j|d< d|d< d|d< |S )N©Ú	projectIdÚjobIdÚfieldsÚ	full_nameÚSTRINGÚREQURED©ÚnameÚtypeÚmodeÚageÚINTEGER)ÚjobReferenceÚjobCompleteÚerrorsÚschemaZ1000Ú	totalRowsÚfÚvúPhred Phlyntstoneé    úBharney Rhubbleé!   úWylma Phlyntstoneé   úBhettye Rhubbleé   ÚrowsÚ	pageTokeni † ÚtotalBytesProcessedFÚcacheHit)ÚPROJECTÚJOB_NAMEr   )r   ÚcompleteÚresourcer   r   r	   Ú_makeResource!   sD    þ

þÿùþþþþó
zTestQueryResults._makeResourcec                 C   sÐ   ddl m} d|v r¼|d d }|  t|jƒt|ƒ¡ t|j|ƒD ]v\}}|  t||ƒ¡ |  |j|d ¡ |  |j	|d ¡ |  |j
|d ¡ |  |j| d¡¡ |  |j| d¡¡ qBn|  |jd u ¡ d S )	Nr   )ÚSchemaFieldr   r   r   r   r   Údescription)Zgcloud.bigquery.tabler4   ÚassertEqualÚlenr   ÚzipÚ
assertTrueÚ
isinstancer   Z
field_typer   r5   Úgetr   )r   r   r2   r4   r   ÚfoundÚexpectedr   r   r	   Ú_verifySchemaK   s    ÿzTestQueryResults._verifySchemac                 C   sr   |  d¡}|d u r"|  |jg ¡ nL|j}|  t|ƒt|ƒ¡ t||ƒD ]&\}}|  |tdd„ |d D ƒƒ¡ qFd S )Nr+   c                 S   s   g | ]}|d  ‘qS )r"   r   )Ú.0Úcellr   r   r	   Ú
<listcomp>d   ó    z0TestQueryResults._verifyRows.<locals>.<listcomp>r!   )r;   r6   r+   r7   r8   Útuple)r   r   r2   r=   r<   Zf_rowZe_rowr   r   r	   Ú_verifyRows[   s    
ÿzTestQueryResults._verifyRowsc                 C   sÄ   |   |j| d¡¡ |   |j| d¡¡ |   |j| d¡¡ |   |j| d¡¡ |   |j| d¡¡ |   |j| d¡¡ d|v r˜|   |j|d d ¡ n|  	|jd u ¡ |  
||¡ |  ||¡ d S )	Nr.   r   r   r,   r    r-   r   r   )r6   Ú	cache_hitr;   r1   r   Ú
page_tokenÚ
total_rowsÚtotal_bytes_processedr   r9   r>   rD   )r   r   r2   r   r   r	   Ú_verifyResourcePropertiesf   s    ÿz*TestQueryResults._verifyResourcePropertiesc                 C   s  t | jƒ}|  | j|¡}|  |j| j¡ |  |j|u ¡ |  |jd u ¡ |  |j	d u ¡ |  |j
d u ¡ |  |jd u ¡ |  |jd u ¡ |  |jg ¡ |  |jd u ¡ |  |jd u ¡ |  |jd u ¡ |  |jd u ¡ |  |jd u ¡ |  |jd u ¡ |  |jd u ¡ |  |jd u ¡ d S r   )Ú_Clientr/   r   ÚQUERYr6   r   r9   Ú_clientrE   r1   r   r   rF   r+   r   rG   rH   Údefault_datasetÚmax_resultsÚpreserve_nullsÚuse_query_cacheÚuse_legacy_sql©r   Úclientr   r   r   r	   Ú	test_ctorw   s$    
zTestQueryResults.test_ctorc                 C   s,   t | jƒ}|  | j|¡}|  |jd u ¡ d S r   )rJ   r/   r   rK   r9   ÚjobrR   r   r   r	   Útest_job_wo_jobid   s    
z"TestQueryResults.test_job_wo_jobidc                 C   s–   ddl m} d}t| jƒ}|  | j|¡}| j|dœ|jd< |j}|  t	||ƒ¡ |  
|j| j¡ |  |j|u ¡ |  
|j|¡ |j}|  ||u ¡ d S )Nr   )ÚQueryJobÚSERVER_GENERATEDr   r   )Úgcloud.bigquery.jobrW   rJ   r/   r   rK   Z_propertiesrU   r9   r:   r6   r   rL   r   )r   rW   rX   rS   r   rU   Zfetched_laterr   r   r	   Útest_job_w_jobid’   s    
þz!TestQueryResults.test_job_w_jobidc                 C   s^   t | jƒ}|  | j|¡}|  |i ¡ ddddddœddddœgii}| |¡ |  ||¡ d S )	Nr   r   r   r   r   r   r   r   )rJ   r/   r   rK   rI   Ú_set_properties)r   rS   r   r2   r   r   r	   Útest_schema£   s    


þÿÿ
zTestQueryResults.test_schemac                 C   sº   d| j  }| jdd}t|ƒ}t| j |d}|  | j|¡}|  |jg ¡ | ¡  |  t	|j
ƒd¡ |j
d }|  |d d¡ |  |d	 d
| ¡ d| ji}|  |d |¡ |  ||¡ d S )Núprojects/%s/queriesF©r1   ©r   Ú
connectioné   r   ÚmethodÚPOSTÚpathú/%sr   Údata)r/   r3   Ú_ConnectionrJ   r   rK   r6   Úudf_resourcesÚrunr7   Ú
_requestedrI   )r   ÚPATHÚRESOURCEÚconnrS   r   ÚreqÚSENTr   r   r	   Útest_run_w_bound_client²   s    


z(TestQueryResults.test_run_w_bound_clientc              	   C   s   d| j  }| jdd}d}tƒ }t| j |d}t|ƒ}t| j |d}|  | j|¡}| |¡|_d|_d|_	d|_
d|_d|_d|_|j|d	 |  t|jƒd
¡ |  t|jƒd¡ |jd
 }	|  |	d d¡ |  |	d d| ¡ | j| j |dœdddddddœ}
|  |	d |
¡ |  ||¡ d S )Nr]   Tr^   Ztest_datasetr_   éd   é N  F©rS   r   ra   rb   rc   rd   re   )r   Z	datasetId)r   ZdefaultDatasetZdryRunÚ
maxResultsZpreserveNullsÚ	timeoutMsZuseQueryCacheZuseLegacySqlrf   )r/   r3   rg   rJ   r   rK   ÚdatasetrM   rN   rO   Ú
timeout_msrP   rQ   Údry_runri   r6   r7   rj   rI   )r   rk   rl   ZDATASETÚconn1Úclient1Úconn2Úclient2r   rn   ro   r   r   r	   Útest_run_w_alternate_clientÃ   sD    

þõz,TestQueryResults.test_run_w_alternate_clientc           
      C   sÒ   ddl m} d}d| j }| jdd}t|ƒ}t| j|d}|  | j|¡}|d|ƒg|_| 	¡  |  
t|jƒd	¡ |jd }|  
|d
 d¡ |  
|d d| ¡ | jd|igdœ}	|  
|d |	¡ |  ||¡ d S )Nr   ©ÚUDFResourceúvar someCode = "here";r]   Fr^   r_   Ú
inlineCodera   rb   rc   rd   re   ©r   ZuserDefinedFunctionResourcesrf   ©rY   r   r/   r3   rg   rJ   r   rK   rh   ri   r6   r7   rj   rI   )
r   r   ÚINLINE_UDF_CODErk   rl   rm   rS   r   rn   ro   r   r   r	   Útest_run_w_inline_udfì   s$    

þz&TestQueryResults.test_run_w_inline_udfc           
      C   sÒ   ddl m} d}d| j }| jdd}t|ƒ}t| j|d}|  | j|¡}|d|ƒg|_| 	¡  |  
t|jƒd	¡ |jd }|  
|d
 d¡ |  
|d d| ¡ | jd|igdœ}	|  
|d |	¡ |  ||¡ d S )Nr   r~   úgs://some-bucket/js/lib.jsr]   Fr^   r_   ÚresourceUrira   rb   rc   rd   re   r‚   rf   rƒ   )
r   r   ÚRESOURCE_URIrk   rl   rm   rS   r   rn   ro   r   r   r	   Útest_run_w_udf_resource_uri  s$    

þz,TestQueryResults.test_run_w_udf_resource_uric                 C   s  ddl m} d}d}d| j }| jdd}t|ƒ}t| j|d}|  | j|¡}|d	|ƒ|d
|ƒg|_| 	¡  |  
t|jƒd¡ |jd }	|  
|	d d¡ |  
|	d d| ¡ |  
|j|d	|ƒ|d
|ƒg¡ | jd	|id
|igdœ}
|  
|	d |
¡ |  ||¡ d S )Nr   r~   r†   r€   r]   Fr^   r_   r‡   r   ra   rb   rc   rd   re   r‚   rf   rƒ   )r   r   rˆ   r„   rk   rl   rm   rS   r   rn   ro   r   r   r	   Útest_run_w_mixed_udfs  s8    
ÿ
ÿÿþÿz&TestQueryResults.test_run_w_mixed_udfsc                 C   s4   t ƒ }t| j|d}|  | j|¡}|  t|j¡ d S )Nr_   )rg   rJ   r/   r   rK   ÚassertRaisesÚ
ValueErrorÚ
fetch_data)r   rm   rS   r   r   r   r	   Ú!test_fetch_data_query_not_yet_run4  s    z2TestQueryResults.test_fetch_data_query_not_yet_runc                 C   s2  d| j | jf }| jdd}| jdd}|d= t|ƒ}t| j |d}|  | j|¡}| |¡ |  |j	¡ | 
¡ \}}}	|  |j	¡ |  t|ƒd¡ |  |d d	¡ |  |d
 d¡ |  |d d¡ |  |d d¡ |  |d ¡ |  |	|d ¡ |  t|jƒd
¡ |jd }
|  |
d d¡ |  |
d d| ¡ d S )Núprojects/%s/queries/%sFr^   Tr    r_   é   r   ©r#   r$   ra   ©r%   r&   é   ©r'   r(   é   ©r)   r*   r,   rb   ÚGETrd   re   )r/   r0   r3   rg   rJ   r   rK   r[   ÚassertFalser1   r   r9   r6   r7   rj   )r   rk   ÚBEFOREÚAFTERrm   rS   r   r+   rG   rF   rn   r   r   r	   Útest_fetch_data_w_bound_client:  s,    

z/TestQueryResults.test_fetch_data_w_bound_clientc                 C   s  d| j | jf }d}d}d}d}| jdd}| jdd}tƒ }t| j |d	}	t|ƒ}
t| j |
d	}|  | j|	¡}| |¡ |  |j	¡ |j
|||||d
\}}}|  |j	¡ |  t|ƒd¡ |  |d d¡ |  |d d¡ |  |d d¡ |  |d d¡ |  |t|d ƒ¡ |  ||d ¡ |  t|jƒd¡ |  t|
jƒd¡ |
jd }|  |d d¡ |  |d d| ¡ |  |d ||||dœ¡ d S )Nr   é
   r   iÑ  rr   Fr^   Tr_   )rS   rN   rF   Ústart_indexrw   r   r   r‘   ra   r’   r“   r”   r•   r–   r    r,   rb   r—   rd   re   Zquery_params)rt   r,   Z
startIndexru   )r/   r0   r3   rg   rJ   r   rK   r[   r˜   r1   r   r9   r6   r7   Úintrj   )r   rk   ÚMAXr   ÚSTARTÚTIMEOUTr™   rš   ry   rz   r{   r|   r   r+   rG   rF   rn   r   r   r	   Ú"test_fetch_data_w_alternate_clientV  sL    
þ

ýÿz3TestQueryResults.test_fetch_data_w_alternate_clientN)F)Ú__name__Ú
__module__Ú__qualname__r/   r0   ZJOB_TYPErK   r   r
   r   r3   r>   rD   rI   rT   rV   rZ   r\   rp   r}   r…   r‰   rŠ   rŽ   r›   r¢   r   r   r   r	   r      s0   
*)r   c                   @   s   e Zd Zddd„Zdd„ ZdS )rJ   r   Nc                 C   s   || _ || _d S r   r_   )r   r   r`   r   r   r	   Ú__init__‚  s    z_Client.__init__c                 C   s   ddl m} ||| dS )Nr   )ÚDatasetrs   )Zgcloud.bigquery.datasetr§   )r   r   r§   r   r   r	   rv   †  s    z_Client.dataset)r   N)r£   r¤   r¥   r¦   rv   r   r   r   r	   rJ   €  s   
rJ   c                   @   s   e Zd Zdd„ Zdd„ ZdS )rg   c                 G   s   || _ g | _d S r   )Ú
_responsesrj   )r   Ú	responsesr   r   r	   r¦     s    z_Connection.__init__c                 K   s,   | j  |¡ | jd | jdd …  }| _|S )Nr   ra   )rj   Úappendr¨   )r   r   Úresponser   r   r	   Úapi_request‘  s    z_Connection.api_requestN)r£   r¤   r¥   r¦   r¬   r   r   r   r	   rg   ‹  s   rg   )Z	unittest2ZTestCaser   ÚobjectrJ   rg   r   r   r   r	   Ú<module>   s
     p