U
    f/en                     @   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	   </tmp/pip-unpacked-wheel-tiezk1ph/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   Zprivate_key_pathr	   r	   r
   r   *   s    r   c                  C   s   t  } | rtj| S d S )N)r   service_accountZCredentialsZfrom_service_account_filer   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_sizer/   r0   r1   r2   r3   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   ZsqlkwargsZcaptured_kwargsr	   r
   mock_read_gbqW   s    
z>test_read_gbq_without_deprecated_kwargs.<locals>.mock_read_gbqpandas_gbq.read_gbqSELECT 1verboseZprivate_keysetattrpdread_gbqAssertionErrormonkeypatchrB   r	   rA   r
   'test_read_gbq_without_deprecated_kwargsT   s    
rM   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 r<   r=   r?   rA   r	   r
   rB   e   s    
z4test_read_gbq_with_new_kwargs.<locals>.mock_read_gbqrC   rD   Tr'   )use_bqstorage_apimax_resultsrN   rO   rF   rK   r	   rA   r
   test_read_gbq_with_new_kwargsb   s    rP   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 r<   r=   r?   rA   r	   r
   rB   s   s    
z7test_read_gbq_without_new_kwargs.<locals>.mock_read_gbqrC   rD   rN   rO   rF   rK   r	   rA   r
    test_read_gbq_without_new_kwargsp   s    
rQ   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 r<   r=   r?   rA   r	   r
   rB      s    
z<test_read_gbq_progress_bar_type_kwarg.<locals>.mock_read_gbqrC   rD   )progress_bar_typerS   rF   )rL   rR   rB   r	   rA   r
   %test_read_gbq_progress_bar_type_kwarg~   s
    rT   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   !SELECT COUNT(*) AS num_rows FROM standardr   r   dialectnum_rowsr   )r;   to_gbqr   r   rH   rI   rJ   )rX   rZ   rY   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 5 Q R X tjd| t t dd}|d d	 |kstd S )
Nrg   r[   ri   )	if_existsr\   r   r]   r^   r_   ra   r   )r;   rb   r   r   ZilocrH   rI   rJ   )	rX   rj   Zexpected_num_rowsZexpectationrZ   rY   r:   rc   rd   r	   r	   r
   test_gbq_if_exists   s0    z@TestToGBQIntegrationWithServiceAccountKeyPath.test_gbq_if_existsN)__name__
__module____qualname__r   ZfixturerZ   re   markparametrizedoes_not_raisetmZexternal_error_raisedr   ZgbqZTableCreationErrorrk   r	   r	   r	   r
   rU      s   


rU   )r   ).
contextlibr   rq   r   r   platformr!   r#   Znumpyr5   r   r*   ZpandasrH   r   Zpandas._testingZ_testingrr   ZimportorskipZapi_exceptionsr   r   r   r   r   ZPRIVATE_KEY_JSON_CONTENTSpython_versionVERSIONr   r   r   r   r   r   intr8   r%   r;   rM   rP   rQ   ro   rp   rT   ZsinglerU   r	   r	   r	   r
   <module>   sD   




