
    7ThA                         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      T/var/www/auris/envauris/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UUUR                  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N9f = f)NF)follow_symlinksr4   r   otherTr   )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st_ctimegetattrreadlink)
r   r(   r   outlinktrD   out2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**||
 EE#C3ug7FM E$&KK$5F=!9  Ds   G GGc                 .    [         R                  " U5      $ r.   )osplexists)r   r(   r   s      r   rg   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(   rk   r0   s     r   rk   LocalFileSystem.isfile   s%    ##D)ww~~d##r   c                 b    U R                  U5      n[        R                  R                  U5      $ r.   )r"   r&   r(   rn   r0   s     r   rn   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   openrl   copyfileobjrr   )r   rp   rq   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.   )rr   )r   rp   rq   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"   rl   move)r   rp   rq   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(   rF   r"   r0   s     r   rF   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)rO   listr"   rn   
ValueErrorrf   abspathr&   getcwdrl   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%   rj   LocalFileOpener)r   r(   rG   
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%   rj   r#   r&   utimerz   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(   rE   tzr6   datetimefromtimestamptimezoneutcr   r(   r6   s      r   rE   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   rJ   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   rj   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(   rG   s      r   r   LocalFileSystem.chmod"  s    d#xx##r   )r   )F)Tr.   )FN)ry   N))__name__
__module____qualname____firstlineno____doc__r   protocol
local_filer   propertyr   r'   r%   r/   r?   r6   rg   rr   rk   rn   r}   r   boolr   r_   r   rF   r   r   r   r   r   rE   r   classmethodrj   r"   r   r   __static_attributes____classcell__)r   s   @r   r
   r
      s     KHJ%  %-&-^!
+$#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   )rO   strr   settupler3   r   	TypeErrorr&   r   r   rf   
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  Z  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  f  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   is  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(   rG   r   r>   
autocommitr   compressionioDEFAULT_BUFFER_SIZE	blocksizer   )r   r(   rG   r  r   r  r   s          r   r   LocalFileOpener.__init__t  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   rG   r   r   )r>   closedr  rG   rz   r(   r  r   tempfilemkstempr&   r   tempseekrD   )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)rG   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  rG   )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'  rG   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  RuntimeErrorrl   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  r5  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>   writerD  s      r   rI  LocalFileOpener.write  s    vv||T,V,,r   c                 :    U R                   R                  " U0 UD6$ r.   )r>   r/  rD  s      r   r/  LocalFileOpener.tell  rG  r   c                 :    U R                   R                  " U0 UD6$ r.   )r>   r  rD  s      r   r  LocalFileOpener.seek  rG  r   c                 :    U R                   R                  " U0 UD6$ r.   )r>   seekablerD  s      r   rP  LocalFileOpener.seekable      vv///r   c                 :    U R                   R                  " U0 UD6$ r.   )r>   readlinerD  s      r   rT  LocalFileOpener.readline  rR  r   c                 :    U R                   R                  " U0 UD6$ r.   )r>   	readlinesrD  s      r   rW  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   rD   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   ra  LocalFileOpener.fileno  s    xx  r   c                 8    U R                   R                  5         g r.   )r>   flushr   s    r   rd  LocalFileOpener.flush  s    r   c                 6    U R                   R                  5       $ r.   )r>   __iter__r   s    r   rg  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)rn  r>   __exit__)r   exc_type	exc_value	tracebacks       r   rr  LocalFileOpener.__exit__  s    Y7r   )
rn  r  r  r  r>   r   rG   r(   rD   r  )TNNr.   )r   N)!r   r   r   r   r   r   r#  r+  r1  r8  r;  r   r>  rA  r   rI  r/  r  rP  rT  rW  r   intr   r   r  ra  rd  rg  rk  ro  rr  r   r   r   r   r   r   s  s    @D($((
$ $$ $,-,,001%S %  !!%8r   r   )r4  )r   r  loggingr&   os.pathr(   rf   rl   rQ   r  	functoolsr   fsspecr   fsspec.compressionr   fsspec.corer   fsspec.utilsr   r   	getLoggerr  r
   r   r  rw  r  IOBaser   r   r   r   <module>r     s     	  	      % $ ' 3			>	*Q$( Q$h0<f	Y 1	C 	C 	 	K8bii K8r   