
    Yh(B                     .   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j                  ZdS )    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localTFc                 H     t                      j        di | || _        d S )N )super__init__
auto_mkdir)selfr   kwargs	__class__s      n/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/fsspec/implementations/local.pyr   zLocalFileSystem.__init__"   s+    ""6"""$    c                     dS )Nr   r   r   s    r   fsidzLocalFileSystem.fsid&   s    wr   c                     |                      |          }|                     |          rt          |          |r|                     |d           d S t	          j        |fi | d S NTexist_ok)_strip_protocolexistsFileExistsErrormakedirsosmkdir)r   pathcreate_parentsr   s       r   r$   zLocalFileSystem.mkdir*   sy    ##D));;t 	(!$''' 	%MM$M.....HT$$V$$$$$r   c                 \    |                      |          }t          j        ||           d S )Nr   )r   r#   r"   )r   r%   r   s      r   r"   zLocalFileSystem.makedirs3   s0    ##D))
D8,,,,,,r   c                 X    |                      |          }t          j        |           d S N)r   r#   rmdirr   r%   s     r   r*   zLocalFileSystem.rmdir7   s&    ##D))
r   c                    |                      |          }|                     |          }g }|d         dk    rt          j        |          5 }|D ]Y}	 |r|                     |          n|                      |j                  }|                    |           J# t          $ r Y Vw xY w	 d d d            n# 1 swxY w Y   n|r|gn|d         g}|S )Ntype	directoryname)r   infor#   scandirr%   appendFileNotFoundError)	r   r%   detailr   	path_infoinfositfr0   s	            r   lszLocalFileSystem.ls;   s5   ##D))IIdOO	V++D!! R  A 06Wtyy|||4;O;OPQPV;W;WT****,                  $*BYKK	&0A/BEs7   B7ABB7
B'$B7&B''B77B;>B;c                 ~   t          |t          j                  r|                    d          }|                                }|                    d          rd}n|                    d          rd}nd}|j        }|r1	 |                    d          }|j        }n# t          $ r d}Y nw xY w| 	                    |j
                  }n| 	                    |          }t          j        |d          }t          j        |j                  }|rt          j        |d          }|j        }t          j        |j                  rd}nt          j        |j                  rd}nd}t          |d|j                  }|||||d	}	d
D ]}
t          |d|
           |	|
<   |rt          j        |          |	d<   |	S )NF)follow_symlinksr.   r   otherTr   st_birthtime)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getattrst_ctimereadlink)r   r%   r   outlinktr>   out2created_timeresultfields              r   r0   zLocalFileSystem.infoN   s   dBK((  	))E)22C??$$D{{5{11 e44 ;D 99T9::D<DD   DDD''	22DD ''--D'$666C<,,D :gdD999;D|CK(( ck**  sNCLAA #
 
 E 	8 	8E#Cu77F5MM 	6$&K$5$5F=!s   B! !B0/B0c                 *    t          j        |          S r)   )osplexists)r   r%   r   s      r   ra   zLocalFileSystem.lexists   s    {4   r   c                    |                      |          }|                      |          }| j        r*|                     |                     |          d           |                     |          rt          j        ||           d S |                     |          r|                     |d           d S 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 	+OE5)))))ZZ 	+KKK-----#E***r   c                 j    |                      |          }t          j                            |          S r)   )r   r#   r%   rd   r+   s     r   rd   zLocalFileSystem.isfile   s)    ##D))w~~d###r   c                 j    |                      |          }t          j                            |          S r)   )r   r#   r%   rg   r+   s     r   rg   zLocalFileSystem.isdir   s)    ##D))w}}T"""r   Nc                     t          |          r@t          |d          5 }t          j        ||           d d d            d S # 1 swxY w Y   d S  | j        ||fi |S )Nrb)r   openre   copyfileobjrk   )r   ri   rj   callbackr   r8   s         r   get_filezLocalFileSystem.get_file   s    e 	8eT"" -a"1e,,,- - - - - - - - - - - - - - - - - -  4<u77777s   AA
Ac                       | j         ||fi |S r)   )rk   )r   ri   rj   rr   r   s        r   put_filezLocalFileSystem.put_file   s    t|E533F333r   	recursivec                     |                      |          }|                      |          }t          j        ||           dS )zMove files/directories
        For the specific case of local, all ops on directories are recursive and
        the recursive= kwarg is ignored.
        N)r   re   move)r   ri   rj   rv   r   s        r   mvzLocalFileSystem.mv   sB    
 $$U++$$U++E5!!!!!r   c                     |                      |          }|                      |          }t          j        ||fi | d S r)   )r   r#   rY   r   srcdstr   s       r   rY   zLocalFileSystem.link   sH    ""3''""3''
S##F#####r   c                     |                      |          }|                      |          }t          j        ||fi | d S r)   )r   r#   symlinkr{   s       r   r   zLocalFileSystem.symlink   sH    ""3''""3''

3&&v&&&&&r   returnc                 f    t           j                            |                     |                    S r)   )r#   r%   r@   r   r+   s     r   r@   zLocalFileSystem.islink   s$    w~~d22488999r   c                 T    t          j        |                     |                     d S r)   )r#   remover   r+   s     r   rm_filezLocalFileSystem.rm_file   s&    
	$&&t,,-----r   c                 x   t          |t                    s|g}|D ]}|                     |          }|                     |          r^|st	          d          t          j        |          t          j                    k    rt	          d          t          j
        |           t          j        |           d S )Nz+Cannot delete directory, set recursive=Truez'Cannot delete current working directory)rI   listr   rg   
ValueErrorr`   abspathr#   getcwdre   rmtreer   )r   r%   rv   maxdepthps        r   rmzLocalFileSystem.rm   s    $%% 	6D 		 		A$$Q''Azz!}}   T$%RSSS;q>>RY[[00$%NOOOa    	!		 		r   c                 6    |                      |          }d| S )Nfile://)r   )r   r/   s     r   unstrip_protocolz LocalFileSystem.unstrip_protocol   s#    ##D))r   ro   c                     |                      |          }| j        r.d|v r*|                     |                     |          d           t	          ||fd| i|S )NwTr   fs)r   r   r"   rc   LocalFileOpener)r   r%   rA   
block_sizer   s        r   _openzLocalFileSystem._open   sf    ##D))? 	=sd{{MM$,,t,,tM<<<tT==d=f===r   c                 ^   |                      |          }| j        r*|                     |                     |          d           |                     |          rt          j        |d            n"t          |d                                           |rt          j	        |d           d S d S )NTr   ar   )
r   r   r"   rc   r    r#   utimerp   closetruncate)r   r%   r   r   s       r   touchzLocalFileSystem.touch   s    ##D))? 	=MM$,,t,,tM<<<;;t 	$HT4    sOO!!### 	!Ka     	! 	!r   c                     |                      |          }t          j                            |d         t          j        j                  S )Nr%   r?   tzr0   datetimefromtimestamptimezoneutcr   r%   r0   s      r   r?   zLocalFileSystem.created   sD    yydy## ..O 1 5 / 
 
 	
r   c                     |                      |          }t          j                            |d         t          j        j                  S )Nr   rD   r   r   r   s      r   modifiedzLocalFileSystem.modified   s;    yydy## ..tG}ARAV.WWWr   c                    |                      |          }t          j        dk    r|                    dd          d         pdS |                    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   rc   zLocalFileSystem._parent   s    ""4((6S==;;sA&&q)0S0 KKQ''*E5zzQ1:$$ 8d?*Lr   c                    t          |          }|                    d          r|dd          }n_|                    d          r|dd          }n?|                    d          r|dd          }n|                    d          r
|dd          }t          |          }t          j        d	k    r|d
d         dk    r|d d         |dd          }}ne|d d         dk    rU|                    d	d          x}dk    s|                    d	|d
z             x}dk    r|d}}n|d |         ||d          }}nd}|                    d	          p| j        }||z   S |                    d	          p| 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   s   d##??9%% 	8DD__W%% 	8DD__Z(( 	8DD__X&& 	8Dt$$6S== AaCyC #2A2hQRRtbqbT!! #iiQ///FB66"iiVaZ888F; ; #'4EE"&ww-fgg4EE ;;s##6sD4< ;;s##6s6r   c                     dS NTr   r   s    r   _isfilestorezLocalFileSystem._isfilestore   s	     tr   c                 J    t          |          }t          j        ||          S r)   )r   r#   chmod)r   r%   rA   s      r   r   zLocalFileSystem.chmod&  s!    d##xd###r   )F)Tr)   )FN)ro   N)'__name__
__module____qualname____doc__r   protocol
local_filer   propertyr   r$   r"   r*   r9   r0   ra   rk   rd   rg   rs   ru   boolry   rY   r   r@   r   r   r   r   r   r?   r   classmethodrc   r   r   r   __classcell__)r   s   @r   r
   r
      s[         KHJ% % % % % %   X% % % %- - - -     &1 1 1f! ! !
+ 
+ 
+$ $ $# # #8 8 8 84 4 4 4" "$ " " " "$ $ $
' ' '
:d : : : :. . .        > > > >	! 	! 	! 	!
 
 
X X X   [ $7 $7 [$7L  $ $ $ $ $ $ $r   r
   c                 Z   t          | t                    s{t          | t          t          t          f          r" t          |           d | D                       S t          |           } t          | t                    st          d| d          t          j	        dk    r| 
                    d          r| S | 
                    d          rt          j        |           S | 
                    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    r6t          |           dk    r| d         dz   S |                     dd          } | S | dd         dk    r!t!          t          j        |                     S | 
                    d          r!d| dd                             dd          z   S | 
                    d          rE|                     dd          } t          j        t          j                              d          |  S |                     dd          } | 
                    d          r| dd         } n| d	k    rd
} t!          t          j                               d|  S )z-Make path generic and absolute for current OSc              3   4   K   | ]}t          |          V  d S r)   )r   ).0r   s     r   	<genexpr>z"make_path_posix.<locals>.<genexpr>/  s*      ??Qoa00??????r   zcould not convert z
 to stringr   ~z./r   N.r   r   r   r   r   r   \)z\\r   r   )r   r   )rI   strr   settupler-   r   	TypeErrorr#   r   r   r`   
expanduserr   r   replacer   
splitdriver   s    r   r   r   +  s   dC   IdT3.// 	I4::??$??????!$''DdC(( I GT G G GHHH	v}}??3 	K__S!! 	>$'''__T"" 	8DDS[[D)++&&&&& !9QqS	S 0 08D!94yyA~~Aw~%<<c**DK!A#Y#"3>$#7#7888__^,, 	<$qrr(**45555__[)) 
	<<<c**DnRY[[11!4<d<<<<<c**Dt$$ ABBx%bikk22;;T;;;r   c                     |                      t          j                  p,t          j        duo|                      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     ==  XRYd%:%Wt}}RY?W?WXr   r   )maxsize  maskr   c                 V    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   j  s#     HTNNEHUOOO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dS ) r   TNc                     t                               d|           || _        || _        || _        d | _        || _        t          ||          | _        t          j
        | _        |                                  d S )Nzopen file: %s)loggerdebugr%   rA   r   r8   
autocommitr   compressionioDEFAULT_BUFFER_SIZE	blocksizer   )r   r%   rA   r   r   r   r   s          r   r   zLocalFileOpener.__init__x  sh     	_d+++		$*4==/

r   c                 B   | j         | j         j        r| j        s	d| j        vrVt	          | j        | j                  | _         | j        r.t          | j                 } || j         | j                  | _         nLt          j	                    \  }}t          j        |           || _        t	          || j                  | _         d| j        vrO| j                             dd          | _        | j                             d           | j        | j         _        d S d S d S )Nr   rA   r   r   )r8   closedr   rA   rp   r%   r   r   tempfilemkstempr#   r   tempseekr>   )r   compressir/   s       r   r   zLocalFileOpener._open  s   6>TV]> 
4#TY"6"6didi888# >$T%56H%Xdf49===DF #*,,4 	d333$)## FKK1--	A"i > $#r   c                     d| j         vrt          |                                  | j                            |           | j                            ||z
            S Nr)rA   r   r   r8   r   read)r   startends      r   _fetch_rangezLocalFileOpener._fetch_range  sN    di

Ev{{3;'''r   c                     d | _         |                    dd           }| j                            |           d|d         v r7d | _         |                                  | j                             |           d S d S )Nlocr   rA   )r8   pop__dict__updater   r   )r   stater  s      r   __setstate__zLocalFileOpener.__setstate__  sw    iit$$U###%-DFJJLLLFKK  r   c                     | j                                         }|                    d           d| j        v r| j                                        |d<   n| j        j        st          d          |S )Nr8   r   r  z+Cannot serialise open write-mode local file)r  copyr  rA   r8   tellr   r   )r   ds     r   __getstate__zLocalFileOpener.__getstate__  sg    M  	c


$)v{{}}AeHH6= P !NOOOr   c                 l   | j         rt          d          	 t          j        | j        | j                   	 d}t          j        | j        |t          |           z             d S # t          $ r Y d S w xY w# t          $ r1}t          j        
                    | j                  s|Y d }~d S d }~ww xY w)Nz0Can only commit if not already set to autocommitr   )r   RuntimeErrorre   rx   r   r%   r#   r   r   PermissionErrorr    )r   r   es      r   commitzLocalFileOpener.commit  s    ? 	SQRRR	K	49---DIdOO+;$;<<<<<     	 	 	
 7>>$),,      	s(   A8 -A' '
A54A58
B3&B..B3c                 d    | j         rt          d          t          j        | j                   d S )Nz#Cannot discard if set to autocommit)r   r  r#   r   r   r   s    r   discardzLocalFileOpener.discard  s4    ? 	FDEEE
	$)r   r   c                     dS r   r   r   s    r   readablezLocalFileOpener.readable  s    tr   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      tv{D+F+++r   c                 &     | j         j        |i |S r)   )r8   writer  s      r   r!  zLocalFileOpener.write  s    tv|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      tv////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    tv0000r   c                 4    | j                                         S r)   )r8   r   r   s    r   r   zLocalFileOpener.close  s    v||~~r   c                 6    | j                             |          S r)   )r8   r   )r   r>   s     r   r   zLocalFileOpener.truncate  s    vt$$$r   c                     | j         j        S r)   )r8   r   r   s    r   r   zLocalFileOpener.closed  s    v}r   c                 4    | j                                         S r)   )rawfilenor   s    r   r0  zLocalFileOpener.fileno  s    x   r   c                 8    | j                                          d S r)   )r8   flushr   s    r   r2  zLocalFileOpener.flush  s    r   c                 4    | j                                         S r)   )r8   __iter__r   s    r   r4  zLocalFileOpener.__iter__  s    v   r   c                 ,    t          | j        |          S r)   )rU   r8   )r   items     r   __getattr__zLocalFileOpener.__getattr__  s    tvt$$$r   c                     d| _         | S r   )
_incontextr   s    r   	__enter__zLocalFileOpener.__enter__  s    r   c                 L    d| _         | j                            |||           d S )NF)r9  r8   __exit__)r   exc_type	exc_value	tracebacks       r   r<  zLocalFileOpener.__exit__   s'    )Y7777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   r0  r2  r4  r7  r:  r<  r   r   r   r   r   w  s       @D   ( ( ($( ( (      (  
$    $$ $ $ $ $, , ,- - -, , ,, , ,0 0 00 0 01 1 1  % %S % % % %   X! ! !   ! ! !% % %  8 8 8 8 8r   r   )r   )r   r   loggingr#   os.pathr%   r`   re   rK   r   	functoolsr   fsspecr   fsspec.compressionr   fsspec.corer   fsspec.utilsr   r   	getLoggerr   r
   r   r   r@  r   IOBaser   r   r   r   <module>rJ     s    				  				                % % % % % % $ $ $ $ $ $ ' ' ' ' ' ' 3 3 3 3 3 3 3 3		>	*	*U$ U$ U$ U$ U$( U$ U$ U$p0< 0< 0<f	Y 	Y 	Y 1	 	C 	C 	 	 	 	K8 K8 K8 K8 K8bi K8 K8 K8 K8 K8r   