
    OOId1                        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Zd dlmZ d dlmZ d dlmZ d dlmZmZ  ej        d          Z G d de          Zej        fd	Z G d
 dej                  ZdS )    N)AbstractFileSystem)compr)get_compression)
isfilelikestringify_pathzfsspec.localc                       e Zd ZdZdZdZdZd$ fd	Zed             Z	d%dZ
d$d	Zd
 Zd$dZ fdZd Zd Zd Zd&dZd&dZd Zd Zd ZdefdZd Zd'dZd Zd(dZd%dZd Zd Ze d              Z!e d!             Z"d" Z#d# Z$ xZ%S ))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.
    /fileTFc                 H     t                      j        di | || _        d S )N )super__init__
auto_mkdir)selfr   kwargs	__class__s      <lib/python3.11/site-packages/fsspec/implementations/local.pyr   zLocalFileSystem.__init__#   s+    ""6"""$    c                     dS )Nlocalr   r   s    r   fsidzLocalFileSystem.fsid'   s    wr   c                     |                      |          }|                     |          rt          |          |r|                     |d           d S t	          j        |fi | d S )NTexist_ok)_strip_protocolexistsFileExistsErrormakedirsosmkdir)r   pathcreate_parentsr   s       r   r"   zLocalFileSystem.mkdir+   sy    ##D));;t 	(!$''' 	%MM$M.....HT$$V$$$$$r   c                 \    |                      |          }t          j        ||           d S )Nr   )r   r!   r    )r   r#   r   s      r   r    zLocalFileSystem.makedirs4   s0    ##D))
D8,,,,,,r   c                 X    |                      |          }t          j        |           d S N)r   r!   rmdirr   r#   s     r   r(   zLocalFileSystem.rmdir8   s&    ##D))
r   c                                                      |r<t          j                  5 } fd|D             cd d d            S # 1 swxY w Y   d S fdt          j                  D             S )Nc                 :    g | ]}                     |          S r   )info).0fr   s     r   
<listcomp>z&LocalFileSystem.ls.<locals>.<listcomp>@   s#    111		!111r   c                 :    g | ]}t          j        |          S r   )	posixpathjoin)r-   r.   r#   s     r   r/   z&LocalFileSystem.ls.<locals>.<listcomp>B   s%    FFFIN4++FFFr   )r   r!   scandirlistdir)r   r#   detailr   its   ``   r   lszLocalFileSystem.ls<   s    ##D)) 	GD!! 2R1111b1112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 GFFFRZ5E5EFFFFs   A		AAc                 b    |                      |          } t                      j        |fi |S r'   )r   r   glob)r   r#   r   r   s      r   r9   zLocalFileSystem.globD   s4    ##D))uww|D++F+++r   c                 ^   t          |t          j                  ry|                    d          }|                                }|                    d          rd}n|                    d          rd}nd}|                     |j                  }n|                     |          }t          j        |d          }t          j	        |j
                  }|rt          j        |d          }t          j        |j
                  rd}nt          j        |j
                  rd}nd}||j        ||j        |d}dD ]}t          |d	|z             ||<   |d
         rNt          j        |          |d<   	 t          j        |d          }|j        |d<   n# t"          $ r d|d<   Y nw xY w|S )NF)follow_symlinks	directoryr   otherT)namesizetypecreatedislink)modeuidgidmtimeinonlinkst_rB   destinationr?   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IOError)	r   r#   r   outlinktresultfieldout2s	            r   r,   zLocalFileSystem.infoH   s   dBK(( 	))E)22C??$$D{{5{11 e44 ''	22DD ''--D'$666C<,,D :gdD999|CK(( ck** K|
 
 E 	8 	8E#C77F5MM( 	#$&K$5$5F=!#wtT:::!%v # # #!"v#s   7 F F*)F*c                 *    t          j        |          S r'   )osplexists)r   r#   r   s      r   rb   zLocalFileSystem.lexistss   s    {4   r   c                    |                      |                              d          }|                      |                              d          }| j        r*|                     |                     |          d           |                     |          rt          j        ||           d S |                     |          r| 	                    |d           d S t          |          )Nr
   Tr   )r   rstripr   r    _parentisfileshutilcopyfileisdirmkdirsFileNotFoundErrorr   path1path2r   s       r   cp_filezLocalFileSystem.cp_filev   s    $$U++22377$$U++22377? 	>MM$,,u--M===;;u 	+OE5)))))ZZ 	+KKK-----#E***r   Nc                     t          |          r@t          |d          5 }t          j        ||           d d d            d S # 1 swxY w Y   d S  | j        ||fi |S )Nrb)r   openrg   copyfileobjro   )r   rm   rn   callbackr   r.   s         r   get_filezLocalFileSystem.get_file   s    e 	8eT"" -a"1e,,,- - - - - - - - - - - - - - - - - -  4<u77777s   AA
Ac                       | j         ||fi |S r'   )ro   )r   rm   rn   rt   r   s        r   put_filezLocalFileSystem.put_file   s    t|E533F333r   c                     |                      |                              d          }|                      |                              d          }t          j        ||           d S )Nr
   )r   rd   rg   moverl   s       r   mv_filezLocalFileSystem.mv_file   s\    $$U++22377$$U++22377E5!!!!!r   c                     |                      |          }|                      |          }t          j        ||fi | d S r'   )r   r!   r[   r   srcdstr   s       r   r[   zLocalFileSystem.link   sH    ""3''""3''
S##F#####r   c                     |                      |          }|                      |          }t          j        ||fi | d S r'   )r   r!   symlinkr|   s       r   r   zLocalFileSystem.symlink   sH    ""3''""3''

3&&v&&&&&r   returnc                 f    t           j                            |                     |                    S r'   )r!   r#   rB   r   r)   s     r   rB   zLocalFileSystem.islink   s$    w~~d22488999r   c                 .    t          j        |           d S r'   )r!   remover)   s     r   rm_filezLocalFileSystem.rm_file   s    
	$r   c                    t          |t                    s|g}|D ]}|                     |                              d          }|rb|                     |          rMt          j        |          t          j                    k    rt          d          t          j        |           t          j        |           d S )Nr
   z'Cannot delete current working directory)rK   listr   rd   ri   ra   abspathr!   getcwd
ValueErrorrg   rmtreer   )r   r#   	recursivemaxdepthps        r   rmzLocalFileSystem.rm   s    $%% 	6D 	 	A$$Q''..s33A TZZ]] ;q>>RY[[00$%NOOOa    	!	 	r   c                 6    |                      |          }d| S )Nfile://)r   )r   r>   s     r   unstrip_protocolz LocalFileSystem.unstrip_protocol   s#    ##D))r   rq   c                     |                      |          }| j        r.d|v r*|                     |                     |          d           t	          ||fd| i|S )NwTr   fs)r   r   r    re   LocalFileOpener)r   r#   rC   
block_sizer   s        r   _openzLocalFileSystem._open   sf    ##D))? 	=sd{{MM$,,t,,tM<<<tT==d=f===r   c                 ^   |                      |          }| j        r*|                     |                     |          d           |                     |          rt          j        |d            n"t          |d                                           |rt          j	        |d           d S d S )NTr   ar   )
r   r   r    re   r   r!   utimerr   closetruncate)r   r#   r   r   s       r   touchzLocalFileSystem.touch   s    ##D))? 	=MM$,,t,,tM<<<;;t 	$HT4    sOO!!### 	!Ka     	! 	!r   c                 x    |                      |          }t          j                            |d                   S )Nr#   rA   r,   datetimeutcfromtimestampr   r#   r,   s      r   rA   zLocalFileSystem.created   s0    yydy## 11$y/BBBr   c                 x    |                      |          }t          j                            |d                   S )Nr   rF   r   r   s      r   modifiedzLocalFileSystem.modified   s0    yydy## 11$w-@@@r   c                     |                      |                              d          }d|v r|                    dd          d         S | j        S )Nr
      r   )r   rd   rsplitroot_markerclsr#   s     r   re   zLocalFileSystem._parent   sM    ""4((//44$;;;;sA&&q))?"r   c                     t          |          }|                    d          r|dd          }n|                    d          r
|dd          }t          |                              d          p| j        S )Nr      zfile:   r
   )r   
startswithmake_path_posixrd   r   r   s     r   r   zLocalFileSystem._strip_protocol   sv    d##??9%% 	8DD__W%% 	8Dt$$++C00CCOCr   c                     dS NTr   r   s    r   _isfilestorezLocalFileSystem._isfilestore   s	     tr   c                 J    t          |          }t          j        ||          S r'   )r   r!   chmod)r   r#   rC   s      r   r   zLocalFileSystem.chmod   s!    d##xd###r   )F)Tr'   )FN)rq   N)&__name__
__module____qualname____doc__r   protocol
local_filer   propertyr   r"   r    r(   r7   r9   r,   rb   ro   ru   rw   rz   r[   r   boolrB   r   r   r   r   r   rA   r   classmethodre   r   r   r   __classcell__)r   s   @r   r	   r	      sN         KHJ% % % % % %   X% % % %- - - -  G G G G, , , , ,) ) )V! ! !
+ 
+ 
+8 8 8 84 4 4 4" " "
$ $ $
' ' '
:d : : : :          > > > >	! 	! 	! 	!C C CA A A # # [# D D [D  $ $ $ $ $ $ $r   r	   c                    t          | t          t          t          f          r" t	          |           d | D                       S d| v rt          j        |           } |dk    rO|                     d          r| S |                     d          r
| dd         } t          j	                    dz   | z   S || vrd| vs:|dk    r|                     d          r|dk    rcd| vr_|                     d	          sJt          j
        dk    r!t          t          j        |                     S t          j	                    dz   | z   S |                     d
          r
| dd         } t          j        d|           r2| dd                             dd                              dd          } |                     d	          r|                     dd          S t          j        d|           r=|                     d                              dd                              dd          S |                     d          r@d|                     d                              dd                              dd          z   S | S )zMake path genericc              3   4   K   | ]}t          |          V  d S r'   )r   )r-   r   s     r   	<genexpr>z"make_path_posix.<locals>.<genexpr>   s*      ;;/!,,;;;;;;r   ~r
   z./   N\:z\\r   r   z
/[A-Za-z]:r   z//z	[A-Za-z]:)rK   r   settupler@   ra   
expanduserr   r!   r   sepr   r   rematchreplacelstrip)r#   r   s     r   r   r      s]   $sE*++ <tDzz;;d;;;;;;
d{{~d##
czz??3 	K??4   	8Dy{{S 4''	DS__3JJts33J4KKCtOODOOF4K4KO 6T>>"3;t#4#45559;;$t++y!! ABBx	xd## > ABBxc**224==v ' ||D#&&&	xT"" G{{4  ((s33;;D#FFFt MT[[&&..tS99AA$LLLLKr   c                       e Zd Z	 ddZd Zd Zd Zd Zd Zd	 Z	d
e
fdZd
e
fdZd Zd Zd Zd Zd Zd Zd Zd Zed             Zd ZddZd Zd Zd Zd ZdS )r   TNc                     t                               d|           || _        || _        || _        d | _        || _        t          ||          | _        t          j
        | _        |                                  d S )Nzopen file: %s)loggerdebugr#   rC   r   r.   
autocommitr   compressionioDEFAULT_BUFFER_SIZE	blocksizer   )r   r#   rC   r   r   r   r   s          r   r   zLocalFileOpener.__init__  sh     	_d+++		$*4==/

r   c                 B   | j         | j         j        r| j        s	d| j        vrVt	          | j        | j                  | _         | j        r.t          | j                 } || j         | j                  | _         nLt          j	                    \  }}t          j        |           || _        t	          || j                  | _         d| j        vrO| j                             dd          | _        | j                             d           | j        | j         _        d S d S d S )Nr   rC   r   r   )r.   closedr   rC   rr   r#   r   r   tempfilemkstempr!   r   tempseekr?   )r   compressir>   s       r   r   zLocalFileOpener._open!  s   6>TV]> 
4#TY"6"6didi888# >$T%56H%Xdf49===DF #*,,4 	d333$)## FKK1--	A"i > $#r   c                     d| j         vrt          |                                  | j                            |           | j                            ||z
            S Nr)rC   r   r   r.   r   read)r   startends      r   _fetch_rangezLocalFileOpener._fetch_range3  sN    di

Ev{{3;'''r   c                     d | _         |                    dd           }| j                            |           d|d         v r7d | _         |                                  | j                             |           d S d S )Nlocr   rC   )r.   pop__dict__updater   r   )r   stater   s      r   __setstate__zLocalFileOpener.__setstate__;  sw    iit$$U###%-DFJJLLLFKK  r   c                     | j                                         }|                    d           d| j        v r| j                                        |d<   n| j        j        st          d          |S )Nr.   r   r   z+Cannot serialise open write-mode local file)r   copyr   rC   r.   tellr   r   )r   ds     r   __getstate__zLocalFileOpener.__getstate__D  sg    M  	c


$)v{{}}AeHH6= P !NOOOr   c                 p    | j         rt          d          t          j        | j        | j                   d S )Nz0Can only commit if not already set to autocommit)r   RuntimeErrorrg   ry   r   r#   r   s    r   commitzLocalFileOpener.commitN  s8    ? 	SQRRRDIty)))))r   c                 d    | j         rt          d          t          j        | j                   d S )Nz#Cannot discard if set to autocommit)r   r   r!   r   r   r   s    r   discardzLocalFileOpener.discardS  s4    ? 	FDEEE
	$)r   r   c                     dS r   r   r   s    r   readablezLocalFileOpener.readableX  s    tr   c                     d| j         vS r   r   r   s    r   writablezLocalFileOpener.writable[  s    $)##r   c                 &     | j         j        |i |S r'   )r.   r   r   argsr   s      r   r   zLocalFileOpener.read^      tv{D+F+++r   c                 &     | j         j        |i |S r'   )r.   writer   s      r   r  zLocalFileOpener.writea  s    tv|T,V,,,r   c                 &     | j         j        |i |S r'   )r.   r   r   s      r   r   zLocalFileOpener.telld  r  r   c                 &     | j         j        |i |S r'   )r.   r   r   s      r   r   zLocalFileOpener.seekg  r  r   c                 &     | j         j        |i |S r'   )r.   seekabler   s      r   r  zLocalFileOpener.seekablej      tv////r   c                 &     | j         j        |i |S r'   )r.   readliner   s      r   r
  zLocalFileOpener.readlinem  r  r   c                 &     | j         j        |i |S r'   )r.   	readlinesr   s      r   r  zLocalFileOpener.readlinesp  s    tv0000r   c                 4    | j                                         S r'   )r.   r   r   s    r   r   zLocalFileOpener.closes  s    v||~~r   c                     | j         j        S r'   )r.   r   r   s    r   r   zLocalFileOpener.closedv  s    v}r   c                 4    | j                                         S r'   )rawfilenor   s    r   r  zLocalFileOpener.filenoz  s    x   r   c                 8    | j                                          d S r'   )r.   flushr   s    r   r  zLocalFileOpener.flush}  s    r   c                 4    | j                                         S r'   )r.   __iter__r   s    r   r  zLocalFileOpener.__iter__  s    v   r   c                 ,    t          | j        |          S r'   )rW   r.   )r   items     r   __getattr__zLocalFileOpener.__getattr__  s    tvt$$$r   c                     d| _         | S r   )
_incontextr   s    r   	__enter__zLocalFileOpener.__enter__  s    r   c                 L    d| _         | j                            |||           d S )NF)r  r.   __exit__)r   exc_type	exc_value	tracebacks       r   r  zLocalFileOpener.__exit__  s'    )Y77777r   )TNN)r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r  r
  r  r   r   r   r  r  r  r  r  r  r   r   r   r   r     s       @D   ( ( ($( ( (    * * *
  
$    $$ $ $ $ $, , ,- - -, , ,, , ,0 0 00 0 01 1 1     X! ! !   ! ! !% % %  8 8 8 8 8r   r   )r   r   loggingr!   os.pathr#   ra   r1   r   rg   rM   r   fsspecr   fsspec.compressionr   fsspec.corer   fsspec.utilsr   r   	getLoggerr   r	   r   r   IOBaser   r   r   r   <module>r)     s[    				  				           				    % % % % % % $ $ $ $ $ $ ' ' ' ' ' ' 3 3 3 3 3 3 3 3		>	*	*Q$ Q$ Q$ Q$ Q$( Q$ Q$ Q$h !f ( ( ( (Vy8 y8 y8 y8 y8bi y8 y8 y8 y8 y8r   