o
    i                     @   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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Z ejdd Zedejd	g d
dd Zdededef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)_compression_to_extension)_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   S/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/pandas/tests/io/test_gcs.py<lambda>!   s    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   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r8|j|dd t	|dgdd}nH|dkrLd}|
| t|dgdd}n4|dkr]|| t|dgd}n#|dkrptd || t|}n|dkrtd || |}t|| dS )zE
    Test that many to/read functions support GCS.

    GH 33987
    r   r                @ts
2018-06-18   periodsintfloatstrdtzgs://test/test.r*   T)indexr=   )parse_dates	index_colr-   zgs://test/test.xlsr+   )convert_datesr,   pyarrowr.   tabulateN)r"   r   r#   r$   r   npnanr   to_csvr   to_excelr   to_jsonr   pytestimportorskip
to_parquetr   to_markdowntmassert_frame_equal)r   r)   r   df1r   df2r   r   r   test_to_read_gcs1   s:   


	






rQ   resultexpectedcompressionc              	   C   s  |dkrSt t| >}t t|}t| | D ]\}}|j|jks)J qW d   n1 s4w   Y  W d   dS W d   dS 1 sLw   Y  dS |dkrtjt| d]}tjt|d<}t| | D ]*\}	}
|	|	}|	|
}|du |du ksJ |dur|dur|
 |
 ksJ qrW d   n1 sw   Y  W d   dS W d   dS 1 sw   Y  dS | |ksJ 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tar)fileobj)zipfileZipFiler   rU   infolistCRCtarfiler   
getmembersextractfileread)rR   rS   rT   expresres_infoexp_infotar_exptar_restar_res_infotar_exp_infoactual_fileexpected_filer   r   r   assert_equal_zip_safe^   s4   P

Prj   encodingzutf-8cp1251c                 C   s  ddl m} |j  t }d|i}|dkrd|d< t }|j|||dd d	}|j|||d
 |  }| }	t	||	| t
|d||d}
t||
 t| }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gzipr0   mtimewb)rT   rk   modegs://test/test.csv)rT   rk   )r@   rT   rk   infer.N)r"   r   r#   r$   rM   makeDataFramer   rF   getvaluerj   r   rN   r	   )r   compression_onlyrk   r   dfrT   bufferpath_gcsra   rS   read_dffile_extr   r   r   $test_to_csv_compression_encoding_gcs}   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   r0   r1   r2   r3   r4   r5   r6   r7   r9   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   rq   r   tmpdirr   r   r      s   z<test_to_parquet_gcs_new_file.<locals>.MockGCSFileSystem.openN)r   )r   r   r   r   r   r   r   r   r       s    r    r!   rr   Tr~   N)r>   enginerT   )r"   r   r   r#   r$   r   rD   rE   r   r&   rK   )r'   r   r   r   rO   r    r   r   r   test_to_parquet_gcs_new_file   s   

	
r   c                   C   s8   t t td W d    d S 1 sw   Y  d S )Nrr   )rM   external_error_raisedImportErrorr   r   r   r   r   test_gcs_not_present_exception   s   
"r   )$ior   r   r\   rX   numpyrD   rI   pandasr   r   r   r   r   r   pandas._testing_testingrM    pandas.tests.io.test_compressionr	   pandas.utilr
   tdfixturer   
skip_if_nomarkparametrizerQ   bytesr<   rj   r}   r   skip_if_installedr   r   r   r   r   <module>   s0     
+-