
    |;3hA                     "   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 d dlmZmZ  ej*                  d      Z G d d	e      Zd
 Zd Z ed      ddedefd       Z G d dej8                        Zy)    N)	lru_cache)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 Zd Zd%dZd%dZd$def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      \/var/www/html/audio-gradio/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.makedirs3   s     ##D)
D8,r   c                 P    | j                  |      }t        j                  |       y N)r   r#   rmdirr   r%   s     r   r*   zLocalFileSystem.rmdir7   s    ##D)
r   c                 |   | j                  |      }| j                  |      }g }|d   dk(  rht        j                  |      5 }|D ]B  }	 |r| j                  |      n| j                  |j                        }|j                  |       D 	 d d d        |S |r|gn|d   g}|S # t        $ r Y hw xY w# 1 sw Y   |S xY w)Ntype	directoryname)r   infor#   scandirr%   appendFileNotFoundError)	r   r%   detailr   	path_infoinfositfr0   s	            r   lszLocalFileSystem.ls;   s    ##D)IIdO	V+D! R A 06tyy|4;O;OPQPVPV;WT*  $*YK	&0A/BE -  s0   B1	?B"B1"	B.+B1-B..B11B;c                 z   t        |t        j                        r|j                  d      }|j	                         }|j                  d      rd}n|j                  d      rd}nd}|j                  }|r	 |j                  d      }|j                  }| j                  |j                        }n| j                  |      }t        j                  |d      }t        j                  |j                        }|rt        j                  |d      }|j                  }t        j                  |j                        rd}n$t        j                  |j                        rd}nd}||||j                  |d}d	D ]  }	t!        |d
|	       ||	<    |rt        j"                  |      |d<   |S # t        $ r d}Y #w xY w)NF)follow_symlinksr.   r   otherTr   )r/   sizer-   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tr=   out2resultfields
             r   r0   z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 	8E#C3ug7F5M	8$&KK$5F=!9  Ds   8F+ +F:9F:c                 ,    t        j                  |      S r)   )osplexists)r   r%   r   s      r   r_   zLocalFileSystem.lexists}   s    {{4  r   c                 R   | j                  |      }| j                  |      }| j                  r"| j                  | j                  |      d       | j	                  |      rt        j                  ||       y | j                  |      r| j                  |d       y t        |      r   )
r   r   r"   _parentisfileshutilcopyfileisdirmkdirsr3   )r   path1path2r   s       r   cp_filezLocalFileSystem.cp_file   s    $$U+$$U+??MM$,,u-M=;;uOOE5)ZZKKK-#E**r   c                 b    | j                  |      }t        j                  j                  |      S r)   )r   r#   r%   rb   r+   s     r   rb   zLocalFileSystem.isfile   s%    ##D)ww~~d##r   c                 b    | j                  |      }t        j                  j                  |      S r)   )r   r#   r%   re   r+   s     r   re   zLocalFileSystem.isdir   s%    ##D)ww}}T""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   openrc   copyfileobjri   )r   rg   rh   callbackr   r8   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   rp   r   s        r   put_filezLocalFileSystem.put_file   s    t||E53F33r   	recursivec                 t    | j                  |      }| j                  |      }t        j                  ||       y)zMove files/directories
        For the specific case of local, all ops on directories are recursive and
        the recursive= kwarg is ignored.
        N)r   rc   move)r   rg   rh   rt   r   s        r   mvzLocalFileSystem.mv   s2    
 $$U+$$U+E5!r   c                 v    | j                  |      }| j                  |      }t        j                  ||fi | y r)   )r   r#   rX   r   srcdstr   s       r   rX   zLocalFileSystem.link   s5    ""3'""3'
S#F#r   c                 v    | j                  |      }| j                  |      }t        j                  ||fi | y r)   )r   r#   symlinkry   s       r   r}   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                 V   t        |t              s|g}|D ]  }| j                  |      }| j                  |      rX|st	        d      t        j                  |      t        j                         k(  rt	        d      t        j                  |       }t        j                  |        y )Nz+Cannot delete directory, set recursive=Truez'Cannot delete current working directory)rH   listr   re   
ValueErrorr^   abspathr#   getcwdrc   rmtreer   )r   r%   rt   maxdepthps        r   rmzLocalFileSystem.rm   s    $%6D 		A$$Q'Azz!} $%RSS;;q>RYY[0$%NOOa 		!		r   c                 .    | j                  |      }d| S )Nfile://)r   )r   r/   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"   ra   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"   ra   r    r#   utimern   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r0   datetimefromtimestamptimezoneutcr   r%   r0   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   rC   r   r   r   s      r   modifiedzLocalFileSystem.modified   s>    yydy#  ..tG}ARARAVAV.WWr   c                     | j                  |      }t        j                  dk(  r|j                  dd      d   xs dS |j                  dd      d   }t	        |      dk  r|dd dk(  r|d   dz   S |S )Nr      r         ::/)r   r#   seprsplitlen)clsr%   path_s      r   ra   zLocalFileSystem._parent   s{    ""4(66S=;;sA&q)0S0 KKQ'*E5zQ1:$ 8d?*Lr   c                 L   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        |      }t        j                  d	k7  r|d
d dk(  r|d d |dd  }}nK|d d dk(  rA|j                  d	d      x}dk(  s|j                  d	|d
z         x}dk(  r|d}}n|d | ||d  }}nd}|j                  d	      xs | j                  }||z   S |j                  d	      xs | j                  S )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   zLocalFileSystem._strip_protocol   sM   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; #'4E"&w-fg4E ;;s#6sD4< ;;s#6s6r   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)rm   N)'__name__
__module____qualname____doc__r   protocol
local_filer   propertyr   r$   r"   r*   r9   r0   r_   ri   rb   re   rq   rs   boolrw   rX   r}   r?   r   r   r   r   r   r>   r   classmethodra   r   r   r   __classcell__)r   s   @r   r
   r
      s     KHJ%  %-&-^!
+$#84"$ "$
'
:d :. >	!
X   $7 $7L$r   r
   c                 T   t        | t              s]t        | t        t        t        f      r t        |       d | D              S t        |       } t        | t              st        d| d      t        j                  dk(  rp| j                  d      r| S | j                  d      rt        j                  |       S | j                  d      r| dd } n| d	k(  rd
} t        j                          d|  S | dd dk(  r| dd dk(  r| dd } | dd dk(  r*t        |       dk  r| d   dz   S | j                  dd      } | S | dd dk(  rt!        t        j                  |             S | j                  d      rd| dd j                  dd      z   S | j                  d      r@| j                  dd      } t        j"                  t        j                               d    |  S | j                  dd      } | j                  d      r| dd } n| d	k(  rd
} t!        t        j                                d|  S )z-Make path generic and absolute for current OSc              3   2   K   | ]  }t        |        y wr)   )r   ).0r   s     r   	<genexpr>z"make_path_posix.<locals>.<genexpr>+  s     ?Qoa0?s   zcould not convert z
 to stringr   ~z./r   N.r   r   r   r   r   r   \)z\\r   r   )r   r   )rH   strr   settupler-   r   	TypeErrorr#   r   r   r^   
expanduserr   r   replacer   
splitdriver   s    r   r   r   '  s   dC dT3./4:?$???!$'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                     | 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   Z  s7     == XRYYd%:%Wt}}RYY?WXr   r   )maxsizemaskr~   c                 Z    t        j                  |       }t        j                  |       |S )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                       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y)r   Nc                     t         j                  d|       || _        || _        || _        d | _        || _        t        ||      | _        t        j                  | _        | j                          y )Nzopen file: %s)loggerdebugr%   r@   r   r8   
autocommitr   compressionioDEFAULT_BUFFER_SIZE	blocksizer   )r   r%   r@   r   r   r   r   s          r   r   zLocalFileOpener.__init__t  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   )r8   closedr   r@   rn   r%   r   r   tempfilemkstempr#   r   tempseekr=   )r   compressir/   s       r   r   zLocalFileOpener._open  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   r8   r   read)r   startends      r   _fetch_rangezLocalFileOpener._fetch_range  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@   )r8   pop__dict__updater   r   )r   stater  s      r   __setstate__zLocalFileOpener.__setstate__  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 )Nr8   r   r  z+Cannot serialise open write-mode local file)r  copyr  r@   r8   tellr   r   )r   ds     r   __getstate__zLocalFileOpener.__getstate__  sc    MM 	c
$))vv{{}AeH  66== !NOOr   c                    | j                   rt        d      	 t        j                  | j                  | j
                         	 d}t        j                  | j
                  |t        |       z         y # t        $ r Y y w xY w# t        $ r5}t        j
                  j                  | j
                        s|Y d }~y d }~ww xY w)Nz0Can only commit if not already set to autocommit  )r   RuntimeErrorrc   rv   r   r%   r#   r   r   PermissionErrorr    )r   r   es      r   commitzLocalFileOpener.commit  s    ??QRR	KK		499-DIdO+;$;<   	
 77>>$)), -	s)   *B /A4 4	B ?B 	C+B<<C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.discard  s%    ??DEE
		$))r   r~   c                      yr   r   r   s    r   readablezLocalFileOpener.readable  s    r   c                     d| j                   vS r   r   r   s    r   writablezLocalFileOpener.writable  s    $))##r   c                 :     | j                   j                  |i |S r)   )r8   r   r   argsr   s      r   r   zLocalFileOpener.read      tvv{{D+F++r   c                 :     | j                   j                  |i |S r)   )r8   writer  s      r   r  zLocalFileOpener.write  s    tvv||T,V,,r   c                 :     | j                   j                  |i |S r)   )r8   r  r  s      r   r  zLocalFileOpener.tell  r  r   c                 :     | j                   j                  |i |S r)   )r8   r   r  s      r   r   zLocalFileOpener.seek  r  r   c                 :     | j                   j                  |i |S r)   )r8   seekabler  s      r   r#  zLocalFileOpener.seekable      tvv///r   c                 :     | j                   j                  |i |S r)   )r8   readliner  s      r   r&  zLocalFileOpener.readline  r$  r   c                 :     | j                   j                  |i |S r)   )r8   	readlinesr  s      r   r(  zLocalFileOpener.readlines  s    tvv000r   c                 6    | j                   j                         S r)   )r8   r   r   s    r   r   zLocalFileOpener.close  s    vv||~r   c                 8    | j                   j                  |      S r)   )r8   r   )r   r=   s     r   r   zLocalFileOpener.truncate  s    vvt$$r   c                 .    | j                   j                  S r)   )r8   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)   )r8   flushr   s    r   r0  zLocalFileOpener.flush  s    r   c                 6    | j                   j                         S r)   )r8   __iter__r   s    r   r2  zLocalFileOpener.__iter__  s    vv  r   c                 .    t        | j                  |      S r)   )rU   r8   )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)r7  r8   __exit__)r   exc_type	exc_value	tracebacks       r   r:  zLocalFileOpener.__exit__  s    )Y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.  r0  r2  r5  r8  r:  r   r   r   r   r   s  s    @D($((
$ $$ $,-,,001%S %  !!%8r   r   )r  )r   r   loggingr#   os.pathr%   r^   rc   rJ   r   	functoolsr   fsspecr   fsspec.compressionr   fsspec.corer   fsspec.utilsr   r   	getLoggerr   r
   r   r   r>  r   IOBaser   r   r   r   <module>rH     s     	  	      % $ ' 3			>	*Q$( Q$h0<f	Y 1	C 	C 	 	K8bii K8r   