
    9i(B                         S SK r S SKrS SKrS SKrS SKJr  S SKrS SKrS SK	r	S SK
Jr  S SKJr  S SKJr  S SKJr  S SKJrJr  \R*                  " S5      r " S S	\5      rS
 rS r\" SS9SS\S\4S jj5       r " S S\R8                  5      rg)    N)	lru_cache)AbstractFileSystem)compr)get_compression)
isfilelikestringify_pathzfsspec.localc                   0  ^  \ rS rSrSrSrSrSrS%U 4S jjr\	S 5       r
S&S jrS%S	 jrS
 rS%S jrS rS rS rS rS rS'S jrS'S jrS&S\4S jjrS rS rS\4S jrS rS(S jrS rS)S jrS&S jrS r S r!\"S  5       r#\"S! 5       r$S" r%S# r&S$r'U =r($ )*LocalFileSystem   zInterface 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localTc                 2   > [         TU ]  " S0 UD6  Xl        g )N )super__init__
auto_mkdir)selfr   kwargs	__class__s      \/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/fsspec/implementations/local.pyr   LocalFileSystem.__init__"   s    "6"$    c                     g)Nr   r   r   s    r   fsidLocalFileSystem.fsid&   s    r   c                     U R                  U5      nU R                  U5      (       a  [        U5      eU(       a  U R                  USS9  g [        R
                  " U40 UD6  g NTexist_ok)_strip_protocolexistsFileExistsErrormakedirsosmkdir)r   pathcreate_parentsr   s       r   r'   LocalFileSystem.mkdir*   sP    ##D);;t!$''MM$M.HHT$V$r   c                 N    U R                  U5      n[        R                  " XS9  g )Nr    )r"   r&   r%   )r   r(   r!   s      r   r%   LocalFileSystem.makedirs3   s    ##D)
D,r   c                 R    U R                  U5      n[        R                  " U5        g N)r"   r&   rmdirr   r(   s     r   r/   LocalFileSystem.rmdir7   s    ##D)
r   c                    U R                  U5      nU R                  U5      n/ nUS   S:X  ao  [        R                  " U5       nU HH  n U(       a  U R                  U5      OU R                  UR                  5      nUR                  U5        MJ     S S S 5        U$ U(       a  U/OUS   /nU$ ! [         a     Mu  f = f! , (       d  f       U$ = f)Ntype	directoryname)r"   infor&   scandirr(   appendFileNotFoundError)	r   r(   detailr   	path_infoinfositfr6   s	            r   lsLocalFileSystem.ls;   s    ##D)IIdO	V+D!RA 06tyy|4;O;OPQPVPV;WT*  "  $*YK	&0A/BE -  "! s1   C AB/C /
B=9C <B==C  
Cc                    [        U[        R                  5      (       a  UR                  SS9nUR	                  5       nUR                  SS9(       a  SnOUR                  SS9(       a  SnOSnUR                  nU(       a   UR                  SS9nUR                  nU R                  UR                  5      nOU R                  U5      n[        R                  " USS9n[        R                  " UR                  5      nU(       a  [        R                  " USS9nUR                  n[        R                  " UR                  5      (       a  SnO*[        R                  " UR                  5      (       a  SnOSn[        USUR                   5      nUUUUUS	.n	S
 H  n
[        USU
 35      X'   M     U(       a  [        R"                  " U5      U	S'   U	$ ! [         a    Sn GNFf = f)NF)follow_symlinksr4   r   otherTr   st_birthtime)r5   sizer3   createdislink)modeuidgidmtimeinonlinkst_destination)
isinstancer&   DirEntrystat
is_symlinkis_diris_filest_sizeOSErrorr"   r(   S_ISLNKst_modeS_ISDIRS_ISREGgetattrst_ctimereadlink)r   r(   r   outlinktrE   out2created_timeresultfields              r   r6   LocalFileSystem.infoN   s   dBKK(())E)2C??$D{{5{1e4;;D99T9:D<<D ''		2D ''-D''$6C<<,DggdD9;;D||CKK((ckk** sNCLLA #
 EE#C3ug7FM E$&KK$5F=!A  Ds   G G%$G%c                 .    [         R                  " U5      $ r.   )osplexists)r   r(   r   s      r   ri   LocalFileSystem.lexists   s    {{4  r   c                 d   U R                  U5      nU R                  U5      nU R                  (       a  U R                  U R                  U5      SS9  U R	                  U5      (       a  [
        R                  " X5        g U R                  U5      (       a  U R                  USS9  g [        U5      er   )
r"   r   r%   _parentisfileshutilcopyfileisdirmkdirsr9   )r   path1path2r   s       r   cp_fileLocalFileSystem.cp_file   s    $$U+$$U+??MM$,,u-M=;;uOOE)ZZKKK-#E**r   c                 b    U R                  U5      n[        R                  R                  U5      $ r.   )r"   r&   r(   rm   r0   s     r   rm   LocalFileSystem.isfile   s%    ##D)ww~~d##r   c                 b    U R                  U5      n[        R                  R                  U5      $ r.   )r"   r&   r(   rp   r0   s     r   rp   LocalFileSystem.isdir   s%    ##D)ww}}T""r   c                     [        U5      (       a,  [        US5       n[        R                  " XR5        S S S 5        g U R                  " X40 UD6$ ! , (       d  f       g = f)Nrb)r   openrn   copyfileobjrt   )r   rr   rs   callbackr   r>   s         r   get_fileLocalFileSystem.get_file   sN    eeT"a""1, #" <<777 #"s   A
Ac                 (    U R                   " X40 UD6$ r.   )rt   )r   rr   rs   r~   r   s        r   put_fileLocalFileSystem.put_file   s    ||E3F33r   	recursivec                 t    U R                  U5      nU R                  U5      n[        R                  " X5        g)zMove files/directories
For the specific case of local, all ops on directories are recursive and
the recursive= kwarg is ignored.
N)r"   rn   move)r   rr   rs   r   r   s        r   mvLocalFileSystem.mv   s0    
 $$U+$$U+E!r   c                 v    U R                  U5      nU R                  U5      n[        R                  " X40 UD6  g r.   )r"   r&   r`   r   srcdstr   s       r   r`   LocalFileSystem.link   s3    ""3'""3'
#F#r   c                 v    U R                  U5      nU R                  U5      n[        R                  " X40 UD6  g r.   )r"   r&   symlinkr   s       r   r   LocalFileSystem.symlink   s3    ""3'""3'


3&v&r   returnc                 ^    [         R                  R                  U R                  U5      5      $ r.   )r&   r(   rG   r"   r0   s     r   rG   LocalFileSystem.islink   s     ww~~d224899r   c                 N    [         R                  " U R                  U5      5        g r.   )r&   remover"   r0   s     r   rm_fileLocalFileSystem.rm_file   s    
		$&&t,-r   c                    [        U[        5      (       d  U/nU H  nU R                  U5      nU R                  U5      (       ab  U(       d  [	        S5      e[
        R                  " U5      [        R                  " 5       :X  a  [	        S5      e[        R                  " U5        M  [        R                  " U5        M     g )Nz+Cannot delete directory, set recursive=Truez'Cannot delete current working directory)rP   listr"   rp   
ValueErrorrh   abspathr&   getcwdrn   rmtreer   )r   r(   r   maxdepthps        r   rmLocalFileSystem.rm   s    $%%6DA$$Q'Azz!}} $%RSS;;q>RYY[0$%NOOa 		! r   c                 .    U R                  U5      nSU 3$ )Nfile://)r"   )r   r5   s     r   unstrip_protocol LocalFileSystem.unstrip_protocol   s    ##D)r   c                     U R                  U5      nU R                  (       a%  SU;   a  U R                  U R                  U5      SS9  [	        X4SU 0UD6$ )NwTr    fs)r"   r   r%   rl   LocalFileOpener)r   r(   rH   
block_sizer   s        r   _openLocalFileSystem._open   sM    ##D)??sd{MM$,,t,tM<t=d=f==r   c                 T   U R                  U5      nU R                  (       a  U R                  U R                  U5      SS9  U R	                  U5      (       a  [
        R                  " US 5        O[        US5      R                  5         U(       a  [
        R                  " US5        g g )NTr    ar   )
r"   r   r%   rl   r#   r&   utimer|   closetruncate)r   r(   r   r   s       r   touchLocalFileSystem.touch   sw    ##D)??MM$,,t,tM<;;tHHT4 sO!!#KKa  r   c                     U R                  US9n[        R                  R                  US   [        R                  R                  S9$ )Nr(   rF   tzr6   datetimefromtimestamptimezoneutcr   r(   r6   s      r   rF   LocalFileSystem.created   sE    yydy#  ..O 1 1 5 5 / 
 	
r   c                     U R                  US9n[        R                  R                  US   [        R                  R                  S9$ )Nr   rK   r   r   r   s      r   modifiedLocalFileSystem.modified   s>    yydy#  ..tG}ARARAVAV.WWr   c                     U R                  U5      n[        R                  S:X  a  UR                  SS5      S   =(       d    S$ UR                  SS5      S   n[	        U5      S::  a  USS S:X  a  US   S-   $ U$ )Nr      r         ::/)r"   r&   seprsplitlen)clsr(   path_s      r   rl   LocalFileSystem._parent   s{    ""4(66S=;;sA&q)0S0 KKQ'*E5zQ1:$ 8d?*Lr   c                    [        U5      nUR                  S5      (       a  USS  nOSUR                  S5      (       a  USS  nO7UR                  S5      (       a  USS  nOUR                  S5      (       a  USS  n[        U5      n[        R                  S	:w  a  US
S S:X  a
  US S USS  pOKUS S S:X  a@  UR                  S	S5      =nS:X  d  UR                  S	US
-   5      =nS:X  a  USpOUS U XS  pOSnUR                  S	5      =(       d    U R                  nX!-   $ UR                  S	5      =(       d    U R                  $ )Nr      zfile:   zlocal://   zlocal:   r   r   r   r   // )r   
startswithmake_path_posixr&   r   findrstriproot_marker)r   r(   driveindex1index2s        r   r"   LocalFileSystem._strip_protocol   sO   d#??9%%8D__W%%8D__Z((8D__X&&8Dt$66S= AayC #2AhQRtbqT! #iiQ//FB6"iiVaZ88F; #'4"&w-g4 ;;s#6sD< ;;s#6s6r   c                     gNTr   r   s    r   _isfilestoreLocalFileSystem._isfilestore   s     r   c                 D    [        U5      n[        R                  " X5      $ r.   )r   r&   chmod)r   r(   rH   s      r   r   LocalFileSystem.chmod&  s    d#xx##r   )r   )F)Tr.   )FN)r{   N))__name__
__module____qualname____firstlineno____doc__r   protocol
local_filer   propertyr   r'   r%   r/   r?   r6   ri   rt   rm   rp   r   r   boolr   r`   r   rG   r   r   r   r   r   rF   r   classmethodrl   r"   r   r   __static_attributes____classcell__)r   s   @r   r
   r
      s     KHJ%  %-&1f!
+$#84"$ "$
'
:d :. >	!
X   $7 $7L$ $r   r
   c                    [        U [        5      (       dh  [        U [        [        [        45      (       a  [        U 5      " S U  5       5      $ [        U 5      n [        U [        5      (       d  [        SU < S35      e[        R                  S:X  a  U R                  S5      (       a  U $ U R                  S5      (       a  [        R                  " U 5      $ U R                  S5      (       a  U SS n OU S	:X  a  S
n [        R                  " 5        SU  3$ U SS S:X  a  U SS S:X  a  U SS n U SS S:X  a+  [        U 5      S::  a  U S   S-   $ U R                  SS5      n U $ U SS S:X  a  [!        [        R                  " U 5      5      $ U R                  S5      (       a  SU SS R                  SS5      -   $ U R                  S5      (       aB  U R                  SS5      n [        R"                  " [        R                  " 5       5      S    U  3$ U R                  SS5      n U R                  S5      (       a  U SS n OU S	:X  a  S
n [!        [        R                  " 5       5       SU  3$ )z-Make path generic and absolute for current OSc              3   8   #    U  H  n[        U5      v   M     g 7fr.   )r   ).0r   s     r   	<genexpr>"make_path_posix.<locals>.<genexpr>/  s     ?$Qoa00$s   zcould not convert z
 to stringr   ~z./r   N.r   r   r   r   r   r   \)z\\r   r   )r   r   )rP   strr   settupler3   r   	TypeErrorr&   r   r   rh   
expanduserr   r   replacer   
splitdriver   s    r   r   r   +  s'   dC  dT3.//:?$???!$'DdC(("4THJ GHH	vv}??3K__S!!>>$''__T""8DS[D))+av&& !9Qq	S 08D!94yA~Aw~%<<c*DK!AY#"3>>$#788__^,,$qr(**4555__[))<<c*DnnRYY[1!45dV<<<<c*Dt$$ABx%biik231TF;;r   c                     U R                  [        R                  5      =(       d8    [        R                  SL=(       a    U R                  [        R                  5      $ )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     == XRYYd%:%Wt}}RYY?WXr   r   )maxsizemaskr   c                 ^    [         R                  " U 5      n[         R                  " U5        U$ )zGet the current umask.

Follows https://stackoverflow.com/a/44130549 to get the umask.
Temporarily sets the umask to the given value, and then resets it to the
original value.
)r&   umask)r  values     r   	get_umaskr
  j  s!     HHTNEHHUOLr   c                       \ rS rSr SS jrS rS rS rS rS r	S	 r
S
\4S jrS
\4S jrS rS rS rS rS rS rS rS rSS
\4S jjr\S 5       rS rS S jrS rS rS rS rSr g)!r   iw  Nc                     [         R                  SU5        Xl        X l        X@l        S U l        X0l        [        X5      U l        [        R                  U l        U R                  5         g )Nzopen file: %s)loggerdebugr(   rH   r   r>   
autocommitr   compressionioDEFAULT_BUFFER_SIZE	blocksizer   )r   r(   rH   r  r   r  r   s          r   r   LocalFileOpener.__init__x  sP     	_d+		$*4=//

r   c                    U R                   b  U R                   R                  (       Ga=  U R                  (       d  SU R                  ;  ah  [	        U R
                  U R                  S9U l         U R                  (       a3  [        U R                     nU" U R                   U R                  S9U l         OK[        R                  " 5       u  p#[        R                  " U5        X0l        [	        X0R                  S9U l         SU R                  ;  aX  U R                   R                  SS5      U l        U R                   R                  S5        U R                  U R                   l        g g g )Nr   rH   r   r   )r>   closedr  rH   r|   r(   r  r   tempfilemkstempr&   r   tempseekrE   )r   compressir5   s       r   r   LocalFileOpener._open  s    66>TVV]]]#TYY"6diidii8##$T%5%56H%dff499=DF #**, 	d3$))# FFKK1-	A"ii $ +r   c                     SU R                   ;  a  [        eU R                  5         U R                  R	                  U5        U R                  R                  X!-
  5      $ Nr)rH   r   r   r>   r  read)r   startends      r   _fetch_rangeLocalFileOpener._fetch_range  sB    dii

Evv{{3;''r   c                     S U l         UR                  SS 5      nU R                  R                  U5        SUS   ;   a3  S U l         U R	                  5         U R                   R                  U5        g g )Nlocr!  rH   )r>   pop__dict__updater   r  )r   stater(  s      r   __setstate__LocalFileOpener.__setstate__  s\    iit$U#%-DFJJLFFKK  r   c                    U R                   R                  5       nUR                  S5        SU R                  ;   a  U R                  R                  5       US'   U$ U R                  R                  (       d  [        S5      eU$ )Nr>   r!  r(  z+Cannot serialise open write-mode local file)r*  copyr)  rH   r>   tellr  r   )r   ds     r   __getstate__LocalFileOpener.__getstate__  sc    MM 	c
$))vv{{}AeH  66== !NOOr   c                    U R                   (       a  [        S5      e [        R                  " U R                  U R
                  5         Sn[        R                  " U R
                  U[        U5      ) -  5        g ! [         a     g f = f! [         a:  n[        R
                  R                  U R
                  5      (       d  Ue S nAg S nAff = f)Nz0Can only commit if not already set to autocommit  )r  RuntimeErrorrn   r   r  r(   r&   r   r
  PermissionErrorr#   )r   r  es      r   commitLocalFileOpener.commit  s    ??QRR	KK		499-DIdO+;$;<   	
 77>>$)),, -	s)   +B 
0A; ;
BB
C0C

Cc                 |    U R                   (       a  [        S5      e[        R                  " U R                  5        g )Nz#Cannot discard if set to autocommit)r  r7  r&   r   r  r   s    r   discardLocalFileOpener.discard  s%    ??DEE
		$))r   r   c                     gr   r   r   s    r   readableLocalFileOpener.readable  s    r   c                      SU R                   ;  $ r   r  r   s    r   writableLocalFileOpener.writable  s    $))##r   c                 :    U R                   R                  " U0 UD6$ r.   )r>   r"  r   argsr   s      r   r"  LocalFileOpener.read      vv{{D+F++r   c                 :    U R                   R                  " U0 UD6$ r.   )r>   writerF  s      r   rK  LocalFileOpener.write  s    vv||T,V,,r   c                 :    U R                   R                  " U0 UD6$ r.   )r>   r1  rF  s      r   r1  LocalFileOpener.tell  rI  r   c                 :    U R                   R                  " U0 UD6$ r.   )r>   r  rF  s      r   r  LocalFileOpener.seek  rI  r   c                 :    U R                   R                  " U0 UD6$ r.   )r>   seekablerF  s      r   rR  LocalFileOpener.seekable      vv///r   c                 :    U R                   R                  " U0 UD6$ r.   )r>   readlinerF  s      r   rV  LocalFileOpener.readline  rT  r   c                 :    U R                   R                  " U0 UD6$ r.   )r>   	readlinesrF  s      r   rY  LocalFileOpener.readlines  s    vv000r   c                 6    U R                   R                  5       $ r.   )r>   r   r   s    r   r   LocalFileOpener.close  s    vv||~r   c                 8    U R                   R                  U5      $ r.   )r>   r   )r   rE   s     r   r   LocalFileOpener.truncate  s    vvt$$r   c                 .    U R                   R                  $ r.   )r>   r  r   s    r   r  LocalFileOpener.closed  s    vv}}r   c                 6    U R                   R                  5       $ r.   )rawfilenor   s    r   rc  LocalFileOpener.fileno  s    xx  r   c                 8    U R                   R                  5         g r.   )r>   flushr   s    r   rf  LocalFileOpener.flush  s    r   c                 6    U R                   R                  5       $ r.   )r>   __iter__r   s    r   ri  LocalFileOpener.__iter__  s    vv  r   c                 .    [        U R                  U5      $ r.   )r\   r>   )r   items     r   __getattr__LocalFileOpener.__getattr__  s    tvvt$$r   c                     SU l         U $ r   )
_incontextr   s    r   	__enter__LocalFileOpener.__enter__  s    r   c                 J    SU l         U R                  R                  XU5        g )NF)rp  r>   __exit__)r   exc_type	exc_value	tracebacks       r   rt  LocalFileOpener.__exit__   s    Y7r   )
rp  r  r  r  r>   r   rH   r(   rE   r  )TNNr.   )r   N)!r   r   r   r   r   r   r%  r-  r3  r:  r=  r   r@  rC  r"  rK  r1  r  rR  rV  rY  r   intr   r   r  rc  rf  ri  rm  rq  rt  r   r   r   r   r   r   w  s    @D($((
$ $$ $,-,,001%S %  !!%8r   r   )r6  )r   r  loggingr&   os.pathr(   rh   rn   rR   r  	functoolsr   fsspecr   fsspec.compressionr   fsspec.corer   fsspec.utilsr   r   	getLoggerr  r
   r   r  ry  r
  IOBaser   r   r   r   <module>r     s     	  	      % $ ' 3			>	*U$( U$p0<f	Y 1	C 	C 	 	K8bii K8r   