o
    ŀg0                     @   s  d Z 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	  m
Z ddlmZ ddlmZ ddlmZ ddlmZ ejdZejjejjejdd	d
gejdddgdd Zejjejjdd Zejdd Zejjej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.
    )BytesION)	DataFrame)read_featherread_csvz=ignore:Passing a BlockManager to DataFrame:DeprecationWarningmodeexplicitinferenginepythoncc                 C   s   |dkr	t d || }t|dddd| d}| j| d W d    n1 s,w   Y  | jd	 | }	|d
kr>|}t|	d||d}
t|
| d S )Ntarz5TODO: Add tar salaraies.csv to pandas/io/parsers/dataioparserdatazsalaries.csvrbcontentz/salaries.csvr   	)sepcompressionr
   )	pytestskipopenserve_contentreadurlr   tmassert_frame_equal)
httpserverdatapathsalaries_tabler   r
   compression_onlycompression_to_extension	extensionfr   	url_table r'   W/var/www/html/myenv/lib/python3.10/site-packages/pandas/tests/io/parser/test_network.pytest_compressed_urls   s   
r)   c                 C   sj   t |ddddd}| j| d t| jddd	}W d   n1 s%w   Y  |jd
 dks3J dS )zN
    read_csv should honor the requested encoding for URLs.

    GH 10424
    r   r   r   zunicode_series.csvr   r   zlatin-1N)encodingheader)      u$   Á köldum klaka (Cold Fever) (1994))r   r   r   r   r   loc)r   r    r%   dfr'   r'   r(   test_url_encoding_csv8   s
   r0   c                 C   s   t | ddddS )z DataFrame with the tips dataset.r   r   csvtips.csvr   )r    r'   r'   r(   tips_dfF   s   r3   s3_resourcec                   @   s   e Z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dd Zdd Zdd Zejjddddd Zejjddddd Zejjd d! Zejjd"d# Zd$d% Zd&d' Zd(S ))TestS3c                 C   s\   t d dD ]$\}}td|j d| ||d}t|ts J |jr%J t|| qd S )Ns3fs) N).gzgzip).bz2bz2s3://	/tips.csv)r   storage_options	r   importorskipr   name
isinstancer   emptyr   r   selfs3_public_bucket_with_datar3   s3soextcompr/   r'   r'   r(   test_parse_public_s3_bucketP   s   

z"TestS3.test_parse_public_s3_bucketc                 C   sH   t d td|j d|d}t|tsJ |jrJ t|| d S )Nr6   r=   r>   r?   r@   )rF   s3_private_bucket_with_datar3   rH   r/   r'   r'   r(   test_parse_private_s3_bucket^   s   

z#TestS3.test_parse_private_s3_bucketc                 C   J   t d|j dd|d}t|tsJ |jrJ t|jd d | d S )Nzs3n://r>   
   nrowsr?   r   rB   rC   r   rD   r   r   ilocrF   rG   r3   rH   r/   r'   r'   r(   test_parse_public_s3n_bucketh      
z#TestS3.test_parse_public_s3n_bucketc                 C   rO   )Nzs3a://r>   rP   rQ   rS   rU   r'   r'   r(   test_parse_public_s3a_buckets   rW   z#TestS3.test_parse_public_s3a_bucketc                 C   s^   dD ]*\}}t d|j d| d||d}t|tsJ |jr!J t|jd d | qd S )Nr7   r=   r>   rP   )rR   r   r?   rS   rE   r'   r'   r(   !test_parse_public_s3_bucket_nrows~   s   
z(TestS3.test_parse_public_s3_bucket_nrowsc              	   C   s   d}dD ]R\}}t d|j d| |||d7}|j|ksJ dD ]%}| }	t|	ts.J |	jr3J |j|| ||d   }
t	|
|	 q!W d    n1 sQw   Y  qd S )N   r7   r=   r>   )	chunksizer   r?   r   r-      r-   
r   rB   r[   	get_chunkrC   r   rD   rT   r   r   rF   rG   r3   rH   r[   rI   rJ   	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 ]S\}}t d|j d| ||d|d7}|j|ks J dD ]%}| }	t|	ts/J |	jr4J |j|| ||d   }
t	|
|	 q"W d    n1 sRw   Y  qd S )	NrZ   r7   r=   r>   r   )r[   r   r
   r?   r\   r-   r^   r`   r'   r'   r(   *test_parse_public_s3_bucket_chunked_python   s.   
z1TestS3.test_parse_public_s3_bucket_chunked_pythonc                 C   sT   dD ]%\}}t d|j d| d||d}t|tsJ |jr!J t|| qd S )Nr7   r=   r>   r   r
   r   r?   r   rB   rC   r   rD   r   r   rE   r'   r'   r(   "test_parse_public_s3_bucket_python   s   
z)TestS3.test_parse_public_s3_bucket_pythonc                 C   sP   dD ]#}t d|j d| dd|d}t|tsJ |jrJ t|| qd S )N)r8   r9   r;   r=   r>   r   r	   rf   rg   )rF   rG   r3   rH   rI   r/   r'   r'   r(   test_infer_s3_compression   s   
z TestS3.test_infer_s3_compressionc                 C   s`   dD ]+\}}t d|j d| dd||d}t|tsJ |jr"J t|jd d | qd S )Nr7   r=   r>   r   rP   )r
   rR   r   r?   rS   rE   r'   r'   r(   (test_parse_public_s3_bucket_nrows_python   s   
z/TestS3.test_parse_public_s3_bucket_nrows_pythonc                 C   sD   d}t jt|d td|d W d    d S 1 sw   Y  d S )N#The specified bucket does not existmatchzs3://nyqpug/asdf.csvrL   )r   raisesOSErrorr   )rF   rH   msgr'   r'   r(   test_read_s3_fails   s   "zTestS3.test_read_s3_failsc                 C   sJ   d}t jt|d td|j d W d    d S 1 sw   Y  d S )Nrk   rl   r=   z	/file.csv)r   rn   ro   r   rB   )rF   s3_private_bucketrH   rp   r'   r'   r(   test_read_s3_fails_private   s   "z!TestS3.test_read_s3_fails_privatezGH#39155 s3fs upgradeF)reasonstrictc                 C   sV   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   rk   rl   z/s3://an_s3_bucket_data_doesnt_exit/not_real.csvrL   )botocoreFileNotFoundError
exceptionsClientErrorr   rn   to_csvrF   r3   rH   rv   errorr'   r'   r(   test_write_s3_csv_fails   s   "zTestS3.test_write_s3_csv_failsc                 C   s`   t d dd l}t|jjf}t j|dd |jd|d W d    d S 1 s)w   Y  d S )Npyarrowr   rk   rl   z3s3://an_s3_bucket_data_doesnt_exit/not_real.parquetrL   )r   rA   rv   rw   rx   ry   rn   
to_parquetr{   r'   r'   r(   test_write_s3_parquet_fails  s   
"z"TestS3.test_write_s3_parquet_failsc                 C   sz   | d}t| d  }t|dd}W d    n1 s w   Y  t|ts,J |jr1J t|}t	|| d S )Nr2   Bodyutf8)r*   )
Objectr   getr   r   rC   r   rD   r   r   )rF   rG   	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_objectc           
   	   C   s   t tdtdd}t| db}|jd|d |j d}t	
d| d	}|jtjd
d+ td| d|d |jD ]}t	|| }	rVt|	ddk sVJ qAW d    n1 saw   Y  W d    d S W d    d S 1 syw   Y  d S )N)i    abcd)columnszutf-8zlarge-file.csv)Keyr   z/large-file.csvz^Fetch: z, 0-(?P<stop>\d+)$r6   )loggerr=   rZ   rQ   stopi z )r   npzeroslistr   rz   encode
put_objectrB   recompileat_levelloggingDEBUGr   messagesrm   intgroup)
rF   s3_public_bucketcaplogrH   r/   bufurimatch_relogrm   r'   r'   r(   test_read_csv_chunked_download#  s(   
"z%TestS3.test_read_csv_chunked_downloadc                 C   s&   t d|j d|d}t|| d S )Nr=   z/tips#1.csvrL   )r   rB   r   r   )rF   rG   r3   rH   r   r'   r'   r(   test_read_s3_with_hash_in_key6  s   z$TestS3.test_read_s3_with_hash_in_keyc                 C   s8   t d t|}td|j d|d}t|| d S )Nr~   r=   z/simple_dataset.featherrL   )r   rA   r   rB   r   r   )rF   rG   feather_filerH   r   resr'   r'   r(   test_read_feather_s3_file_path=  s   
z%TestS3.test_read_feather_s3_file_pathN)__name__
__module____qualname__rK   rN   rV   rX   rY   rd   re   rh   ri   rj   rq   rs   r   markxfailr}   r   
single_cpur   r   r   r   r'   r'   r'   r(   r5   L   s.    




r5   )"__doc__r   r   r   r   numpyr   r   pandas.util._test_decoratorsutil_test_decoratorstdpandasr   pandas._testing_testingr   pandas.io.feather_formatr   pandas.io.parsersr   r   filterwarnings
pytestmarknetworkr   parametrizer)   r0   fixturer3   usefixturesskip_if_not_us_localer5   r'   r'   r'   r(   <module>   s8    

