
    >f7                         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j        d          Zdedefd	Z G d
 de          ZddZd Z G d dej                  ZdS )    N)AbstractFileSystem)compr)get_compression)
isfilelikestringify_pathzfsspec.localtextprefixc                 ^    |                      |          r| t          |          d          S | S N)
startswithlen)r   r	   s     k/home/panchajanya/Development/work/volatility3/lib/python3.11/site-packages/fsspec/implementations/local.py_remove_prefixr      s0    v #CKKMM""K    c                       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d Z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%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.
    /)filelocalTFc                 H     t                      j        di | || _        d S )N )super__init__
auto_mkdir)selfr   kwargs	__class__s      r   r   zLocalFileSystem.__init__'   s+    ""6"""$r   c                     dS )Nr   r   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.makedirs8   s0    ##D))
D8,,,,,,r   c                 X    |                      |          }t          j        |           d S r   )r$   r(   rmdirr   r*   s     r   r.   zLocalFileSystem.rmdir<   s&    ##D))
r   c                                           |          }                     |          }|d         dk    r;t          j        |          5 } fd|D             }d d d            n# 1 swxY w Y   n|g}|sd |D             S |S )Ntype	directoryc                 :    g | ]}                     |          S r   )info).0fr   s     r   
<listcomp>z&LocalFileSystem.ls.<locals>.<listcomp>E   s#    222!1222r   c                     g | ]
}|d          S )namer   )r5   is     r   r7   z&LocalFileSystem.ls.<locals>.<listcomp>J   s    ---!AfI---r   )r$   r4   r(   scandir)r   r*   detailr   r4   itinfoss   `      r   lszLocalFileSystem.ls@   s    ##D))yy<;&&D!! 3R2222r2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 FE 	.--u----s   A''A+.A+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	|           ||<   |d
         rNt          j        |          |d<   	 t          j        |d          }|j        |d<   n# t"          $ r d|d<   Y nw xY w|S )NF)follow_symlinksr2   r   otherT)r9   sizer1   createdislink)modeuidgidmtimeinonlinkst_rE   destinationrC   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out2s	            r   r4   zLocalFileSystem.infoM   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u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   re   zLocalFileSystem.lexistsx   s    {4   r   c                    |                      |d          }|                      |d          }| j        r*|                     |                     |          d           |                     |          rt          j        ||           d S |                     |          r|                     |d           d S t          |          )NTremove_trailing_slashr"   )
r$   r   r'   _parentisfileshutilcopyfileisdirmkdirsFileNotFoundErrorr   path1path2r   s       r   cp_filezLocalFileSystem.cp_file{   s    $$U$$GG$$U$$GG? 	>MM$,,u--M===;;u 	+OE5)))))ZZ 	+KKK-----#E***r   c                 j    |                      |          }t          j                            |          S r   )r$   r(   r*   rj   r/   s     r   rj   zLocalFileSystem.isfile   s)    ##D))w~~d###r   c                 j    |                      |          }t          j                            |          S r   )r$   r(   r*   rm   r/   s     r   rm   zLocalFileSystem.isdir   s)    ##D))w}}T"""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   openrk   copyfileobjrs   )r   rq   rr   callbackr   r6   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   )rs   )r   rq   rr   rz   r   s        r   put_filezLocalFileSystem.put_file   s    t|E533F333r   c                     |                      |d          }|                      |d          }t          j        ||           d S )NTrg   )r$   rk   moverp   s       r   mv_filezLocalFileSystem.mv_file   sJ    $$U$$GG$$U$$GG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*   rE   r$   r/   s     r   rE   zLocalFileSystem.islink   s$    w~~d22488999r   c                 T    t          j        |                     |                     d S r   )r(   remover$   r/   s     r   rm_filezLocalFileSystem.rm_file   s&    
	$&&t,,-----r   c                 |   t          |t                    s|g}|D ]}|                     |d          }|                     |          r^|st	          d          t          j        |          t          j                    k    rt	          d          t          j
        |           t          j        |           d S )NTrg   z+Cannot delete directory, set recursive=Truez'Cannot delete current working directory)rN   listr$   rm   
ValueErrorrd   abspathr(   getcwdrk   rmtreer   )r   r*   	recursivemaxdepthps        r   rmzLocalFileSystem.rm   s    $%% 	6D 		 		A$$Qd$CCAzz!}}   T$%RSSS;q>>RY[[00$%NOOOa    	!		 		r   c                 6    |                      |          }d| S )Nfile://)r$   )r   r9   s     r   unstrip_protocolz LocalFileSystem.unstrip_protocol   s#    ##D))r   rw   c                     |                      |          }| j        r.d|v r*|                     |                     |          d           t	          ||fd| i|S )NwTr"   fs)r$   r   r'   ri   LocalFileOpener)r   r*   rF   
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'   ri   r%   r(   utimerx   closetruncate)r   r*   r   r   s       r   touchzLocalFileSystem.touch   s    ##D))? 	=MM$,,t,,tM<<<;;t 	$HT4    sOO!!### 	!Ka     	! 	!r   c                     |                      |          }t          j                            |d         t          j        j                  S )Nr*   rD   tzr4   datetimefromtimestamptimezoneutcr   r*   r4   s      r   rD   zLocalFileSystem.created   sD    yydy## ..O 1 5 / 
 
 	
r   c                     |                      |          }t          j                            |d         t          j        j                  S )Nr   rI   r   r   r   s      r   modifiedzLocalFileSystem.modified   s;    yydy## ..tG}ARAV.WWWr   c                     |                      |d          }t          j        dk    r|                    dd          d         pdS |                    dd          d         }t	          |          dk    r|dd         dk    r|d         d	z   S |S )
NTrg   r      r         ::/)r$   r(   seprsplitr   )clsr*   path_s      r   ri   zLocalFileSystem._parent   s    ""4t"DD6S==;;sA&&q)0S0 KKQ''*E5zzQ1:$$ 8d?*Lr   c                    t          |          }|                    d          rDt          t          |d          d          }t          j        dk    r|                    d          }nX|                    d          rCt          t          |d          d          }t          j        dk    r|                    d          }t          ||          S )Nzfile:r   \r   zlocal:zlocal://)r   r   r   r(   r   lstripmake_path_posix)r   r*   rh   s      r   r$   zLocalFileSystem._strip_protocol   s    d##??7## 	(!.y"A"A7KKDv~~{{3''__X&& 	(!.z"B"BHMMDv~~{{3''t%:;;;r   c                     dS NTr   r   s    r   _isfilestorezLocalFileSystem._isfilestore   s	     tr   c                 J    t          |          }t          j        ||          S r   )r   r(   chmod)r   r*   rF   s      r   r   zLocalFileSystem.chmod   s!    d##xd###r   F)Tr   )FN)rw   N)'__name__
__module____qualname____doc__root_markerprotocol
local_filer   propertyr    r)   r'   r.   r?   r4   re   rs   rj   rm   r{   r}   r   r^   r   boolrE   r   r   r   r   r   rD   r   classmethodri   r$   r   r   __classcell__)r   s   @r   r   r      sN         KHJ% % % % % %   X% % % %- - - -     ) ) )V! ! !
+ 
+ 
+$ $ $# # #8 8 8 84 4 4 4" " "
$ $ $
' ' '
:d : : : :. . .        > > > >	! 	! 	! 	!
 
 
X X X   [ 
< 
< 
< [
<  $ $ $ $ $ $ $r   r   Fc                    t          | t                    sbt          | t          t          t          f          r$ t          |           fd| D                       S t          t          |                     } t          j        dk    r| 	                    d          rr| 
                    d          pdn| S | 	                    d          r"t          t          j        |                     S | 	                    d          r=| dd         } t          j                     d|  } r| 
                    d          pdn| S t          j                     d|  S t          |           dk    r| d         dk    rat          |           d	k    r| d
         dz   S |                     dd                              dd          } r| 
                    d          n| S | d
         dk    r"t          t          j        |                     S | 	                    d          rNd| dd                             dd                              dd          z   } r| 
                    d          n| S t          t          j        |                     S )z Make path generic for current OSc              3   8   K   | ]}t          |          V  d S r   )r   )r5   r   rh   s     r   	<genexpr>z"make_path_posix.<locals>.<genexpr>  s.      VVAoa1FGGVVVVVVr   r   ~z./r   Nr   r   r   r   r   r   //)z\\r   )rN   strr   settupler1   r   r(   r   r   rstripr   rd   
expanduserr   r   replacer   )r*   rh   s    `r   r   r     sr   dC   -dT3.// 	-4::VVVVQUVVVVVV~d++,,D	v}}??3 	N.CM4;;s##*sM__S!! 	N"3>$#7#79NOOO__T"" 	N8Dikk**D**D.CM4;;s##*sM)++&&&&& t99q==Aw#~~t99>>7T>)||D#..66tSAA+@Jt{{3'''dJaC&s~d';';=RSSS00 Kd122h..tS99AA$LLL+@Jt{{3'''dJs{4002GHHHr   c                     |                      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   s    r   trailing_sepr   *  s7     ==  XRYd%:%Wt}}RY?W?WXr   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dd
ef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*   rF   r   r6   
autocommitr   compressionioDEFAULT_BUFFER_SIZE	blocksizer   )r   r*   rF   r   r   r   r   s          r   r   zLocalFileOpener.__init__7  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   rF   r   r   )r6   closedr   rF   rx   r*   r   r   tempfilemkstempr(   r   tempseekrC   )r   compressr:   r9   s       r   r   zLocalFileOpener._openD  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)rF   r   r   r6   r   read)r   startends      r   _fetch_rangezLocalFileOpener._fetch_rangeV  sN    di

Ev{{3;'''r   c                     d | _         |                    dd           }| j                            |           d|d         v r7d | _         |                                  | j                             |           d S d S )Nlocr   rF   )r6   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 )Nr6   r   r   z+Cannot serialise open write-mode local file)r   copyr   rF   r6   tellr   r   )r   ds     r   __getstate__zLocalFileOpener.__getstate__g  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   RuntimeErrorrk   r   r   r*   r   s    r   commitzLocalFileOpener.commitq  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.discardv  s4    ? 	FDEEE
	$)r   r   c                     dS r   r   r   s    r   readablezLocalFileOpener.readable{  s    tr   c                     d| j         vS r   r   r   s    r   writablezLocalFileOpener.writable~  s    $)##r   c                 &     | j         j        |i |S r   )r6   r   r   argsr   s      r   r   zLocalFileOpener.read      tv{D+F+++r   c                 &     | j         j        |i |S r   )r6   writer  s      r   r  zLocalFileOpener.write  s    tv|T,V,,,r   c                 &     | j         j        |i |S r   )r6   r   r  s      r   r   zLocalFileOpener.tell  r  r   c                 &     | j         j        |i |S r   )r6   r   r  s      r   r   zLocalFileOpener.seek  r  r   c                 &     | j         j        |i |S r   )r6   seekabler  s      r   r  zLocalFileOpener.seekable      tv////r   c                 &     | j         j        |i |S r   )r6   readliner  s      r   r  zLocalFileOpener.readline  r  r   c                 &     | j         j        |i |S r   )r6   	readlinesr  s      r   r  zLocalFileOpener.readlines  s    tv0000r   c                 4    | j                                         S r   )r6   r   r   s    r   r   zLocalFileOpener.close  s    v||~~r   c                 6    | j                             |          S r   )r6   r   )r   rC   s     r   r   zLocalFileOpener.truncate  s    vt$$$r   c                     | j         j        S r   )r6   r   r   s    r   r   zLocalFileOpener.closed  s    v}r   c                 4    | j                                         S r   )rawfilenor   s    r   r   zLocalFileOpener.fileno  s    x   r   c                 8    | j                                          d S r   )r6   flushr   s    r   r"  zLocalFileOpener.flush  s    r   c                 4    | j                                         S r   )r6   __iter__r   s    r   r$  zLocalFileOpener.__iter__  s    v   r   c                 ,    t          | j        |          S r   )rZ   r6   )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)  r6   __exit__)r   exc_type	exc_value	tracebacks       r   r,  zLocalFileOpener.__exit__  s'    )Y77777r   )TNNr   )r   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  s       @D   ( ( ($( ( (    * * *
  
$    $$ $ $ $ $, , ,- - -, , ,, , ,0 0 00 0 01 1 1  % %S % % % %   X! ! !   ! ! !% % %  8 8 8 8 8r   r   r   )r   r   loggingr(   os.pathr*   rd   rk   rP   r   fsspecr   fsspec.compressionr   fsspec.corer   fsspec.utilsr   r   	getLoggerr   r   r   r   r   r   IOBaser   r   r   r   <module>r9     sw    				  				          % % % % % % $ $ $ $ $ $ ' ' ' ' ' ' 3 3 3 3 3 3 3 3		>	*	* c    i$ i$ i$ i$ i$( i$ i$ i$X#I #I #I #IL	Y 	Y 	Y|8 |8 |8 |8 |8bi |8 |8 |8 |8 |8r   