o
    "if7                     @   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Zd dlZd dl	Z	d dl
mZ d dlmZ d dlmZ d dlmZmZ edZdedefd	d
ZG dd deZdddZdd ZG dd dejZdS )    N)AbstractFileSystem)compr)get_compression)
isfilelikestringify_pathzfsspec.localtextprefixc                 C   s   |  |r| t|d  S | S N)
startswithlen)r   r    r   U/var/www/html/corbot_env/lib/python3.10/site-packages/fsspec/implementations/local.py_remove_prefix   s   
r   c                       s*  e Zd ZdZdZdZdZdA fdd	Zedd	 Z	dBd
dZ
dAddZdd ZdAddZdd Zdd Zdd Zdd Zdd ZdCddZdCdd Zd!d" Zd#d$ Zd%d& Zd'efd(d)Zd*d+ ZdDd,d-Zd.d/ ZdEd1d2ZdBd3d4Zd5d6 Zd7d8 Z e!d9d: Z"e!dAd;d<Z#d=d> Z$d?d@ Z%  Z&S )FLocalFileSystema   Interface to files on local storage

    Parameters
    ----------
    auto_mkdir: bool
        Whether, when opening a file, the directory containing it should
        be created (if it doesn't already exist). This is assumed by pyarrow
        code.
    /)filelocalTFc                    s   t  jdi | || _d S )Nr   )super__init__
auto_mkdir)selfr   kwargs	__class__r   r   r   '   s   
zLocalFileSystem.__init__c                 C      dS )Nr   r   r   r   r   r   fsid+   s   zLocalFileSystem.fsidc                 K   sH   |  |}| |rt||r| j|dd d S tj|fi | d S )NTexist_ok)_strip_protocolexistsFileExistsErrormakedirsosmkdir)r   pathcreate_parentsr   r   r   r   r$   /   s   

zLocalFileSystem.mkdirc                 C   s   |  |}tj||d d S )Nr   )r   r#   r"   )r   r%   r   r   r   r   r"   8   s   
zLocalFileSystem.makedirsc                 C   s   |  |}t| d S r	   )r   r#   rmdirr   r%   r   r   r   r'   <   s   
zLocalFileSystem.rmdirc                    sz     |} |}|d dkr/t|} fdd|D }W d    n1 s)w   Y  n|g}|s;dd |D S |S )Ntype	directoryc                    s   g | ]}  |qS r   )info).0fr   r   r   
<listcomp>E   s    z&LocalFileSystem.ls.<locals>.<listcomp>c                 S   s   g | ]}|d  qS )namer   )r,   ir   r   r   r.   J   s    )r   r+   r#   scandir)r   r%   detailr   r+   itinfosr   r   r   ls@   s   

zLocalFileSystem.lsc           	      K   s<  t |tjr+|jdd}| }|jddrd}n|jddr"d}nd}| |j}n/| |}tj|dd}t	|j
}|rFtj|dd}t|j
rOd}nt|j
rXd}nd}||j||j|d}dD ]}t|d	| ||< qf|d
 rt||d< ztj|dd}|j|d< W |S  ty   d|d< Y |S w |S )NF)follow_symlinksr*   r   otherT)r/   sizer)   createdislink)modeuidgidmtimeinonlinkst_r:   destinationr8   r   )
isinstancer#   DirEntrystat
is_symlinkis_diris_filer   r%   S_ISLNKst_modeS_ISDIRS_ISREGst_sizest_ctimegetattrreadlinkOSError)	r   r%   r   outlinktresultfieldout2r   r   r   r+   M   sL   

zLocalFileSystem.infoc                 K   s
   t |S r	   )osplexists)r   r%   r   r   r   r   rY   x      
zLocalFileSystem.lexistsc                 K   st   | j |dd}| j |dd}| jr| j| |dd | |r(t|| d S | |r6| j|dd d S t	|)NTremove_trailing_slashr   )
r   r   r"   _parentisfileshutilcopyfileisdirmkdirsFileNotFoundErrorr   path1path2r   r   r   r   cp_file{   s   

zLocalFileSystem.cp_filec                 C      |  |}tj|S r	   )r   r#   r%   r^   r(   r   r   r   r^         
zLocalFileSystem.isfilec                 C   rh   r	   )r   r#   r%   ra   r(   r   r   r   ra      ri   zLocalFileSystem.isdirNc                 K   sX   t |r"t|d}t|| W d    d S 1 sw   Y  d S | j||fi |S )Nrb)r   openr_   copyfileobjrg   )r   re   rf   callbackr   r-   r   r   r   get_file   s
   "zLocalFileSystem.get_filec                 K   s   | j ||fi |S r	   )rg   )r   re   rf   rm   r   r   r   r   put_file      zLocalFileSystem.put_filec                 K   s,   | j |dd}| j |dd}t|| d S )NTr[   )r   r_   moverd   r   r   r   mv_file   s   zLocalFileSystem.mv_filec                 K   ,   |  |}|  |}tj||fi | d S r	   )r   r#   rS   r   srcdstr   r   r   r   rS         

zLocalFileSystem.linkc                 K   rs   r	   )r   r#   symlinkrt   r   r   r   rx      rw   zLocalFileSystem.symlinkreturnc                 C   s   t j| |S r	   )r#   r%   r:   r   r(   r   r   r   r:         zLocalFileSystem.islinkc                 C   s   t | | d S r	   )r#   remover   r(   r   r   r   rm_file   rp   zLocalFileSystem.rm_filec                 C   sr   t |ts|g}|D ],}| j|dd}| |r1|stdt|t kr+tdt	
| q
t| q
d S )NTr[   z+Cannot delete directory, set recursive=Truez'Cannot delete current working directory)rC   listr   ra   
ValueErrorrX   abspathr#   getcwdr_   rmtreer{   )r   r%   	recursivemaxdepthpr   r   r   rm   s   

zLocalFileSystem.rmc                 C   s   |  |}d| S )Nfile://)r   )r   r/   r   r   r   unstrip_protocol   s   

z LocalFileSystem.unstrip_protocolrj   c                 K   sB   |  |}| jrd|v r| j| |dd t||fd| i|S )NwTr   fs)r   r   r"   r]   LocalFileOpener)r   r%   r;   
block_sizer   r   r   r   _open   s   
zLocalFileSystem._openc                 K   sb   |  |}| jr| j| |dd | |rt|d  nt|d  |r/t	|d d S d S )NTr   ar   )
r   r   r"   r]   r    r#   utimerk   closetruncate)r   r%   r   r   r   r   r   touch   s   

zLocalFileSystem.touchc                 C   $   | j |d}tjj|d tjjdS )Nr%   r9   tzr+   datetimefromtimestamptimezoneutcr   r%   r+   r   r   r   r9      s   zLocalFileSystem.createdc                 C   r   )Nr   r>   r   r   r   r   r   r   modified   s   zLocalFileSystem.modifiedc                 C   sh   | j |dd}tjdkr|ddd pdS |ddd }t|dkr2|dd dkr2|d d	 S |S )
NTr[   r      r         ::/)r   r#   seprsplitr   )clsr%   path_r   r   r   r]      s   
zLocalFileSystem._parentc                 C   sp   t |}|drtt|dd}tjdkr|d}n|dr3tt|dd}tjdkr3|d}t||S )Nzfile:r   \r   zlocal:zlocal://)r   r
   r   r#   r   lstripmake_path_posix)r   r%   r\   r   r   r   r      s   






zLocalFileSystem._strip_protocolc                 C   r   NTr   r   r   r   r   _isfilestore   s   zLocalFileSystem._isfilestorec                 C   s   t |}t||S r	   )r   r#   chmod)r   r%   r;   r   r   r   r      s   zLocalFileSystem.chmodF)Tr	   )FN)rj   N)'__name__
__module____qualname____doc__root_markerprotocol
local_filer   propertyr   r$   r"   r'   r5   r+   rY   rg   r^   ra   rn   ro   rr   rS   rx   boolr:   r|   r   r   r   r   r9   r   classmethodr]   r   r   r   __classcell__r   r   r   r   r      sH    



	
+





r   Fc                    s  t | ts t | tttfrt|  fdd| D S tt| } tjdkrj| 	dr5 r3| 
dp2dS | S | 	drBtt|  S | 	dra| dd } t  d|  }  r_| 
dp^dS | S t  d|  S t| dkr| d d	krt| d
kr| d d S | dddd}  r| 
dS | S | d dkrtt|  S | 	drd| dd dddd }  r| 
dS | S tt|  S )z Make path generic for current OSc                 3   s    | ]}t | V  qd S r	   )r   )r,   r   r[   r   r   	<genexpr>  s    z"make_path_posix.<locals>.<genexpr>r   ~z./r   Nr   r   r   r   r   r   //)z\\r   )rC   strr}   settupler)   r   r#   r   r
   rstripr   rX   
expanduserr   r   replacer   )r%   r\   r   r[   r   r     s4   





 r   c                 C   s"   |  tjptjduo|  tjS )zReturn True if the path ends with a path separator.

    A forward slash is always considered a path separator, even on Operating
    Systems that normally use a backslash.
    N)endswithr#   r   altsepr   r   r   r   trailing_sep*  s   "	r   c                   @   s   e Zd Z	d6ddZdd Zdd Zd	d
 Zdd Zdd Zdd Z	de
fddZde
f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d7defd&d'Zed(d) Zd*d+ Zd8d,d-Zd.d/ Zd0d1 Zd2d3 Zd4d5 ZdS )9r   TNc                 K   sJ   t d| || _|| _|| _d | _|| _t||| _t	j
| _|   d S )Nzopen file: %s)loggerdebugr%   r;   r   r-   
autocommitr   compressionioDEFAULT_BUFFER_SIZE	blocksizer   )r   r%   r;   r   r   r   r   r   r   r   r   7  s   zLocalFileOpener.__init__c                 C   s   | j d u s	| j jr\| jsd| jvr,t| j| jd| _ | jr+t| j }|| j | jd| _ nt	 \}}t
| || _t|| jd| _ d| jvr^| j dd| _| j d | j| j _d S d S d S )Nr   r;   r   r   )r-   closedr   r;   rk   r%   r   r   tempfilemkstempr#   r   tempseekr8   )r   compressr0   r/   r   r   r   r   D  s"   


zLocalFileOpener._openc                 C   s2   d| j vrt|   | j| | j|| S Nr)r;   r~   r   r-   r   read)r   startendr   r   r   _fetch_rangeV  s
   
zLocalFileOpener._fetch_rangec                 C   sL   d | _ |dd }| j| d|d v r$d | _ |   | j | d S d S )Nlocr   r;   )r-   pop__dict__updater   r   )r   stater   r   r   r   __setstate__^  s   zLocalFileOpener.__setstate__c                 C   sD   | j  }|d d| jv r| j |d< |S | jjs td|S )Nr-   r   r   z+Cannot serialise open write-mode local file)r   copyr   r;   r-   tellr   r~   )r   dr   r   r   __getstate__g  s   


zLocalFileOpener.__getstate__c                 C   s"   | j rtdt| j| j d S )Nz0Can only commit if not already set to autocommit)r   RuntimeErrorr_   rq   r   r%   r   r   r   r   commitq  s   zLocalFileOpener.commitc                 C   s   | j rtdt| j d S )Nz#Cannot discard if set to autocommit)r   r   r#   r{   r   r   r   r   r   discardv  s   zLocalFileOpener.discardry   c                 C   r   r   r   r   r   r   r   readable{  s   zLocalFileOpener.readablec                 C   s
   d| j vS r   r   r   r   r   r   writable~  rZ   zLocalFileOpener.writablec                 O      | j j|i |S r	   )r-   r   r   argsr   r   r   r   r     rz   zLocalFileOpener.readc                 O   r   r	   )r-   writer   r   r   r   r     rz   zLocalFileOpener.writec                 O   r   r	   )r-   r   r   r   r   r   r     rz   zLocalFileOpener.tellc                 O   r   r	   )r-   r   r   r   r   r   r     rz   zLocalFileOpener.seekc                 O   r   r	   )r-   seekabler   r   r   r   r     rz   zLocalFileOpener.seekablec                 O   r   r	   )r-   readliner   r   r   r   r     rz   zLocalFileOpener.readlinec                 O   r   r	   )r-   	readlinesr   r   r   r   r     rz   zLocalFileOpener.readlinesc                 C   
   | j  S r	   )r-   r   r   r   r   r   r     rZ   zLocalFileOpener.closec                 C   s   | j |S r	   )r-   r   )r   r8   r   r   r   r        zLocalFileOpener.truncatec                 C   s   | j jS r	   )r-   r   r   r   r   r   r     s   zLocalFileOpener.closedc                 C   r   r	   )rawfilenor   r   r   r   r     rZ   zLocalFileOpener.filenoc                 C   s   | j   d S r	   )r-   flushr   r   r   r   r     s   zLocalFileOpener.flushc                 C   r   r	   )r-   __iter__r   r   r   r   r     rZ   zLocalFileOpener.__iter__c                 C   s   t | j|S r	   )rO   r-   )r   itemr   r   r   __getattr__  r   zLocalFileOpener.__getattr__c                 C   s
   d| _ | S r   )
_incontextr   r   r   r   	__enter__  s   zLocalFileOpener.__enter__c                 C   s   d| _ | j||| d S )NF)r   r-   __exit__)r   exc_type	exc_value	tracebackr   r   r   r     s   zLocalFileOpener.__exit__)TNNr	   )ry   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   intr   r   r   r   r   r   r   r   r   r   r   r   r   r   6  s8    
	


r   r   )r   r   loggingr#   os.pathr%   rX   r_   rE   r   fsspecr   fsspec.compressionr   fsspec.corer   fsspec.utilsr   r   	getLoggerr   r   r   r   r   r   IOBaser   r   r   r   r   <module>   s&    
 
m&