o
    5c,.                     @   s4  d Z ddlmZmZ ddlZddlZddlZddlm	Z	 ddl
m  mZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ejjejd	d
dejdddgejdddgdd Zejjejdd
ddd Zejdd Zejj ej!dejj"de#dde$ G dd dZ%dS )zl
Tests parsers ability to read and parse non-local files
and hence require a network connection to be read.
    )BytesIOStringION)is_ci_environment)	DataFrame)_compression_to_extension)read_featherread_csvVhttps://github.com/pandas-dev/pandas/raw/main/pandas/tests/io/parser/data/salaries.csvT)urlcheck_before_testmodeexplicitinferenginepythoncc                 C   s@   t | }d}|| }|dkr|}t|d||d}t||  d S )Nr
   r   	)sepcompressionr   )r   r	   tmassert_frame_equal)salaries_tabler   r   compression_only	extensionbase_urlr   	url_table r   Y/var/www/html/gps/gps/lib/python3.10/site-packages/pandas/tests/io/parser/test_network.pytest_compressed_urls   s   r   ghttps://raw.githubusercontent.com/pandas-dev/pandas/main/pandas/tests/io/parser/data/unicode_series.csvc                  C   s(   d} t | ddd}|jd dksJ dS )zN
    read_csv should honor the requested encoding for URLs.

    GH 10424
    r    zlatin-1N)encodingheader)      u$   Á köldum klaka (Cold Fever) (1994))r	   loc)pathdfr   r   r   test_url_encoding_csv5   s   r(   c                 C   s   t | ddddS )z DataFrame with the tips dataset.iodatacsvtips.csvr   )datapathr   r   r   tips_dfK   s   r.   s3_resourcez$CI race condition GH 45433, GH 44584F)reasonraisesstrictc                   @   s   e Zd Zeddd Zdd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zejjddddd Zejjdddeddd Zejjdd Zejjejje d d!d"d# Zd$d% Zedd&d' Zd(S ))TestS3s3fsc                 C   sx   dD ]\}}t d| ||d}t|tsJ |jrJ t|| qt d|d}t|ts/J |jr4J t|| d S )N) N).gzgzip).bz2bz2s3://pandas-test/tips.csv)r   storage_optionszs3://cant_get_it/tips.csvr<   r	   
isinstancer   emptyr   r   selfr.   s3soextcompr'   r   r   r   test_parse_public_s3_bucketZ   s   

z"TestS3.test_parse_public_s3_bucketc                 C   @   t dd|d}t|tsJ |jrJ t|jd d | d S )Nzs3n://pandas-test/tips.csv
   nrowsr<   r	   r?   r   r@   r   r   ilocrB   r.   rC   r'   r   r   r   test_parse_public_s3n_bucketo   s   
z#TestS3.test_parse_public_s3n_bucketc                 C   rG   )Nzs3a://pandas-test/tips.csvrH   rI   rK   rM   r   r   r   test_parse_public_s3a_bucketw   s   
z#TestS3.test_parse_public_s3a_bucketc                 C   sT   dD ]%\}}t d| d||d}t|tsJ |jrJ t|jd d | qd S )Nr5   r;   rH   )rJ   r   r<   rK   rA   r   r   r   !test_parse_public_s3_bucket_nrows~   s   
z(TestS3.test_parse_public_s3_bucket_nrowsc           
   	   C   s   d}dD ]M\}}t d| |||d7}|j|ksJ dD ]%}| }t|ts)J |jr.J |j|| ||d   }	t|	| qW d    n1 sLw   Y  qd S )N   r5   r;   )	chunksizer   r<   r   r$      r$   	r	   rR   	get_chunkr?   r   r@   rL   r   r   
rB   r.   rC   rR   rD   rE   	df_readeri_chunkr'   true_dfr   r   r   #test_parse_public_s3_bucket_chunked   s,   
z*TestS3.test_parse_public_s3_bucket_chunkedc           
   	   C   s   d}dD ]N\}}t d| ||d|d7}|j|ksJ dD ]%}| }t|ts*J |jr/J |j|| ||d   }	t|	| qW d    n1 sMw   Y  qd S )NrQ   r5   r;   r   )rR   r   r   r<   rS   r$   rU   rW   r   r   r   *test_parse_public_s3_bucket_chunked_python   s.   
z1TestS3.test_parse_public_s3_bucket_chunked_pythonc                 C   sJ   dD ] \}}t d| d||d}t|tsJ |jrJ t|| qd S )Nr5   r;   r   r   r   r<   r>   rA   r   r   r   "test_parse_public_s3_bucket_python   s   
z)TestS3.test_parse_public_s3_bucket_pythonc                 C   sF   dD ]}t d| dd|d}t|tsJ |jrJ t|| qd S )N)r6   r7   r9   r;   r   r   r]   r>   )rB   r.   rC   rD   r'   r   r   r   test_infer_s3_compression   s   
z TestS3.test_infer_s3_compressionc                 C   sV   dD ]&\}}t d| dd||d}t|tsJ |jrJ t|jd d | qd S )Nr5   r;   r   rH   )r   rJ   r   r<   rK   rA   r   r   r   (test_parse_public_s3_bucket_nrows_python   s   
z/TestS3.test_parse_public_s3_bucket_nrows_pythonc                 C   sz   d}t jt|d td|d W d    n1 sw   Y  t jt|d td W d    d S 1 s6w   Y  d S )N#The specified bucket does not existmatchzs3://nyqpug/asdf.csvr=   zs3://cant_get_it/file.csv)pytestr1   OSErrorr	   )rB   rC   msgr   r   r   test_read_s3_fails   s   
"zTestS3.test_read_s3_failszGH#39155 s3fs upgradeF)r0   r2   c                 C   V   dd l }t|jjf}tj|dd |jd|d W d    d S 1 s$w   Y  d S )Nr   ra   rb   z/s3://an_s3_bucket_data_doesnt_exit/not_real.csvr=   )botocoreFileNotFoundError
exceptionsClientErrorrd   r1   to_csvrB   r.   rC   ri   errorr   r   r   test_write_s3_csv_fails   s   "zTestS3.test_write_s3_csv_failspyarrowc                 C   rh   )Nr   ra   rb   z3s3://an_s3_bucket_data_doesnt_exit/not_real.parquetr=   )ri   rj   rk   rl   rd   r1   
to_parquetrn   r   r   r   test_write_s3_parquet_fails   s   "z"TestS3.test_write_s3_parquet_failsc                 C   s~   |j jjddd}t|d  }t|dd}W d    n1 s"w   Y  t|ts.J |jr3J t|}t	
|| d S )Npandas-testr,   )BucketKeyBodyutf8)r!   )metaclient
get_objectr   readr	   r?   r   r@   r   r   )rB   r/   	tips_file	s3_objectbufferresultexpectedr   r   r   $test_read_csv_handles_boto_s3_object  s   
z+TestS3.test_read_csv_handles_boto_s3_objectzThis test can hang in our CI min_versions build and leads to '##[error]The runner has received a shutdown signal...' in GHA. GH: 45651)r0   c                 C   s   dd l }ttjddtdd}t }|| t|	 
d}|djd|d	 |j  |jtjd
d tdd|d ddd |jD v sMJ W d    d S 1 sXw   Y  d S )Nr   i    abcd)columnszutf-8rt   zlarge-file.csv)rv   rw   r4   )loggerzs3://pandas-test/large-file.csvrQ   rI   )r   i  T c                 s   s    | ]
}|j d d V  qdS )N)args).0xr   r   r   	<genexpr>4  s    z8TestS3.test_read_csv_chunked_download.<locals>.<genexpr>)r4   r   nprandomrandnlistr   rm   r   getvalueencoderu   
put_objectS3FileSystemclear_instance_cacheat_levelloggingDEBUGr	   records)rB   r/   caplogrC   r4   r'   str_bufbufr   r   r   test_read_csv_chunked_download  s   	

"z%TestS3.test_read_csv_chunked_downloadc                 C   s   t d|d}t|| d S )Nzs3://pandas-test/tips#1.csvr=   )r	   r   r   )rB   r.   rC   r   r   r   r   test_read_s3_with_hash_in_key6  s   z$TestS3.test_read_s3_with_hash_in_keyc                 C   s$   t |}t d|d}t|| d S )Nz's3://pandas-test/simple_dataset.featherr=   )r   r   r   )rB   feather_filerC   r   resr   r   r   test_read_feather_s3_file_path;  s
   z%TestS3.test_read_feather_s3_file_pathN)__name__
__module____qualname__td
skip_if_norF   rN   rO   rP   r[   r\   r^   r_   r`   rg   rd   markxfailrp   rs   
single_cpur   skipifr   r   r   r   r   r   r   r   r3   Q   s8    	



r3   )&__doc__r)   r   r   r   numpyr   rd   pandas.compatr   pandas.util._test_decoratorsutil_test_decoratorsr   pandasr   pandas._testing_testingr    pandas.tests.io.test_compressionr   pandas.io.feather_formatr   pandas.io.parsersr	   r   networkparametrizer   r(   fixturer.   r   usefixturesr   rj   skip_if_not_us_localer3   r   r   r   r   <module>   sJ    

