o
    ҷh                     @   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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jjejdg dd	d
 ZdededefddZejdddgdd Z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   t d t d} t  dd  _G  fddd| j}| jd|dd	  S )
z"Emulate GCS using a binary buffer.gcsfsfsspecc                   S   s   dS )NT r   r   r   K/var/www/html/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e 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__staticmethodr   r   r   r   r   r   MockGCSFileSystem   s    r   gsT)clobber)pytestimportorskipr   closeAbstractFileSystemregister_implementation)r   r   r   r   r   r      s   


r   format)csvjsonparquetexcelmarkdownc           
         sf  t ddgdtjgddgtdddd	}d
| }|dkr-|j|dd t|dgdd}n~|dkrAd}|| t|dgdd}nj|dkrR|| t	|dgd}nY|dkrt
d t
d G  fddd j}| }| d| || t|}W d   n1 sw   Y  | }	|	jdksJ n|dkrt
d || |}t|| dS )zE
    Test that many to/read functions support GCS.

    GH 33987
                 @ts
2018-06-18   periodsintfloatstrdtzgs://test/test.r(   T)indexr:   r   )parse_dates	index_colr+   zgs://test/test.xlsxr)   )convert_datesr*   pyarrowz
pyarrow.fsc                       s   e Zd Ze fddZdS )z(test_to_read_gcs.<locals>.MockFileSystemc                    s,   t d t| dd  } |S )NzUsing pyarrow filesystemzgs:// )printpathlibPathreplaceabsoluteas_uriLocalFileSystem)r   to_localpa_fsr   r   from_uriS   s   
z1test_to_read_gcs.<locals>.MockFileSystem.from_uriN)r   r   r   r   rK   r   rI   r   r   MockFileSystemR   s    rL   
FileSystemNz2Using pyarrow filesystem
Using pyarrow filesystem
r,   tabulate)r   npnanr   to_csvr   to_excelr   to_jsonr   r"   r#   rM   contextsetattr
to_parquetr   
readouterroutto_markdowntmassert_frame_equal)
r   r'   monkeypatchcapsysdf1r   df2rL   mcapturedr   rI   r   test_to_read_gcs0   sD   	

	








rb   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   rf   infolistCRCtarfiler   
getmembersextractfileread)rc   rd   re   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_safeg   s4   P

Pr{   encodingutf-8cp1251c                 C   s   t  }d|i}|dkrd|d< t }|j|||dd d}|j|||d |  }| }	t||	| t|d	||d
}
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)
    methodgzipr-   mtimewb)re   r|   modegs://test/test.csv)re   r|   r   )r=   re   r|   infer.N)rZ   makeDataFramer   rQ   getvaluer{   r   r[   )r   compression_onlyr|   compression_to_extensiondfre   bufferpath_gcsrr   rd   read_dffile_extr   r   r   $test_to_csv_compression_encoding_gcs   s0   
r   c                    s~   t d t d ddlm} 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.fastparquetr
   r   )r%   r-   r.   r/   r0   r1   r2   r3   r4   r6   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|ddS )Nwztest.parquetr}   )r|   )FileNotFoundErrorr   osr   join)r   r   r   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   zgcsfs.GCSFileSystemr   TN)r;   enginere   )
r"   r#   r   r%   r   rO   rP   r   rU   rV   )r\   r   r%   r^   r   r   r   r   test_to_parquet_gcs_new_file   s   


	
r   r
   c                   C   s8   t t td W d    d S 1 sw   Y  d S )Nr   )rZ   external_error_raisedImportErrorr   r   r   r   r   test_gcs_not_present_exception   s   
"r   )#ior   r   rB   rm   ri   numpyrO   r"   pandasr   r   r   r   r   r   pandas._testing_testingrZ   pandas.utilr	   tdfixturer   mark
single_cpuparametrizerb   bytesr9   r{   r   r   skip_if_installedr   r   r   r   r   <module>   s*     
5
,