
    "h3                        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j0                  fd	Zd
 Z G d dej6                        Zy)    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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.
    /)filelocalTc                 2    t        |   di | || _        y )N )super__init__
auto_mkdir)selfr   kwargs	__class__s      Y/var/www/html/sandstorm/venv/lib/python3.12/site-packages/fsspec/implementations/local.pyr   zLocalFileSystem.__init__#   s    "6"$    c                      y)Nr   r   r   s    r   fsidzLocalFileSystem.fsid'   s    r   c                     | j                  |      }| j                  |      rt        |      |r| j                  |d       y t	        j
                  |fi | y )NTexist_ok)_strip_protocolexistsFileExistsErrormakedirsosmkdir)r   pathcreate_parentsr   s       r   r"   zLocalFileSystem.mkdir+   sM    ##D);;t!$''MM$M.HHT$V$r   c                 T    | j                  |      }t        j                  ||       y )Nr   )r   r!   r    )r   r#   r   s      r   r    zLocalFileSystem.makedirs4   s     ##D)
D8,r   c                 P    | j                  |      }t        j                  |       y N)r   r!   rmdirr   r#   s     r   r(   zLocalFileSystem.rmdir8   s    ##D)
r   c                 >   | j                  |      }|r>t        j                  |      5 }|D cg c]  }| j                  |       c}cd d d        S t        j                  |      D cg c]  }t        j                  ||       c}S c c}w # 1 sw Y   y xY wc c}w r'   )r   r!   scandirinfolistdir	posixpathjoin)r   r#   detailr   itfs         r   lszLocalFileSystem.ls<   s    ##D)D! 2R.01		!12 2 68ZZ5EFINN4+FF 22 2 Gs"   BB	B)B	BBc                 z   t        |t        j                        rj|j                  d      }|j	                         }|j                  d      rd}n|j                  d      rd}nd}| j                  |j                        }n| j                  |      }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
   rAt        j                   |      |d<   	 t        j                  |d      }|j                  |d<   |S |S # t"        $ r	 d|d<   Y |S w xY w)NF)follow_symlinks	directoryr   otherT)namesizetypecreatedislink)modeuidgidmtimeinonlinkst_r<   destinationr9   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   r,   zLocalFileSystem.infoD   s   dBKK())E)2C??$D{{5{1e4''		2D ''-D''$6C<<,DggdD9||CKK(ckk*KK||
 E 	8E#C3ug7F5M	8($&KK$5F=!#wwtT:!%v v  #!"v#s   >&F( (F:9F:c                 ,    t        j                  |      S r'   )osplexists)r   r#   r   s      r   r\   zLocalFileSystem.lexistso   s    {{4  r   c                    | j                  |      j                  d      }| j                  |      j                  d      }| j                  r"| j                  | j	                  |      d       | j                  |      rt        j                  ||       y | j                  |      r| j                  |d       y t        |      )Nr
   Tr   )r   rstripr   r    _parentisfileshutilcopyfileisdirmkdirsFileNotFoundErrorr   path1path2r   s       r   cp_filezLocalFileSystem.cp_filer   s    $$U+2237$$U+2237??MM$,,u-M=;;uOOE5)ZZKKK-#E**r   c                     t        |      r,t        |d      5 }t        j                  ||       d d d        y  | j                  ||fi |S # 1 sw Y   y xY w)Nrb)r   openra   copyfileobjri   )r   rg   rh   callbackr   r2   s         r   get_filezLocalFileSystem.get_file~   sZ    eeT" -a""1e,- -  4<<u777- -s   AAc                 *     | j                   ||fi |S r'   )ri   )r   rg   rh   rn   r   s        r   put_filezLocalFileSystem.put_file   s    t||E53F33r   c                     | j                  |      j                  d      }| j                  |      j                  d      }t        j                  ||       y )Nr
   )r   r^   ra   moverf   s       r   mv_filezLocalFileSystem.mv_file   sF    $$U+2237$$U+2237E5!r   c                 v    | j                  |      }| j                  |      }t        j                  ||fi | y r'   )r   r!   rU   r   srcdstr   s       r   rU   zLocalFileSystem.link   s5    ""3'""3'
S#F#r   c                 v    | j                  |      }| j                  |      }t        j                  ||fi | y r'   )r   r!   symlinkrv   s       r   rz   zLocalFileSystem.symlink   s5    ""3'""3'


3&v&r   returnc                 ^    t         j                  j                  | j                  |            S r'   )r!   r#   r<   r   r)   s     r   r<   zLocalFileSystem.islink   s     ww~~d224899r   c                 L    t        j                  | j                  |             y r'   )r!   remover   r)   s     r   rm_filezLocalFileSystem.rm_file   s    
		$&&t,-r   c                 t   t        |t              s|g}|D ]  }| j                  |      j                  d      }| j	                  |      rX|st        d      t        j                  |      t        j                         k(  rt        d      t        j                  |       t        j                  |        y )Nr
   z+Cannot delete directory, set recursive=Truez'Cannot delete current working directory)rE   listr   r^   rc   
ValueErrorr[   abspathr!   getcwdra   rmtreer~   )r   r#   	recursivemaxdepthps        r   rmzLocalFileSystem.rm   s    $%6D 		A$$Q'..s3Azz!} $%RSS;;q>RYY[0$%NOOa 		!		r   c                 .    | j                  |      }d| S )Nfile://)r   )r   r8   s     r   unstrip_protocolz LocalFileSystem.unstrip_protocol   s    ##D)r   c                     | j                  |      }| j                  r&d|v r"| j                  | j                  |      d       t	        ||fd| i|S )NwTr   fs)r   r   r    r_   LocalFileOpener)r   r#   r=   
block_sizer   s        r   _openzLocalFileSystem._open   sO    ##D)??sd{MM$,,t,tM<tT=d=f==r   c                 8   | j                  |      }| j                  r"| j                  | j                  |      d       | j	                  |      rt        j                  |d        nt        |d      j                          |rt        j                  |d       y y )NTr   ar   )
r   r   r    r_   r   r!   utimerl   closetruncate)r   r#   r   r   s       r   touchzLocalFileSystem.touch   st    ##D)??MM$,,t,tM<;;tHHT4 sO!!#KKa  r   c                     | j                  |      }t        j                  j                  |d   t        j                  j                        S )Nr#   r;   tzr,   datetimefromtimestamptimezoneutcr   r#   r,   s      r   r;   zLocalFileSystem.created   sE    yydy#  ..O 1 1 5 5 / 
 	
r   c                     | j                  |      }t        j                  j                  |d   t        j                  j                        S )Nr   r@   r   r   r   s      r   modifiedzLocalFileSystem.modified   s>    yydy#  ..tG}ARARAVAV.WWr   c                     | j                  |      j                  d      }d|v r|j                  dd      d   S | j                  S )Nr
      r   )r   r^   rsplitroot_markerclsr#   s     r   r_   zLocalFileSystem._parent   sD    ""4(//4$;;;sA&q))??"r   c                    t        |      }|j                  d      r|dd  }nD|j                  d      r|dd  }n-|j                  d      r|dd  }n|j                  d      r|dd  }t        |      j                  d	      xs | j                  S )
Nr      zfile:   zlocal://   zlocal:   r
   )r   
startswithmake_path_posixr^   r   r   s     r   r   zLocalFileSystem._strip_protocol   s    d#??9%8D__W%8D__Z(8D__X&8Dt$++C0CCOOCr   c                      yNTr   r   s    r   _isfilestorezLocalFileSystem._isfilestore   s     r   c                 D    t        |      }t        j                  ||      S r'   )r   r!   chmod)r   r#   r=   s      r   r   zLocalFileSystem.chmod   s    d#xxd##r   )F)Tr'   )FN)rk   N)%__name__
__module____qualname____doc__r   protocol
local_filer   propertyr   r"   r    r(   r3   r,   r\   ri   ro   rq   rt   rU   rz   boolr<   r   r   r   r   r   r;   r   classmethodr_   r   r   r   __classcell__)r   s   @r   r	   r	      s     KHJ%  %-G)V!
+84"
$
'
:d :. >	!
X # # 
D 
D$r   r	   c                 0   t        | t        t        t        f      r t	        |       d | D              S d| v rt        j                  |       } |dk(  rB| j                  d      r| S | j                  d      r| dd } t        j                          d|  S || vrd| vs0|dk(  r| j                  d      r|dk(  r_d| vr[| j                  d	      sJt        j                  dk(  rt        t        j                  |             S t        j                          d|  S | j                  d
      r| dd } t        j                  d|       r%| dd j                  dd      j                  dd      } | j                  d	      r| j                  dd      S t        j                  d|       r1| j!                  d      j                  dd      j                  dd      S | j                  d      r4d| j!                  d      j                  dd      j                  dd      z   S | S )zMake path genericc              3   2   K   | ]  }t        |        y wr'   )r   ).0r   s     r   	<genexpr>z"make_path_posix.<locals>.<genexpr>   s     ;/!,;s   ~r
   z./   N\:z\\r   r   z
/[A-Za-z]:r   z//z	[A-Za-z]:)rE   r   settupler:   r[   
expanduserr   r!   r   sepr   r   rematchreplacelstrip)r#   r   s     r   r   r      s   $sE*+tDz;d;;;
d{~~d#
cz??3K??4 8D))+av&&	DS_3Jts34KCtODOOF4K 66T>"3;;t#455iik]!D6**y!ABx	xxd# ABxc*224=v ||D#&&	xxT"{{4 ((s3;;D#FFtT[[&..tS9AA$LLLKr   c                     | j                  t        j                        xs3 t        j                  duxr | j                  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     == XRYYd%:%Wt}}RYY?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ed        Zd ZddZd Zd Zd Zd Zy)r   Nc                     t         j                  d|       || _        || _        || _        d | _        || _        t        ||      | _        t        j                  | _        | j                          y )Nzopen file: %s)loggerdebugr#   r=   r   r2   
autocommitr   compressionioDEFAULT_BUFFER_SIZE	blocksizer   )r   r#   r=   r   r   r   r   s          r   r   zLocalFileOpener.__init__#  sZ     	_d+		$*4=//

r   c                    | j                   | j                   j                  r9| j                  sd| j                  vrit	        | j
                  | j                        | _         | j                  rt        | j                     } || j                   | j                        | _         nOt        j                         \  }}t        j                  |       || _        t	        || j                        | _         d| j                  vrX| j                   j                  dd      | _        | j                   j                  d       | j                  | j                   _        y y y )Nr   r=   r   r   )r2   closedr   r=   rl   r#   r   r   tempfilemkstempr!   r   tempseekr9   )r   compressir8   s       r   r   zLocalFileOpener._open0  s    66>TVV]]#TYY"6diidii8##$T%5%56H%dff499=DF #**,4 	d3$))# FFKK1-	A"ii $ +r   c                     d| j                   vrt        | j                          | j                  j	                  |       | j                  j                  ||z
        S Nr)r=   r   r   r2   r   read)r   startends      r   _fetch_rangezLocalFileOpener._fetch_rangeB  sD    dii

Evv{{3;''r   c                     d | _         |j                  dd       }| j                  j                  |       d|d   v r3d | _         | j	                          | j                   j                  |       y y )Nlocr   r=   )r2   pop__dict__updater   r   )r   stater   s      r   __setstate__zLocalFileOpener.__setstate__J  s\    iit$U#%-DFJJLFFKK  r   c                     | j                   j                         }|j                  d       d| j                  v r| j                  j                         |d<   |S | j                  j                  st        d      |S )Nr2   r   r   z+Cannot serialise open write-mode local file)r   copyr   r=   r2   tellr   r   )r   ds     r   __getstate__zLocalFileOpener.__getstate__S  sc    MM 	c
$))vv{{}AeH  66== !NOOr   c                     | j                   rt        d      t        j                  | j                  | j
                         y )Nz0Can only commit if not already set to autocommit)r   RuntimeErrorra   rs   r   r#   r   s    r   commitzLocalFileOpener.commit]  s+    ??QRRDIItyy)r   c                 p    | j                   rt        d      t        j                  | j                         y )Nz#Cannot discard if set to autocommit)r   r   r!   r~   r   r   s    r   discardzLocalFileOpener.discardb  s%    ??DEE
		$))r   r{   c                      yr   r   r   s    r   readablezLocalFileOpener.readableg  s    r   c                     d| j                   vS r   r   r   s    r   writablezLocalFileOpener.writablej  s    $))##r   c                 :     | j                   j                  |i |S r'   )r2   r   r   argsr   s      r   r   zLocalFileOpener.readm      tvv{{D+F++r   c                 :     | j                   j                  |i |S r'   )r2   writer  s      r   r  zLocalFileOpener.writep  s    tvv||T,V,,r   c                 :     | j                   j                  |i |S r'   )r2   r   r  s      r   r   zLocalFileOpener.tells  r  r   c                 :     | j                   j                  |i |S r'   )r2   r   r  s      r   r   zLocalFileOpener.seekv  r  r   c                 :     | j                   j                  |i |S r'   )r2   seekabler  s      r   r  zLocalFileOpener.seekabley      tvv///r   c                 :     | j                   j                  |i |S r'   )r2   readliner  s      r   r  zLocalFileOpener.readline|  r  r   c                 :     | j                   j                  |i |S r'   )r2   	readlinesr  s      r   r  zLocalFileOpener.readlines  s    tvv000r   c                 6    | j                   j                         S r'   )r2   r   r   s    r   r   zLocalFileOpener.close  s    vv||~r   c                 .    | j                   j                  S r'   )r2   r   r   s    r   r   zLocalFileOpener.closed  s    vv}}r   c                 6    | j                   j                         S r'   )rawfilenor   s    r   r  zLocalFileOpener.fileno  s    xx  r   c                 8    | j                   j                          y r'   )r2   flushr   s    r   r  zLocalFileOpener.flush  s    r   c                 6    | j                   j                         S r'   )r2   __iter__r   s    r   r  zLocalFileOpener.__iter__  s    vv  r   c                 .    t        | j                  |      S r'   )rQ   r2   )r   items     r   __getattr__zLocalFileOpener.__getattr__  s    tvvt$$r   c                     d| _         | S r   )
_incontextr   s    r   	__enter__zLocalFileOpener.__enter__  s    r   c                 L    d| _         | j                  j                  |||       y )NF)r  r2   __exit__)r   exc_type	exc_value	tracebacks       r   r"  zLocalFileOpener.__exit__  s    )Y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1  !!%8r   r   )r   r   loggingr!   os.pathr#   r[   r.   r   ra   rG   r   fsspecr   fsspec.compressionr   fsspec.corer   fsspec.utilsr   r   	getLoggerr   r	   r   r   r   IOBaser   r   r   r   <module>r.     sx     	  	   	    % $ ' 3			>	*T$( T$n !ff (V	Yy8bii y8r   