o
    h!                     @   s   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 d dlmZmZmZmZ dd ZdaG d	d
 d
eZedg dG dd dejZG dd deZdS )    N)suppress)cached_propertywraps)parse_qs)AbstractFileSystem)"get_package_version_without_importinfer_storage_optionsmirror_fromtokenizec                    s   t   fdd}|S )Nc               
      s^   z | i |W S  t y. } z|js |j^}} t|tr)d|v r)ttj|| d }~ww )Nzdoes not exist)OSErrorargs
isinstancestrFileNotFoundErrorerrnoENOENT)r   kwargs	exceptionmessagefunc p/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/fsspec/implementations/arrow.pywrapper   s   
z wrap_exceptions.<locals>.wrapper)r   )r   r   r   r   r   wrap_exceptions   s   r   c                       s   e Zd ZdZdZ fddZedd Zedd Z	e
d	d
 Zd-ddZdd Zdd Zdd Zedd Zedd Zedd Zed.ddZed/dd Zed0d!d"Zed-d#d$Zed%d& Zed'd( Zd1 fd)d*	Z fd+d,Z  ZS )2ArrowFSWrapperzwFSSpec-compatible wrapper of pyarrow.fs.FileSystem.

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

    /c                    s$   t da|| _t jdi | d S )Npyarrowr   )r   PYARROW_VERSIONfssuper__init__)selfr   r   	__class__r   r   r!   3   s   zArrowFSWrapper.__init__c                 C   s   | j jS N)r   	type_namer"   r   r   r   protocol9   s   zArrowFSWrapper.protocolc                 C   s   dt | jj| jj S )Nhdfs_)r
   r   hostportr'   r   r   r   fsid=   s   zArrowFSWrapper.fsidc                 C   s*   t |}|d }|dr|dd  }|S )Npathz//   )r   
startswith)clsr-   opsr   r   r   _strip_protocolA   s
   
zArrowFSWrapper._strip_protocolFc                    sJ     |}ddlm}  fdd j||D }|r|S dd |D S )Nr   )FileSelectorc                    s   g | ]}  |qS r   )_make_entry.0entryr'   r   r   
<listcomp>N   s    z%ArrowFSWrapper.ls.<locals>.<listcomp>c                 S   s   g | ]}|d  qS )namer   r5   r   r   r   r8   U   s    )r2   
pyarrow.fsr3   r   get_file_info)r"   r-   detailr   r3   entriesr   r'   r   lsJ   s   

zArrowFSWrapper.lsc                 K   s$   |  |}| j|g\}| |S r%   )r2   r   r;   r4   )r"   r-   r   infor   r   r   r?   W   s   

zArrowFSWrapper.infoc                 C   s0   |  |}z| | W dS  ty   Y dS w )NFT)r2   r?   r   r"   r-   r   r   r   exists\   s   
zArrowFSWrapper.existsc                 C   sl   ddl m} |j|ju rd}n|j|ju rd}n|j|ju r*ttjt	
tj|jd}|j|j||jdS )Nr   )FileType	directoryfileother)r9   sizetypemtime)r:   rB   rG   	DirectoryFileNotFoundr   r   r   osstrerrorr-   rF   rH   )r"   r?   rB   kindr   r   r   r4   e   s   zArrowFSWrapper._make_entryc                 K   s   |  |d}|  |d}| |d[}| dtd }z%| |d}t|| W d    n1 s9w   Y  | j	|| W n" t
yh   tt | j| W d     1 sbw   Y   w W d    d S 1 stw   Y  d S )Nr   rbz.tmp.   wb)r2   rstrip_opensecrets	token_hexopenshutilcopyfileobjr   moveBaseExceptionr   r   delete_file)r"   path1path2r   lstream	tmp_fnamerstreamr   r   r   cp_filex   s&   

"zArrowFSWrapper.cp_filec                 K   s2   |  |d}|  |d}| j|| d S )Nr   )r2   rR   r   rY   )r"   r\   r]   r   r   r   r   mv   s   zArrowFSWrapper.mvc                 C      |  |}| j| d S r%   )r2   r   r[   r@   r   r   r   rm_file      
zArrowFSWrapper.rm_fileNc                 C   sF   |  |d}| |r|r| j| d S td| j| d S )Nr   z0Can't delete directories without recursive=False)r2   rR   isdirr   
delete_dir
ValueErrorr[   )r"   r-   	recursivemaxdepthr   r   r   rm   s   
zArrowFSWrapper.rmrO   Tc           	      K   s   |dkr|r| j j}n| j j}n|dkr| j j}n|dkr"| j j}ntd|i }|dks1|s@ttdd dkr@d |d< ||fi |}t	| ||||fi |S )	NrO   rQ   abz'unsupported mode for Arrow filesystem: .r      compression)
r   open_input_fileopen_input_streamopen_output_streamopen_append_streamrh   intr   split	ArrowFile)	r"   r-   mode
block_sizeseekabler   method_kwargsstreamr   r   r   rS      s   



zArrowFSWrapper._openc                 K   s4   |  |}|r| j|dd d S | jj|dd d S )NT)exist_okFri   )r2   makedirsr   
create_dir)r"   r-   create_parentsr   r   r   r   mkdir   s   
zArrowFSWrapper.mkdirc                 C   s   |  |}| jj|dd d S )NTr~   )r2   r   r   )r"   r-   r}   r   r   r   r      s   
zArrowFSWrapper.makedirsc                 C   rc   r%   )r2   r   rg   r@   r   r   r   rmdir   re   zArrowFSWrapper.rmdirc                 C   s   |  |}| j|jS r%   )r2   r   r;   rH   r@   r   r   r   modified   s   
zArrowFSWrapper.modifiedc                    s&   |dv|d< t  j|fd d d|S )N)Nr   ry   )startend)r    cat_file)r"   r-   r   r   r   r#   r   r   r      s   zArrowFSWrapper.cat_filec                    s"   d|d< t  j||fi | d S )NFry   )r    get_file)r"   rpathlpathr   r#   r   r   r      s   zArrowFSWrapper.get_file)F)FN)rO   NT)T)NN)__name__
__module____qualname____doc__root_markerr!   propertyr(   r   r,   classmethodr2   r>   r?   rA   r4   r   ra   rb   rd   rk   rS   r   r   r   r   r   r   __classcell__r   r   r#   r   r   (   sD    



	





r   r|   )	readseektellwritereadablewritablecloserF   ry   c                   @   s&   e Zd ZdddZdd Zdd ZdS )	rv   Nc                 K   s.   || _ || _|| _|| _| | _| _|| _d S r%   )r-   rw   r   r|   	blocksizerx   r   )r"   r   r|   r-   rw   rx   r   r   r   r   r!      s   
zArrowFile.__init__c                 C   s   | S r%   r   r'   r   r   r   	__enter__   s   zArrowFile.__enter__c                 G   s   |   S r%   )r   )r"   r   r   r   r   __exit__   s   zArrowFile.__exit__r%   )r   r   r   r!   r   r   r   r   r   r   rv      s    

rv   c                       s>   e Zd ZdZdZ						d fdd	Zed	d
 Z  ZS )HadoopFileSystemz]A wrapper on top of the pyarrow.fs.HadoopFileSystem
    to connect it's interface with fsspechdfsdefaultr   N   c           
         s:   ddl m} |||||||d}	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
        replication: int
            set replication factor of file for write operations. default value is 3.
        extra_conf: None or dict
            Passed on to HadoopFileSystem
        r   )r   )r*   r+   userkerb_ticketreplication
extra_confr   Nr   )r:   r   r    r!   )
r"   r*   r+   r   r   r   r   r   r   r   r#   r   r   r!      s   zHadoopFileSystem.__init__c                 C   s   t | }i }|dd r|d |d< |dd r|d |d< |dd r*|d |d< |dd rFt|d }|dd rFt|d d |d< |S )Nr*   usernamer   r+   	url_queryr   r   )r   getr   rt   )r-   r1   outqueriesr   r   r   _get_kwargs_from_urls"  s   z&HadoopFileSystem._get_kwargs_from_urls)r   r   NNr   N)	r   r   r   r   r(   r!   staticmethodr   r   r   r   r#   r   r      s    'r   )r   iorL   rT   rW   
contextlibr   	functoolsr   r   urllib.parser   fsspec.specr   fsspec.utilsr   r   r	   r
   r   r   r   IOBaserv   r   r   r   r   r   <module>   s(     .