U
    kª/e³3  ã                   @   s  d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dl	Z
d dlZd dlZd dlmZ d dlmZ d dlmZmZmZ d dlmZ zd dlmZ W n ek
r¬   Y nX d	d
„ Zdd„ ZejjG dd„ dƒƒZG dd„ deej ƒZ!dd„ Z"ejjejj#ejj$ejj%dd„ ƒƒƒƒZ&dS )é    N)ÚBytesIO)Újoin)Úutil)Ú_test_dataframe)Ú _test_read_common_metadata_filesÚ&_test_write_to_dataset_with_partitionsÚ$_test_write_to_dataset_no_partitions)Úguid)Úassert_frame_equalc                  C   s2   t  ¡ s.d} tj d¡r$t | ¡ n
t | ¡ d S )NzNo libhdfs available on systemZ!PYARROW_HDFS_TEST_LIBHDFS_REQUIRE)ÚpaZhave_libhdfsÚosÚenvironÚgetÚpytestZfailÚskip)Úmessage© r   ú;/tmp/pip-unpacked-wheel-seu8352k/pyarrow/tests/test_hdfs.pyÚcheck_libhdfs_present/   s
    r   c               
   C   s‚   t j dd¡} t j dd ¡}ztt j dd¡ƒ}W n tk
rN   tdƒ‚Y nX t t¡ tj	 
| ||¡W  5 Q R £ S Q R X d S )NÚARROW_HDFS_TEST_HOSTÚdefaultZARROW_HDFS_TEST_USERÚARROW_HDFS_TEST_PORTr   ú4Env variable ARROW_HDFS_TEST_PORT was not an integer)r   r   r   ÚintÚ
ValueErrorr   ZwarnsÚFutureWarningr   ÚhdfsÚconnect)ÚhostÚuserÚportr   r   r   Úhdfs_test_client8   s    r!   c                   @   sD  e Zd Zdd„ Zedd„ ƒZe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dd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zejjejjd)d*„ ƒƒZejjejjd+d,„ ƒƒZejjejjd-d.„ ƒƒZejjejjd/d0„ ƒƒZejjejjd1d2„ ƒƒZ ejjejjd3d4„ ƒƒZ!d5S )6ÚHdfsTestCasesc              	   C   sF   t | j|ƒ}| |¡ t ||ƒ}| |d¡}| |¡ W 5 Q R X |S )NÚwb)ÚpjoinÚtmp_pathÚmkdirÚopenÚwrite)Úselfr   Z	test_nameZ	test_pathÚ	test_dataÚ	base_pathÚ	full_pathÚfr   r   r   Ú_make_test_fileH   s    

zHdfsTestCases._make_test_filec                 C   s6   |   ¡  tƒ | _d t dd¡¡| _| j | j¡ d S )Nz/tmp/pyarrow-test-{}r   iè  )Úcheck_driverr!   r   ÚformatÚrandomÚrandintr%   r&   ©Úclsr   r   r   Ú
setUpClassS   s    zHdfsTestCases.setUpClassc                 C   s    | j j| jdd | j  ¡  d S )NT©Ú	recursive)r   Údeleter%   Úcloser3   r   r   r   ÚtearDownClassZ   s    zHdfsTestCases.tearDownClassc                 C   sx   t  | j¡}t  |¡}|js t‚|j| jjks2t‚|j| jjksDt‚|j| jjksVt‚|j	| jj	ksht‚| 
| j¡ d S ©N)ÚpickleÚdumpsr   ÚloadsÚis_openÚAssertionErrorr   r    r   Zkerb_ticketÚlsr%   )r)   ÚsÚh2r   r   r   Útest_pickle_   s    

zHdfsTestCases.test_picklec              	   C   sP   t | jdƒ}d}| j |d¡}| |¡ W 5 Q R X | j |¡}||ksLt‚d S )Nzcat-testó	   foobarbazr#   )r$   r%   r   r'   r(   Úcatr@   )r)   ÚpathÚdatar-   Úcontentsr   r   r   Útest_catj   s    zHdfsTestCases.test_catc                 C   sJ   | j  ¡ }| j  ¡ }| j  ¡ }|dks*t‚||ks6t‚||| ksFt‚d S )Nr   )r   Zget_capacityZget_space_usedÚdfr@   )r)   ÚcapacityZ
space_usedZ	disk_freer   r   r   Útest_capacity_spacet   s    


z!HdfsTestCases.test_capacity_spacec              	   C   sF   t ƒ }|jst‚| ¡  |jr"t‚t t¡ | d¡ W 5 Q R X d S )Nú/)r!   r?   r@   r9   r   ÚraisesÚ	ExceptionrA   )r)   Úclientr   r   r   Ú
test_close}   s    

zHdfsTestCases.test_closec                 C   sX   t | jdƒ}t | jdƒ}| j |¡ | j |¡s4t‚| jj|dd | j |¡rTt‚d S )Nztest-dir/test-dirztest-dirTr6   )r$   r%   r   r&   Úexistsr@   r8   )r)   rG   Úparent_pathr   r   r   Ú
test_mkdir†   s    zHdfsTestCases.test_mkdirc              	   C   s¸   t | jdƒ}t | jdƒ}d}| j |d¡}| |¡ W 5 Q R X | j |¡sPt‚| j ||¡ | j |¡rnt‚| j |¡s~t‚| j |¡|ks’t‚| j 	||¡ | j |¡|ks´t‚d S )Nzmv-testzmv-new-testrE   r#   )
r$   r%   r   r'   r(   rS   r@   ÚmvrF   Úrename)r)   rG   Únew_pathrH   r-   r   r   r   Útest_mv_rename   s    zHdfsTestCases.test_mv_renamec              	   C   sš   t | jdƒ}t |dƒ}| j |¡ d}| j |d¡}| |¡ W 5 Q R X | j |¡}| j |¡}|d dksrt‚|d dks‚t‚|d t|ƒks–t‚d S )	Nú	info-baseÚexrE   r#   ÚkindÚ	directoryÚfileÚsize)	r$   r%   r   r&   r'   r(   Úinfor@   Úlen)r)   rG   Ú	file_pathrH   r-   Z	path_infoZfile_path_infor   r   r   Ú	test_info¢   s    
zHdfsTestCases.test_infoc              	   C   sä   t | jdƒ}t |dƒ}t |dƒ}| j |¡ | j |d¡}| d¡ W 5 Q R X | j |¡s`t‚| j |¡spt‚| j |¡r€t‚| j |¡st‚| j |¡r t‚| j |¡r°t‚| j 	|¡rÀt‚| j 	|¡sÐt‚| j 	|¡ràt‚d S )NrZ   r[   zthis-path-is-missingr#   rE   )
r$   r%   r   r&   r'   r(   rS   r@   ÚisdirÚisfile)r)   Údir_pathrb   Zmissing_pathr-   r   r   r   Útest_exists_isdir_isfile³   s    

z&HdfsTestCases.test_exists_isdir_isfilec           	   
   C   s¾   t | jdƒ}t |dƒ}t |dƒ}t |dƒ}t |dƒ}| j |¡rN| j |d¡ | j |¡ | j |¡ d}|||fD ](}| j |d¡}| |¡ W 5 Q R X qt| j |¡t	|ƒd	 ksºt
‚d S )
Nzdisk-usage-baseÚp1Úp2ÚsubdirÚp3TrE   r#   é   )r$   r%   r   rS   r8   r&   r'   r(   Ú
disk_usagera   r@   )	r)   rG   rh   ri   rj   rk   rH   rb   r-   r   r   r   Útest_disk_usageÈ   s    



zHdfsTestCases.test_disk_usagec                 C   sv   t | jdƒ}| j |¡ t |dƒ}t |dƒ}| j |¡ | j |d¡}| d¡ t| j |d¡ƒ}|||gksrt‚d S )Nzls-testza-dirza-file-1r#   ó
   aaaaaaaaaaF)	r$   r%   r   r&   r'   r(   ÚsortedrA   r@   )r)   r+   rf   Zf1_pathr-   rI   r   r   r   Útest_lsÞ   s    


zHdfsTestCases.test_lsc              	   C   s4   t | jdƒ}| j |d¡}| d¡ W 5 Q R X d S )Nz
chmod-testr#   ro   )r$   r%   r   r'   r(   )r)   rG   r-   r   r   r   Útest_chmod_chowní   s    zHdfsTestCases.test_chmod_chownc                 C   sb   t | jdƒ}d}t|ƒ}| d¡ | j ||¡ tƒ }| j ||¡ | d¡ | ¡ |ks^t‚d S )Nzupload-testrE   r   )	r$   r%   r   Úseekr   ÚuploadÚdownloadÚgetvaluer@   )r)   r+   rH   ÚbufZout_bufr   r   r   Útest_download_uploadò   s    

z"HdfsTestCases.test_download_uploadc              	   C   sx   t | jdƒ}d}| j |d¡}| |¡ W 5 Q R X | j |d¡,}| ¡ dksTt‚| d¡}||ksjt‚W 5 Q R X d S )Nzctx-managers   foor#   Úrbrl   é
   )r$   r%   r   r'   r(   r_   r@   Úread©r)   rG   rH   r-   Úresultr   r   r   Útest_file_context_manager   s    
z'HdfsTestCases.test_file_context_managerc              	   C   s2   t | jdƒ}t t¡ | j |¡ W 5 Q R X d S )Nzdoes-not-exist-123)r$   r%   r   rO   ÚFileNotFoundErrorr   r'   )r)   rG   r   r   r   Útest_open_not_exist  s    z!HdfsTestCases.test_open_not_existc              	   C   s,   t  ttf¡ | j dd¡ W 5 Q R X d S )NrN   r#   )r   rO   ÚFileExistsErrorÚIsADirectoryErrorr   r'   )r)   r   r   r   Útest_open_write_error  s    z#HdfsTestCases.test_open_write_errorc              	   C   sf   t | jdƒ}d}| j |d¡}| |¡ W 5 Q R X | j |d¡}| ¡ }W 5 Q R X ||ksbt‚d S )Nzread-whole-files¸  foofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoofoor#   ry   )r$   r%   r   r'   r(   r{   r@   r|   r   r   r   Útest_read_whole_file  s    z"HdfsTestCases.test_read_whole_filec              
   C   sÀ   dd l m} d}d}g }t|ƒD ]}t||d}t || |d | ¡|d< |d  tj¡|d< t|d 	|¡ƒ}t
jj|d	d
}	| j |d¡}
| |	|
¡ W 5 Q R X | |	¡ q t
 |¡}|S )Nr   rz   é   ©Úseedé   ÚindexÚuint32z
{}.parquetF©Zpreserve_indexr#   )Úpyarrow.parquetÚparquetÚranger   ÚnpZarangeÚastypeÚint64r$   r0   r   ÚTableÚfrom_pandasr   r'   Úwrite_tableÚappendZconcat_tables)r)   ÚtmpdirÚpqZnfilesr_   r*   ÚirK   rG   Útabler-   Úexpectedr   r   r   Ú_write_multiple_hdfs_pq_files"  s    
z+HdfsTestCases._write_multiple_hdfs_pq_filesc                 C   sZ   t | jdtƒ  ƒ}| j |¡ |  |¡}| j |¡}t| ¡ j	ddj
dd| ¡ ƒ d S )Nzmulti-parquet-r‰   ©ZbyT©Zdrop)r$   r%   r	   r   r&   r›   Zread_parquetr
   Ú	to_pandasÚsort_valuesÚreset_index)r)   r–   rš   r}   r   r   r   Ú test_read_multiple_parquet_files:  s    
þz.HdfsTestCases.test_read_multiple_parquet_filesc                 C   sl   dd l m} t| jdtƒ  ƒ}| j |¡ |  |¡}t|ƒ}| 	|¡}t
| ¡ jddjdd| ¡ ƒ d S )Nr   zmulti-parquet-uri-r‰   rœ   Tr   )rŒ   r   r$   r%   r	   r   r&   r›   Ú_get_hdfs_uriÚ
read_tabler
   rž   rŸ   r    )r)   r—   r–   rš   rG   r}   r   r   r   Ú)test_read_multiple_parquet_files_with_uriJ  s    

þz7HdfsTestCases.test_read_multiple_parquet_files_with_uric                 C   s¢   dd l m} t| jdtƒ  ƒ}| j |¡ tt|dƒƒ}d}t|dd}|d  	t
j¡|d< tjj|dd}|j||| jd	 |j|| jd
d ¡ }t||ƒ d S )Nr   zuri-parquet-ztest.parquetr…   r†   rŠ   Fr‹   ©Ú
filesystemT)r¦   Zuse_legacy_dataset)rŒ   r   r$   r%   r	   r   r&   r¢   r   r   r   r‘   r   r’   r“   r”   r£   rž   r
   )r)   r—   r–   rG   r_   rK   r™   r}   r   r   r   Ú&test_read_write_parquet_files_with_uri\  s      ÿ
z4HdfsTestCases.test_read_write_parquet_files_with_uric                 C   s.   t | jdtƒ  ƒ}| j |¡ t| j|ƒ d S )Nzcommon-metadata-)r$   r%   r	   r   r&   r   ©r)   r–   r   r   r   Útest_read_common_metadata_filess  s    z-HdfsTestCases.test_read_common_metadata_filesc                 C   s0   t | jdtƒ  ƒ}| j |¡ t|| jd d S )Nzwrite-partitions-r¥   )r$   r%   r	   r   r&   r   r¨   r   r   r   Ú%test_write_to_dataset_with_partitionsz  s     ÿz3HdfsTestCases.test_write_to_dataset_with_partitionsc                 C   s0   t | jdtƒ  ƒ}| j |¡ t|| jd d S )Nzwrite-no_partitions-r¥   )r$   r%   r	   r   r&   r   r¨   r   r   r   Ú#test_write_to_dataset_no_partitions‚  s     ÿz1HdfsTestCases.test_write_to_dataset_no_partitionsN)"Ú__name__Ú
__module__Ú__qualname__r.   Úclassmethodr5   r:   rD   rJ   rM   rR   rU   rY   rc   rg   rn   rq   rr   rx   r~   r€   rƒ   r„   r›   r   ÚmarkÚpandasr   r¡   r¤   r§   r©   rª   r«   r   r   r   r   r"   E   sP   


		
r"   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestLibHdfsc                 C   s
   t ƒ  d S r;   )r   r3   r   r   r   r/     s    zTestLibHdfs.check_driverc                 C   s,   t ƒ }|  |ddd¡}| |¡}d }d }d S )NZorphaned_file_testÚfnamerE   )r!   r.   r'   )r)   r   rb   r-   r   r   r   Útest_orphaned_file‘  s    
ÿ
zTestLibHdfs.test_orphaned_fileN)r¬   r­   r®   r¯   r/   r´   r   r   r   r   r²   ‹  s   
r²   c                 C   sT   t j dd¡}ztt j dd¡ƒ}W n tk
r@   tdƒ‚Y nX d ||| ¡}|S )Nr   Ú	localhostr   r   r   zhdfs://{}:{}{})r   r   r   r   r   r0   )rG   r   r    Úurir   r   r   r¢   ›  s    r¢   c            
   	   C   s°   t ƒ  zdd l} W n tk
r0   t d¡ Y nX dd lm} t d¡}tƒ }t	 
¡ }tj |¡}d}| |d¡}| ||¡ W 5 Q R X |j||jd}| ¡ }	t|	|ƒ d S )Nr   z fastparquet test requires snappyÚfastparquetz/tmp/testing.parquetr#   )Z	open_with)r   ÚsnappyÚImportErrorr   r   rŒ   r   Zimportorskipr!   r   Zmake_dataframer   r’   r“   r'   r”   ZParquetFilerž   r
   )
r¸   r—   r·   ÚfsrK   r™   rG   r-   Zparquet_filer}   r   r   r   Útest_fastparquet_read_with_hdfs§  s     
r»   )'r   r<   r1   ZunittestÚior   Úos.pathr   r$   Znumpyr   r   Zpyarrowr   Zpyarrow.testsr   Zpyarrow.tests.parquet.commonr   Z"pyarrow.tests.parquet.test_datasetr   r   r   Zpyarrow.utilr	   Zpandas.testingr
   r¹   r   r!   r°   r   r"   ZTestCaser²   r¢   r±   r   r·   r»   r   r   r   r   Ú<module>   s:   	  G