a
    nÝEbú  ã                   @   s  d dl mZ d dl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 d dlm   mZ ejdd„ ƒZe d¡ej dg d	¢¡d
d„ ƒƒZe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   úX/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/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r˜d}| 
|¡ t|dgdd�}nj|dkrº| |¡ t|dgd�}nH|dkràt 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-   ÚtabulateN)r"   r   r#   r$   r   ÚnpÚnanr   Úto_csvr   Zto_excelr   Úto_jsonr   ÚpytestZimportorskipÚ
to_parquetr   Zto_markdownÚtmÚassert_frame_equal)r   r(   r   Údf1r   Zdf2r   r   r   Útest_to_read_gcs1   s:    

üÿ	








rH   )ÚresultÚexpectedÚcompressionc              	   C   s¢   |dkr’t  t| ƒ¡�j}t  t|ƒ¡�<}t| ¡ | ¡ ƒD ]\}}|j|jks:J ‚q:W d  ƒ n1 sh0    Y  W d  ƒ qž1 s†0    Y  n| |ksžJ ‚dS )a  
    For zip compression, only compare the CRC-32 checksum of the file contents
    to avoid checking the time-dependent last-modified timestamp which
    in some CI builds is off-by-one

    See https://en.wikipedia.org/wiki/ZIP_(file_format)#File_headers
    ÚzipN)ÚzipfileÚZipFiler   rL   ÚinfolistÚCRC)rI   rJ   rK   ÚexpÚresZres_infoZexp_infor   r   r   Úassert_equal_zip_safe^   s    ÿPrS   Ú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 ||
¡ tj| }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)rK   rT   Úmodeúgs://test/test.csv)rK   rT   )r=   rK   rT   ZinferÚ.N)r"   r   r#   r$   rE   ZmakeDataFramer   rA   ÚgetvaluerS   r   rF   ÚicomZ_compression_to_extension)r   Zcompression_onlyrT   r   ZdfrK   ÚbufferZpath_gcsrR   rJ   Zread_dfZfile_extr   r   r   Ú$test_to_csv_compression_encoding_gcsq   s4    	
ÿ
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|vrt ‚ttj ˆ d¡|ƒS )NÚwztest.parquet)ÚFileNotFoundErrorr   Úosr   Újoin)r   r   rZ   r   ©Útmpdirr   r   r   ´   s    z<test_to_parquet_gcs_new_file.<locals>.MockGCSFileSystem.openN)rb   )r   r   r   r   r   rg   r   r   r    ³   s   r    r!   r[   Tra   N)r<   ZenginerK   )r"   r   r   r#   r$   r   r?   r@   r   r&   rD   )r'   rh   r   r   rG   r    r   rg   r   Útest_to_parquet_gcs_new_file    s    

üÿ	ÿri   c                   C   s6   t  t¡� tdƒ W d   ƒ n1 s(0    Y  d S )Nr[   )rE   Zexternal_error_raisedÚImportErrorr   r   r   r   r   Útest_gcs_not_present_exception¿   s    rk   )$Úior   re   rM   Únumpyr?   rC   Zpandasr   r   r   r   r   r   Zpandas._testingZ_testingrE   Zpandas.utilr	   ÚtdZpandas.io.commonÚcommonr^   Zfixturer   Z
skip_if_noÚmarkZparametrizerH   Úbytesr:   rS   r`   ri   Zskip_if_installedrk   r   r   r   r   Ú<module>   s,    
+-