B
    Y0dn                 @   sB  d dl mZ d dlmZ d dlZd dlZd dlZd dlZd dlZ	d dl
Z
d dlZd dlZd dlmZ d dlmZ e
dZe
dZe
dZe
dZdZdZdZe Zd	d
 Zdd Zdd Zdd Zdd Z dd Z!d'e"e#dddZ$dd Z%dd Z&dd Z'dd  Z(e
j)*d!dd"gd#d$ Z+e
j)j,G d%d& d&Z-dS )(    )	ExitStack)datetimeN)	DataFramezgoogle.api_core.exceptionszgoogle.cloud.bigqueryzgoogle.oauth2.service_account
pandas_gbqc               C   s   t  std d S )Nz1Cannot run integration tests without a project id)_get_project_idpytestskip r	   r	   J/var/www/html/venv/lib/python3.7/site-packages/pandas/tests/io/test_gbq.py_skip_if_no_project_id   s    r   c               C   s   t  std d S )NzACannot run integration tests without a private key json file path)_get_private_key_pathr   r   r	   r	   r	   r
   _skip_if_no_private_key_path!   s    r   c               C   s   t ptjdS )NZGBQ_PROJECT_ID)
PROJECT_IDosenvirongetr	   r	   r	   r
   r   &   s    r   c              C   s   t } | stjd} | S )NZ"GBQ_GOOGLE_APPLICATION_CREDENTIALS)PRIVATE_KEY_JSON_PATHr   r   r   )private_key_pathr	   r	   r
   r   *   s    r   c              C   s   t  } | rtj| S d S )N)r   service_accountCredentialsZfrom_service_account_file)r   r	   r	   r
   _get_credentials1   s    r   c              C   s   t  } t }tj| |dS )N)projectcredentials)r   r   bigqueryZClient)
project_idr   r	   r	   r
   _get_client7   s    r   
   )lengthreturnc             C   s   d tjtj| dS )N )k)joinrandomchoicesstringascii_lowercase)r   r	   r	   r
   generate_rand_str=   s    r&   c             C   s   t jjdd| fdt}t jd| }t jjddd| fd}t jjddd| fdt}dd t| D }t|d |d |d |d |d dt| d	S )
N      )sizer   c             S   s   g | ]}t td qS )z
US/Arizona)r   nowpytztimezone).0tr	   r	   r
   
<listcomp>G   s    z+make_mixed_dataframe_v2.<locals>.<listcomp>r   )boolsfltsintsstrstimes)index)	npr"   randintZastypeboolZrandnstrranger   )	test_sizer0   r1   r2   r3   r4   r	   r	   r
   make_mixed_dataframe_v2A   s    
r<   c                sB   i   fdd}|  d| td d ks2td ks>td S )Nc                s     | tdggS )Ng      ?)updater   )sqlkwargs)captured_kwargsr	   r
   mock_read_gbqW   s    
z>test_read_gbq_without_deprecated_kwargs.<locals>.mock_read_gbqzpandas_gbq.read_gbqzSELECT 1verboseZprivate_key)setattrpdread_gbqAssertionError)monkeypatchrA   r	   )r@   r
   'test_read_gbq_without_deprecated_kwargsT   s    
rH   c                sH   i   fdd}|  d| tjdddd  d s8t d	 sDtd S )
Nc                s     | tdggS )Ng      ?)r=   r   )r>   r?   )r@   r	   r
   rA   e   s    
z4test_read_gbq_with_new_kwargs.<locals>.mock_read_gbqzpandas_gbq.read_gbqzSELECT 1Tr(   )use_bqstorage_apimax_resultsrI   rJ   )rC   rD   rE   rF   )rG   rA   r	   )r@   r
   test_read_gbq_with_new_kwargsb   s    rK   c                sB   i   fdd}|  d| td d ks2td ks>td S )Nc                s     | tdggS )Ng      ?)r=   r   )r>   r?   )r@   r	   r
   rA   s   s    
z7test_read_gbq_without_new_kwargs.<locals>.mock_read_gbqzpandas_gbq.read_gbqzSELECT 1rI   rJ   )rC   rD   rE   rF   )rG   rA   r	   )r@   r
    test_read_gbq_without_new_kwargsp   s    
rL   progress_barZfooc                s:   i   fdd}|  d| tjd|d d ks6td S )Nc                s     | tdggS )Ng      ?)r=   r   )r>   r?   )r@   r	   r
   rA      s    
z<test_read_gbq_progress_bar_type_kwarg.<locals>.mock_read_gbqzpandas_gbq.read_gbqzSELECT 1)progress_bar_typerN   )rC   rD   rE   rF   )rG   rM   rA   r	   )r@   r
   %test_read_gbq_progress_bar_type_kwarg~   s
    rO   c            	   @   s`   e Zd Ze dd Zdd Zejddde	 fdd	e
ejjfd
de	 fgdd ZdS )-TestToGBQIntegrationWithServiceAccountKeyPathc             c   sp   t   t  dt  }t | _| j|| _| jt| j t }| d| }|V  | jj	| jdd d S )NZpydata_pandas_bq_testing_.T)Zdelete_contents)
r   r   r&   r   clientZdatasetZcreate_datasetr   ZDatasetZdelete_dataset)selfZ
dataset_idZ
table_namedestination_tabler	   r	   r
   gbq_dataset   s    
z9TestToGBQIntegrationWithServiceAccountKeyPath.gbq_datasetc             C   sZ   |}d}t |}|j|t d t d tjd| t t dd}|d d |ksVtd S )Ni!N  )	chunksizer   z!SELECT COUNT(*) AS num_rows FROM standard)r   r   dialectnum_rowsr   )r<   to_gbqr   r   rD   rE   rF   )rS   rU   rT   r;   dfresultr	   r	   r
   test_roundtrip   s    
z<TestToGBQIntegrationWithServiceAccountKeyPath.test_roundtripz)if_exists, expected_num_rows, expectationappendi,  Zfail   replaced   c       	   	   C   s   |}d}t |}|j|t d t d |( |jd d j|t |d t d W d Q R X tjd| t t dd}|d d	 |kstd S )
Nr_   )rV   r   ra   )	if_existsrV   r   z!SELECT COUNT(*) AS num_rows FROM rW   )r   r   rX   rY   r   )r<   rZ   r   r   ZilocrD   rE   rF   )	rS   rb   Zexpected_num_rowsZexpectationrU   rT   r;   r[   r\   r	   r	   r
   test_gbq_if_exists   s*    
z@TestToGBQIntegrationWithServiceAccountKeyPath.test_gbq_if_existsN)__name__
__module____qualname__r   ZfixturerU   r]   markparametrizedoes_not_raisetmZexternal_error_raisedr   ZgbqZTableCreationErrorrc   r	   r	   r	   r
   rP      s   
rP   )r   ).
contextlibr   ri   r   r   platformr"   r$   numpyr6   r   r+   ZpandasrD   r   Zpandas._testingZ_testingrj   ZimportorskipZapi_exceptionsr   r   r   r   r   ZPRIVATE_KEY_JSON_CONTENTSpython_versionVERSIONr   r   r   r   r   r   intr9   r&   r<   rH   rK   rL   rg   rh   rO   ZsinglerP   r	   r	   r	   r
   <module>   s@   



