U
    f/ed                  	   @   s   d dl mZ d dlZd dlZd dlZd dlmZmZm	Z	m
Z
mZmZ d dlmZ d dlmZ ejdd Zedejdd	d
dddgdd ZeedddZedejdddgdd Zededdd Zeddd ZdS )    )BytesION)	DataFrame
date_rangeread_csv
read_excel	read_jsonread_parquet)_test_decoratorsc                    sN   ddl m}m} |j  t  dd  _G  fddd|}| d|  S )z"Emulate GCS using a binary buffer.r   AbstractFileSystemregistryc                   S   s   dS )NT r   r   r   </tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/io/test_gcs.py<lambda>       zgcs_buffer.<locals>.<lambda>c                       s    e Zd Z fddZdd ZdS )z%gcs_buffer.<locals>.MockGCSFileSystemc                     s     d  S )Nr   )seek)argskwargs
gcs_bufferr   r   open!   s    
z*gcs_buffer.<locals>.MockGCSFileSystem.openc                 [   s   |ddgS )Nfile)nametyper   )selfpathr   r   r   r   ls%   s    z(gcs_buffer.<locals>.MockGCSFileSystem.lsN)__name__
__module____qualname__r   r   r   r   r   r   MockGCSFileSystem    s   r    gcsfs.GCSFileSystem)fsspecr   r   targetclearr   closesetattr)monkeypatchr   r   r    r   r   r   r      s    

	r   Zgcsfsformatcsvjsonparquetexcelmarkdownc                 C   s  ddl m} |j  tddgdtjgddgtdd	d
d}d| }|dkrp|j|dd t	|dgdd}n|dkrd}|
| t|dgdd}nj|dkr|| t|dgd}nH|dkrtd || t|}n"|dkrtd || |}t|| dS )zE
    Test that many to/read functions support GCS.

    GH 33987
    r   r                @ts
2018-06-18   Zperiodsintfloatstrdtzgs://test/test.r)   T)indexr;   )Zparse_dates	index_colr,   zgs://test/test.xlsr*   )Zconvert_datesr+   Zpyarrowr-   ZtabulateN)r"   r   r#   r$   r   npnanr   to_csvr   Zto_excelr   Zto_jsonr   pytestZimportorskip
to_parquetr   Zto_markdowntmassert_frame_equal)r   r(   r   df1r   Zdf2r   r   r   test_to_read_gcs.   s:    

	








rF   resultexpectedc                 C   s<   | dd |dd kst | dd |dd ks8t dS )z
    We would like to assert these are equal, but the 10th and 11th bytes are a
    last-modified timestamp, which in some builds is off-by-one, so we check around
    that.

    See https://en.wikipedia.org/wiki/ZIP_(file_format)#File_headers
    N	      )AssertionErrorrG   r   r   r   assert_equal_zip_safe[   s    rM   encodingzutf-8cp1251c                 C   s  ddl m} |j  t }d|i}|dkr6d|d< t }|j|||dd d	}|j|||d
 |  }| }	t	||	 t
|d||d}
t||
 |dkrd}d|d< |d| 7 }|j|||d
 |  }| }	t	||	 t
|dd|d}
t||
 dS )z
    Compression and encoding should with GCS.

    GH 35677 (to_csv, compression), GH 26124 (to_csv, encoding), and
    GH 32392 (read_csv, encoding)
    r   r.   methodgzipr/   mtimewb)compressionrN   modegs://test/test.csv)rT   rN   )r=   rT   rN   gzZinfer.N)r"   r   r#   r$   rC   ZmakeDataFramer   r@   getvaluerM   r   rD   )r   Zcompression_onlyrN   r   ZdfrT   bufferZpath_gcsresrI   Zread_dfr   r   r   $test_to_csv_compression_encoding_gcsg   s<    	

   
r\   fastparquetc                    sx   ddl m}m} |j  tddgdtjgddgtdd	d
d}G  fddd|}| 	d| |j
ddddd dS )zCRegression test for writing to a not-yet-existent GCS Parquet file.r   r
   r/   r0   r1   r2   r3   r4   r5   r6   r7   c                       s   e Zd Zd fdd	ZdS )z7test_to_parquet_gcs_new_file.<locals>.MockGCSFileSystemrc                    s    d|krt ttj d|S )Nwztest.parquet)FileNotFoundErrorr   osr   join)r   r   rU   r   tmpdirr   r   r      s    z<test_to_parquet_gcs_new_file.<locals>.MockGCSFileSystem.openN)r^   )r   r   r   r   r   rc   r   r   r       s   r    r!   rV   Tr]   N)r<   ZenginerT   )r"   r   r   r#   r$   r   r>   r?   r   r&   rB   )r'   rd   r   r   rE   r    r   rc   r   test_to_parquet_gcs_new_file   s"    

	   re   c                	   C   s"   t t td W 5 Q R X d S )NrV   )rC   Zexternal_error_raisedImportErrorr   r   r   r   r   test_gcs_not_present_exception   s    rg   )ior   ra   Znumpyr>   rA   Zpandasr   r   r   r   r   r   Zpandas._testingZ_testingrC   Zpandas.utilr	   tdZfixturer   Z
skip_if_nomarkZparametrizerF   bytesrM   r\   re   Zskip_if_installedrg   r   r   r   r   <module>   s(    
+.