
    wg;                         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 G d de      Zd	 Zd
 Z G d dej0                        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 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      a/home/mcse/projects/flask/flask-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.makedirs2   s     ##D)
D8,r   c                 P    | j                  |      }t        j                  |       y N)r   r"   rmdirr   r$   s     r   r)   zLocalFileSystem.rmdir6   s    ##D)
r   c                 ^   | j                  |      }| j                  |      }|d   dk(  rJt        j                  |      5 }g }|D ]#  }	 |j	                  | j                  |             % 	 d d d        n|g}|sD cg c]  }|d   	 c}S S # t
        $ r Y Uw xY w# 1 sw Y   /xY wc c}w )Ntype	directoryname)r   infor"   scandirappendFileNotFoundError)	r   r$   detailr   r/   itinfosfis	            r   lszLocalFileSystem.ls:   s    ##D)yy<;&D! R ATYYq\2  FE',-!AfI-- -   .s6    B	 B)B>B*	BBBB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   r/   zLocalFileSystem.infoL   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mkdirsr2   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$   ra   r*   s     r   ra   zLocalFileSystem.isfile   s%    ##D)ww~~d##r   c                 b    | j                  |      }t        j                  j                  |      S r(   )r   r"   r$   rd   r*   s     r   rd   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   openrb   copyfileobjri   )r   rg   rh   callbackr   r6   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   c                 t    | j                  |      }| j                  |      }t        j                  ||       y r(   )r   rb   moverf   s       r   mvzLocalFileSystem.mv   s0    $$U+$$U+E5!r   c                 v    | j                  |      }| j                  |      }t        j                  ||fi | y r(   )r   r"   rW   r   srcdstr   s       r   rW   zLocalFileSystem.link   s5    ""3'""3'
S#F#r   c                 v    | j                  |      }| j                  |      }t        j                  ||fi | y r(   )r   r"   symlinkrx   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)rG   listr   rd   
ValueErrorr]   abspathr"   getcwdrb   rmtreer   )r   r$   	recursive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!   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"   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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   rB   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   r`   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)   r8   r/   r^   ri   ra   rd   rq   rs   rv   rW   r|   boolr>   r   r   r   r   r   r=   r   classmethodr`   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
   )rG   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   T  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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   r6   
autocommitr   compressionioDEFAULT_BUFFER_SIZE	blocksizer   )r   r$   r?   r   r   r   r   s          r   r   zLocalFileOpener.__init__a  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   )r6   closedr   r?   rn   r$   r   r   tempfilemkstempr"   r   tempseekr<   )r   compressr7   r.   s       r   r   zLocalFileOpener._openn  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   r6   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?   )r6   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 )Nr6   r   r   z+Cannot serialise open write-mode local file)r   copyr   r?   r6   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
                         y )Nz0Can only commit if not already set to autocommit)r   RuntimeErrorrb   ru   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.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(   )r6   r   r   argsr   s      r   r   zLocalFileOpener.read      tvv{{D+F++r   c                 :     | j                   j                  |i |S r(   )r6   writer  s      r   r  zLocalFileOpener.write  s    tvv||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      tvv///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    tvv000r   c                 6    | j                   j                         S r(   )r6   r   r   s    r   r   zLocalFileOpener.close  s    vv||~r   c                 8    | j                   j                  |      S r(   )r6   r   )r   r<   s     r   r   zLocalFileOpener.truncate  s    vvt$$r   c                 .    | j                   j                  S r(   )r6   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(   )r6   flushr   s    r   r&  zLocalFileOpener.flush  s    r   c                 6    | j                   j                         S r(   )r6   __iter__r   s    r   r(  zLocalFileOpener.__iter__  s    vv  r   c                 .    t        | j                  |      S r(   )rT   r6   )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-  r6   __exit__)r   exc_type	exc_value	tracebacks       r   r0  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$  r&  r(  r+  r.  r0  r   r   r   r   r   `  s    @D($(*

$ $$ $,-,,001%S %  !!%8r   r   )r   r   loggingr"   os.pathr$   r]   rb   rI   r   fsspecr   fsspec.compressionr   fsspec.corer   fsspec.utilsr   r   	getLoggerr   r	   r   r   IOBaser   r   r   r   <module>r=     si     	  	     % $ ' 3			>	*L$( L$^0<f	Y|8bii |8r   