
    OOId0                          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 d dlmZm	Z	 d dl
mZ d dlmZmZmZmZ d Zda G d de          Z ed	g d
           G d dej                              Z G d de          ZdS )    N)suppress)cached_propertywraps)AbstractFileSystem)"get_package_version_without_importinfer_storage_optionsmirror_fromtokenizec                 <     t                      fd            }|S )Nc                      	  | i |S # t           $ rK}|j        s |j        ^}} t          |t                    rd|v rt	          t
          j        |          | d }~ww xY w)Nzdoes not exist)OSErrorargs
isinstancestrFileNotFoundErrorerrnoENOENT)r   kwargs	exceptionmessagefuncs       <lib/python3.11/site-packages/fsspec/implementations/arrow.pywrapperz wrap_exceptions.<locals>.wrapper   s    
	4(((( 	 	 	> &^NGd'3'' ,<,G,G'g>>IM	s    
A AAA )r   )r   r   s   ` r   wrap_exceptionsr      s3    
4[[    [ N    c                   j    e Zd ZdZdZ fdZed             Zed             Z	e
d             ZddZd	 Zd
 Zd Zed             Zed             ZeZed             Zedd            Zedd            Zedd            Zedd            Zed             Zed             Zd fd	Z fdZ xZS )ArrowFSWrapperzwFSSpec-compatible wrapper of pyarrow.fs.FileSystem.

    Parameters
    ----------
    fs : pyarrow.fs.FileSystem

    /c                 f    t          d          a|| _         t                      j        di | d S )Npyarrow )r   PYARROW_VERSIONfssuper__init__)selfr#   r   	__class__s      r   r%   zArrowFSWrapper.__init__2   s:    <YGG""6"""""r   c                     | j         j        S N)r#   	type_namer&   s    r   protocolzArrowFSWrapper.protocol8   s    w  r   c                 P    dt          | j        j        | j        j                  z   S )Nhdfs_)r
   r#   hostportr+   s    r   fsidzArrowFSWrapper.fsid<   s    $',====r   c                 r    t          |          }|d         }|                    d          r
|dd          }|S )Npathz//   )r   
startswith)clsr3   opss      r   _strip_protocolzArrowFSWrapper._strip_protocol@   s>    #D))6{??4   	8Dr   Fc                                            |          }ddlm}  fd j                             ||                    D             }|r|S d |D             S )Nr   )FileSelectorc                 :    g | ]}                     |          S r!   )_make_entry).0entryr&   s     r   
<listcomp>z%ArrowFSWrapper.ls.<locals>.<listcomp>M   s7     
 
 
 U##
 
 
r   c                     g | ]
}|d          S )namer!   )r=   r>   s     r   r?   z%ArrowFSWrapper.ls.<locals>.<listcomp>T   s    777eE&M777r   )r8   
pyarrow.fsr:   r#   get_file_info)r&   r3   detailr   r:   entriess   `     r   lszArrowFSWrapper.lsI   s    ##D))++++++
 
 
 
..||D/A/ABB
 
 
  	8N77w7777r   c                     |                      |          }| j                            |g          \  }|                     |          S r)   )r8   r#   rC   r<   )r&   r3   r   infos       r   rH   zArrowFSWrapper.infoV   sB    ##D))&&v..%%%r   c                 ~    |                      |          }	 |                     |           dS # t          $ r Y dS w xY w)NTF)r8   rH   r   r&   r3   s     r   existszArrowFSWrapper.exists[   sT    ##D))	IIdOOO 4 ! 	 	 	55	s   . 
<<c                    ddl m} |j        |j        u rd}n]|j        |j        u rd}nL|j        |j        u r<t          t          j        t          j
        t          j                  |j                  d}|j        |j        ||j        dS )Nr   )FileType	directoryfileother)rA   sizetypemtime)rB   rM   rR   	DirectoryFileNotFoundr   r   r   osstrerrorr3   rQ   rS   )r&   rH   rM   kinds       r   r<   zArrowFSWrapper._make_entryd   s    ''''''9***DDY(-''DDY(+++#EL"+el2K2KTYWWWD IIZ	
 
 	
r   c                    |                      |                              d          }|                      |                              d          }|                     |d          5 }| dt          j        d           }	 |                     |d          5 }t          j        ||           d d d            n# 1 swxY w Y   | j        	                    ||           nU# t          $ rH t          t                    5  | j                            |           d d d            n# 1 swxY w Y    w xY w	 d d d            d S # 1 swxY w Y   d S )Nr   rbz.tmp.   wb)r8   rstrip_opensecrets	token_hexopenshutilcopyfileobjr#   moveBaseExceptionr   r   delete_file)r&   path1path2r   lstream	tmp_fnamerstreams          r   cp_filezArrowFSWrapper.cp_filew   s   $$U++22377$$U++22377ZZt$$ 		 ==w'8';';==IYYy$// 97&w8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9Y....    /00 3 3G''	2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 /		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		sr   'EC!B:.C!:B>	>C!B>	C! E!D3?D&D3&D**D3-D*.D33EEEc                     |                      |                              d          }|                      |                              d          }| j                            ||           d S )Nr   )r8   r^   r#   re   )r&   rh   ri   r   s       r   mvzArrowFSWrapper.mv   s`    $$U++22377$$U++22377UE"""""r   c                 d    |                      |          }| j                            |           d S r)   )r8   r#   rg   rJ   s     r   rm_filezArrowFSWrapper.rm_file   s1    ##D))D!!!!!r   Nc                    |                      |                              d          }|                     |          r-|r| j                            |           d S t          d          | j                            |           d S )Nr   z0Can't delete directories without recursive=False)r8   r^   isdirr#   
delete_dir
ValueErrorrg   )r&   r3   	recursivemaxdepths       r   rmzArrowFSWrapper.rm   s    ##D))0055::d 	& U""4((((( !STTTG%%%%%r   r[   Tc                 j   |dk    r|r| j         j        }nE| j         j        }n8|dk    r| j         j        }n%|dk    r| j         j        }nt          d|          i }|dk    s|s6t          t                              d          d                   dk    rd |d<    ||fi |}t          | ||||fi |S )	Nr[   r]   abz'unsupported mode for Arrow filesystem: .r      compression)
r#   open_input_fileopen_input_streamopen_output_streamopen_append_streamru   intr"   split	ArrowFile)	r&   r3   mode
block_sizeseekabler   method_kwargsstreams	            r   r_   zArrowFSWrapper._open   s    4<< 302T\\W/FFT\\W/FFOtOOPPP4<<x<?((--a011Q66)-&((((vtT:HHHHHr   c                     |                      |          }|r|                     |d           d S | j                            |d           d S )NT)exist_okFrv   )r8   makedirsr#   
create_dir)r&   r3   create_parentsr   s       r   mkdirzArrowFSWrapper.mkdir   sZ    ##D)) 	6MM$M.....Gtu55555r   c                 h    |                      |          }| j                            |d           d S )NTr   )r8   r#   r   )r&   r3   r   s      r   r   zArrowFSWrapper.makedirs   s6    ##D))4400000r   c                 d    |                      |          }| j                            |           d S r)   )r8   r#   rt   rJ   s     r   rmdirzArrowFSWrapper.rmdir   s1    ##D))4     r   c                 j    |                      |          }| j                            |          j        S r)   )r8   r#   rC   rS   rJ   s     r   modifiedzArrowFSWrapper.modified   s.    ##D))w$$T**00r   c                 L    |dv|d<    t                      j        |fd d d|S )N)Nr   r   )startend)r$   cat_file)r&   r3   r   r   r   r'   s        r   r   zArrowFSWrapper.cat_file   s8    ")3zuwwEDdEEfEEEr   c                 H    d|d<    t                      j        ||fi | d S )NFr   )r$   get_file)r&   rpathlpathr   r'   s       r   r   zArrowFSWrapper.get_file   s4    "z0000000r   )F)FN)r[   NT)T)NN)__name__
__module____qualname____doc__root_markerr%   propertyr,   r   r1   classmethodr8   rF   rH   rK   r<   r   rm   ro   mv_filerq   rx   r_   r   r   r   r   r   r   __classcell__r'   s   @r   r   r   '   s(         K# # # # # ! ! X! > > _>   [8 8 8 8& & &
  
 
 
&   _ # # _#
 G" " _" & & & _& I I I _I, 6 6 6 _6 1 1 1 _1 ! ! _! 1 1 _1F F F F F F1 1 1 1 1 1 1 1 1r   r   r   )	readseektellwritereadablewritablecloserQ   r   c                   "    e Zd ZddZd Zd ZdS )r   Nc                 h    || _         || _        || _        || _        |x| _        | _        || _        d S r)   )r3   r   r#   r   	blocksizer   r   )r&   r#   r   r3   r   r   r   s          r   r%   zArrowFile.__init__   s7    		+55r   c                     | S r)   r!   r+   s    r   	__enter__zArrowFile.__enter__   s    r   c                 *    |                                  S r)   )r   )r&   r   s     r   __exit__zArrowFile.__exit__   s    zz||r   r)   )r   r   r   r%   r   r   r!   r   r   r   r      sF                 r   r   c                   H     e Zd ZdZdZ	 	 	 	 	 d fd	Zed             Z xZS )	HadoopFileSystemz]A wrapper on top of the pyarrow.fs.HadoopFileSystem
    to connect it's interface with fsspechdfsdefaultr   Nc                 j    ddl m}  ||||||          } t                      j        dd|i| dS )a  

        Parameters
        ----------
        host: str
            Hostname, IP or "default" to try to read from Hadoop config
        port: int
            Port to connect on, or default from Hadoop config if 0
        user: str or None
            If given, connect as this username
        kerb_ticket: str or None
            If given, use this ticket for authentication
        extra_conf: None or dict
            Passed on to HadoopFileSystem
        r   )r   )r/   r0   userkerb_ticket
extra_confr#   Nr!   )rB   r   r$   r%   )
r&   r/   r0   r   r   r   r   r   r#   r'   s
            r   r%   zHadoopFileSystem.__init__   sg    0 	0/////#!
 
 
 	))B)&)))))r   c                     t          |           }i }|                    dd           r|d         |d<   |                    dd           r|d         |d<   |                    dd           r|d         |d<   |S )Nr/   usernamer   r0   )r   get)r3   r7   outs      r   _get_kwargs_from_urlsz&HadoopFileSystem._get_kwargs_from_urls  s    #D))7764   	&f+CK77:t$$ 	*j/CK7764   	&f+CK
r   )r   r   NNN)	r   r   r   r   r,   r%   staticmethodr   r   r   s   @r   r   r      s{        - - H !* !* !* !* !* !*F 	 	 \	 	 	 	 	r   r   )r   iorW   r`   rc   
contextlibr   	functoolsr   r   fsspec.specr   fsspec.utilsr   r   r	   r
   r   r"   r   IOBaser   r   r!   r   r   <module>r      s    				 				         , , , , , , , , * * * * * *             $ l1 l1 l1 l1 l1' l1 l1 l1^ 
 
 
     	   $3 3 3 3 3~ 3 3 3 3 3r   