o
    NZh4                     @   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
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G dd deZejfd	d
Zdd ZG dd dejZdS )    N)AbstractFileSystem)compr)get_compression)
isfilelikestringify_pathzfsspec.localc                       s  e Zd ZdZdZdZdZd= fdd	Zedd	 Z	d>d
dZ
d=ddZdd Zd=ddZdd Zdd Zdd Zd?ddZd?ddZdd Zdd  Zd!d" Zd#efd$d%Zd&d' Zd@d(d)Zd*d+ ZdAd-d.Zd>d/d0Zd1d2 Zd3d4 Zed5d6 Z ed7d8 Z!d9d: Z"d;d< Z#  Z$S )B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 )N )super__init__
auto_mkdir)selfr   kwargs	__class__r   S/var/www/html/lang_env/lib/python3.10/site-packages/fsspec/implementations/local.pyr   "   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   pathZ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   3   s   
zLocalFileSystem.makedirsc                 C   s   |  |}t| d S N)r   r   rmdirr   r   r   r   r   r!   7   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>@   s    z&LocalFileSystem.ls.<locals>.<listcomp>c                 S   s   g | ]}|d  qS )namer   )r&   ir   r   r   r(   E   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inoZnlinkZst_r4   destinationr2   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fieldZout2r   r   r   r%   H   sL   

zLocalFileSystem.infoc                 K   s
   t |S r    )osplexists)r   r   r   r   r   r   rP   s      
zLocalFileSystem.lexistsc                 K   sx   |  |d}|  |d}| jr| j| |dd | |r*t|| d S | |r8| j	|dd d S t
|)Nr   Tr   )r   rstripr   r   _parentisfileshutilcopyfileisdirZmkdirsFileNotFoundErrorr   path1path2r   r   r   r   cp_filev   s   

zLocalFileSystem.cp_fileNc                 K   sX   t |r"t|d}t|| W d    d S 1 sw   Y  d S | j||fi |S )Nrb)r   openrU   copyfileobjr\   )r   rZ   r[   callbackr   r'   r   r   r   get_file   s
   "zLocalFileSystem.get_filec                 K   s   | j ||fi |S r    )r\   )r   rZ   r[   r`   r   r   r   r   put_file      zLocalFileSystem.put_filec                 K   s0   |  |d}|  |d}t|| d S )Nr   )r   rR   rU   moverY   r   r   r   mv_file   s   zLocalFileSystem.mv_filec                 K   ,   |  |}|  |}tj||fi | d S r    )r   r   rK   r   srcdstr   r   r   r   rK         

zLocalFileSystem.linkc                 K   rf   r    )r   r   symlinkrg   r   r   r   rk      rj   zLocalFileSystem.symlinkreturnc                 C   s   t j| |S r    )r   r   r4   r   r"   r   r   r   r4         zLocalFileSystem.islinkc                 C   s   t | | d S r    )r   remover   r"   r   r   r   rm_file   rc   zLocalFileSystem.rm_filec                 C   st   t |ts|g}|D ]-}| |d}| |r2|stdt|t	 kr,tdt
| q
t| q
d S )Nr   z+Cannot delete directory, set recursive=Truez'Cannot delete current working directory)r;   listr   rR   rW   
ValueErrorrO   abspathr   getcwdrU   rmtreern   )r   r   	recursiveZ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_protocolr]   c                 K   sB   |  |}| jrd|v r| j| |dd t||fd| i|S )NwTr   fs)r   r   r   rS   LocalFileOpener)r   r   r5   
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   rS   r   r   utimer^   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   r3   tzr%   datetimefromtimestamptimezoneutcr   r   r%   r   r   r   r3      s   zLocalFileSystem.createdc                 C   r   )Nr   r8   r   r   r   r   r   r   modified   s   zLocalFileSystem.modifiedc                 C   s.   |  |d}d|v r|ddd S | jS )Nr      r   )r   rR   rsplitroot_markerclsr   r   r   r   rS      s   zLocalFileSystem._parentc                 C   sz   t |}|dr|dd  }n#|dr|dd  }n|dr(|dd  }n|dr3|dd  }t|d	p<| jS )
Nrx      zfile:   zlocal://   zlocal:   r   )r   
startswithmake_path_posixrR   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   r5   r   r   r   r      s   zLocalFileSystem.chmod)F)Tr    )FN)r]   N)%__name__
__module____qualname____doc__r   protocol
local_filer   propertyr   r   r   r!   r/   r%   rP   r\   ra   rb   re   rK   rk   boolr4   ro   rw   ry   r~   r   r3   r   classmethodrS   r   r   r   __classcell__r   r   r   r   r      sD    



	
+






r   c                 C   s  t | tttfrt| dd | D S d| v rt| } |dkr;| dr'| S | dr2| dd } t	  d|  S || vrCd| vsY|dkrL| drY|dkrnd	| vrn| d
sntj
dkrett| S t	  d|  S | dry| dd } td| r| dd dddd} | d
r| ddS td| r| dddddS | drd| ddddd S | S )zMake path genericc                 s   s    | ]}t |V  qd S r    )r   )r&   rv   r   r   r   	<genexpr>   s    z"make_path_posix.<locals>.<genexpr>~r   z./   N\:z\\rx   r   z
/[A-Za-z]:r   z//z	[A-Za-z]:)r;   rp   settupler#   rO   
expanduserr   r   rs   sepr   rr   rematchreplacelstrip)r   r   r   r   r   r      s6   






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   r5   r{   r'   
autocommitr   compressionioDEFAULT_BUFFER_SIZE	blocksizer~   )r   r   r5   r   r{   r   r   r   r   r   r   '  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 )Nrz   r5   r   r   )r'   closedr   r5   r^   r   r   r   tempfilemkstempr   r   tempseekr2   )r   compressr*   r)   r   r   r   r~   4  s"   


zLocalFileOpener._openc                 C   s2   d| j vrt|   | j| | j|| S Nr)r5   rq   r~   r'   r   read)r   startendr   r   r   _fetch_rangeF  s
   
zLocalFileOpener._fetch_rangec                 C   sL   d | _ |dd }| j| d|d v r$d | _ |   | j | d S d S )Nlocr   r5   )r'   pop__dict__updater~   r   )r   stater   r   r   r   __setstate__N  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   r5   r'   tellr   rq   )r   dr   r   r   __getstate__W  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   RuntimeErrorrU   rd   r   r   r   r   r   r   commita  s   zLocalFileOpener.commitc                 C   s   | j rtdt| j d S )Nz#Cannot discard if set to autocommit)r   r   r   rn   r   r   r   r   r   discardf  s   zLocalFileOpener.discardrl   c                 C   r   r   r   r   r   r   r   readablek  s   zLocalFileOpener.readablec                 C   s
   d| j vS r   r   r   r   r   r   writablen  rQ   zLocalFileOpener.writablec                 O      | j j|i |S r    )r'   r   r   argsr   r   r   r   r   q  rm   zLocalFileOpener.readc                 O   r   r    )r'   writer   r   r   r   r   t  rm   zLocalFileOpener.writec                 O   r   r    )r'   r   r   r   r   r   r   w  rm   zLocalFileOpener.tellc                 O   r   r    )r'   r   r   r   r   r   r   z  rm   zLocalFileOpener.seekc                 O   r   r    )r'   seekabler   r   r   r   r   }  rm   zLocalFileOpener.seekablec                 O   r   r    )r'   readliner   r   r   r   r     rm   zLocalFileOpener.readlinec                 O   r   r    )r'   	readlinesr   r   r   r   r     rm   zLocalFileOpener.readlinesc                 C   
   | j  S r    )r'   r   r   r   r   r   r     rQ   zLocalFileOpener.closec                 C   s   | j |S r    )r'   r   )r   r2   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     rQ   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     rQ   zLocalFileOpener.__iter__c                 C   s   t | j|S r    )rG   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    )rl   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|   &  s8    
	


r|   )r   r   loggingr   Zos.pathr   rO   r   rU   r=   r   Zfsspecr   Zfsspec.compressionr   Zfsspec.corer   Zfsspec.utilsr   r   	getLoggerr   r   r   r   r   IOBaser|   r   r   r   r   <module>   s&    
 ]+