o
    pf1D                     @   sp  d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
mZ ddlmZ dd	lmZ dd
lmZmZmZ ejrddlmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"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* ddl+m,Z, ddl-m.Z. ej/dddZ0ee0e ge,e0 f Z1ej/ddddZ2ej/dddZ3ej4G dd deej5e2 Z6dS )z$Base class for filesystem wrappers.
    )unicode_literalsN   )errors)FS)copy_dir	copy_file)unwrap_errors)Info)abspathjoinnormpath)IOAnyAnyStrBinaryIOCallable
CollectionIterableIteratorListMappingOptionalTextTupleUnion)datetime)RLock)ResourceType)RawInfo)PermissionsSubFS)BoundWalker_Tr   )bound_FT)r$   	covariant_Wz
WrapFS[FS]c                       s  e Zd ZdZdZ fddZdd Zdd Zd	d
 Zdd Z	dd Z
			dlddZdmddZdd Zdd Z		dnddZdoddZdoddZdpd"d#Zd$d% Zd&d' Zd(d) Z		dqd*d+Zd,d- Zdqd.d/Zd0d1 Zdod2d3Zdod4d5Zdrd6d7Zd8d9 Zdmd:d;Zd<d= Z						dsd>d?Z d@dA Z!			dtdBdCZ"dudEdFZ#dGdH Z$dIdJ Z%dKdL Z&dvdNdOZ'dPdQ Z(dvdRdSZ)dTdU Z*dVdW Z+dXdY Z,		dndZd[Z-	 	!				dwd\d]Z.	dmd^d_Z/d`da Z0dmdbdcZ1			dtdddeZ2dfdg Z3dhdi Z4e5djdk Z6  Z7S )xWrapFSzA proxy for a filesystem object.

    This class exposes an filesystem interface, where the data is
    stored on another filesystem(s), and is the basis for
    `~fs.subfs.SubFS` and other *virtual* filesystems.

    Nc                    s   || _ tt|   d S N)_wrap_fssuperr(   __init__)selfwrap_fs	__class__ B/home/ertert/spirit/venv/lib/python3.10/site-packages/fs/wrapfs.pyr,   @   s   zWrapFS.__init__c                 C   s   d | jj| jS )Nz{}({!r}))formatr0   __name__r*   r-   r1   r1   r2   __repr__E   s   zWrapFS.__repr__c              	   C   sr   g }| }t |dr t|dd }|d ur|| |j}t |ds	|r2d|d|d d d }|S d|}|S )Nr*   	wrap_namez{}({})z, z{})hasattrgetattrappendr*   r3   r   )r-   wraps_fsr7   _strr1   r1   r2   __str__I   s   



zWrapFS.__str__c                 C   s
   | j |fS )zEncode a path for proxied filesystem.

        Arguments:
            path (str): A path on the filesystem.

        Returns:
            (FS, str): a tuple of ``(<filesystem>, <new_path>)``

        r*   )r-   pathr1   r1   r2   delegate_pathX   s   
zWrapFS.delegate_pathc                 C   s   | j S )zGet the proxied filesystem.

        This method should return a filesystem for methods not
        associated with a path, e.g. `~fs.base.FS.getmeta`.

        r@   r5   r1   r1   r2   delegate_fse   s   zWrapFS.delegate_fsc                 C   N   |    | |\}}t| |||W  d    S 1 s w   Y  d S r)   )checkrB   r   appendbytes)r-   rA   datar=   _pathr1   r1   r2   rF   o   
   

$zWrapFS.appendbytesutf-8 c                 C   sV   |    | |\}}t| |j|||||dW  d    S 1 s$w   Y  d S N)encodingr   newline)rE   rB   r   
appendtext)r-   rA   textrM   r   rN   r=   rH   r1   r1   r2   rO   v   s   	

$zWrapFS.appendtextc                 C   sz   |    | |\}}t| |j||dj}W d    n1 s"w   Y  tt|dkr9t|}d|d d< t|S )N)
namespaces/rK   basicname)	rE   rB   r   getinforawr
   r   dictr	   )r-   rA   rQ   r=   rH   raw_infor1   r1   r2   rU      s   
zWrapFS.getinfoc                 C   N   |    | |\}}t| ||}W d    |S 1 s w   Y  |S r)   )rE   rB   r   listdir)r-   rA   r=   rH   dir_listr1   r1   r2   rZ         

zWrapFS.listdirc                 C   s   |    |  }| S r)   )rE   rC   lock)r-   r=   r1   r1   r2   r]      s   zWrapFS.lockFc                 C   sR   |    | |\}}t| |j|||dW  d    S 1 s"w   Y  d S N)permissionsrecreate)rE   rB   r   makedirr-   rA   r_   r`   r=   rH   r1   r1   r2   ra      s
   
$zWrapFS.makedirc           	      C   d   |  |\}}|  |\}}t||||i |j||||d W d    d S 1 s+w   Y  d S )N)	overwritepreserve_time)rB   r   move)	r-   src_pathdst_pathrd   re   r=   	_src_path_	_dst_pathr1   r1   r2   rf         "zWrapFS.movec           	      C   rc   )N)createre   )rB   r   movedir)	r-   rg   rh   rm   re   r=   ri   rj   rk   r1   r1   r2   rn      rl   zWrapFS.movedirrr8   c                 K   s\   |    | |\}}t| |j|f|dd|}W d    |S 1 s'w   Y  |S )Nr8   )mode	buffering)rE   rB   r   openbin)r-   rA   rp   rq   optionsr=   rH   bin_filer1   r1   r2   rr      s   

zWrapFS.openbinc                 C   N   |    | |\}}t| || W d    d S 1 s w   Y  d S r)   )rE   rB   r   remover-   rA   r=   rH   r1   r1   r2   rv      
   
"zWrapFS.removec                 C   sj   |    tt|}|dkrt | |\}}t| || W d    d S 1 s.w   Y  d S NrR   )rE   r
   r   r   RemoveRootErrorrB   r   	removedir)r-   rA   rH   r=   r1   r1   r2   r{      s   
"zWrapFS.removedirc                 C   s   |    tt|}| |\}}t|7 |dkr7||D ]}t||j}|jr0|	| q|
| qn|	| W d    d S W d    d S 1 sOw   Y  d S ry   )rE   r
   r   rB   r   scandirr   rT   is_dir
removetreerv   )r-   dir_pathrH   _delegate_fs_delegate_pathinfo	info_pathr1   r1   r2   r~      s   
"zWrapFS.removetreec                 c   sb    |    | |\}}t| |j|||dD ]}|V  qW d    d S 1 s*w   Y  d S )N)rQ   page)rE   rB   r   r|   )r-   rA   rQ   r   r=   rH   r   r1   r1   r2   r|      s   
"zWrapFS.scandirc                 C   s"   |    | |\}}|||S r)   )rE   rB   setinfo)r-   rA   r   r=   rH   r1   r1   r2   r      s   zWrapFS.setinfoc                 C   sT   |    | |\}}t| |j|||d W d    d S 1 s#w   Y  d S )N)accessedmodified)rE   rB   r   settimes)r-   rA   r   r   r=   rH   r1   r1   r2   r      s
   
"zWrapFS.settimesc                 C   ru   r)   )rE   rB   r   touchrw   r1   r1   r2   r     rx   zWrapFS.touchc           	      C   s|   |  |\}}|  |\}}t||||i |s#||r#t|t|||||d W d    d S 1 s7w   Y  d S N)re   )rB   r   existsr   DestinationExistsr   )	r-   rg   rh   rd   re   src_fsri   dst_fsrk   r1   r1   r2   copy
  s   
"zWrapFS.copyc           	      C   s   |  |\}}|  |\}}t||||i) |s#||s#t|||js.t|t|||||d W d    d S 1 sBw   Y  d S r   )	rB   r   r   r   ResourceNotFoundrU   r}   DirectoryExpectedr   )	r-   rg   rh   rm   re   r   ri   r   rk   r1   r1   r2   copydir  s   

"zWrapFS.copydirc                 C   P   |    | |\}}t| |j||dW  d    S 1 s!w   Y  d S )N)wipe)rE   rB   r   rm   )r-   rA   r   r=   rH   r1   r1   r2   rm     
   
$zWrapFS.createc                 C   rY   r)   )rE   rB   r   desc)r-   rA   r=   rH   r   r1   r1   r2   r   %  r\   zWrapFS.descc                 K   \   |    | |\}}t| |j||fd|i| W d    d S 1 s'w   Y  d S N
chunk_size)rE   rB   r   downloadr-   rA   filer   rs   r=   rH   r1   r1   r2   r   -  
   
"zWrapFS.downloadc                 C   rY   r)   )rE   rB   r   r   )r-   rA   r=   rH   r   r1   r1   r2   r   4  r\   zWrapFS.existsc              
   c   sr    |    | |\}}	t|j|	||||||d}
t| |
D ]}|V  q!W d    d S 1 s2w   Y  d S )N)exclude_dirsexclude_filesfilesdirsrQ   r   )rE   rB   iter	filterdirr   )r-   rA   r   r   r   r   rQ   r   r=   rH   
iter_filesr   r1   r1   r2   r   <  s&   
"zWrapFS.filterdirc                 C   rY   r)   )rE   rB   r   	readbytes)r-   rA   r=   rH   _bytesr1   r1   r2   r   X  r\   zWrapFS.readbytesc                 C   sV   |    | |\}}t| |j||||d}W d    |S 1 s$w   Y  |S rL   )rE   rB   r   readtext)r-   rA   rM   r   rN   r=   rH   _textr1   r1   r2   r   `  s   

zWrapFS.readtextstandardc                 C   s   |    |  j|d}|S )N)	namespace)rE   rC   getmeta)r-   r   metar1   r1   r2   r   p  s   zWrapFS.getmetac                 C   rY   r)   )rE   rB   r   getsize)r-   rA   r=   rH   sizer1   r1   r2   r   v  r\   zWrapFS.getsizec                 C   rY   r)   )rE   rB   r   
getsyspath)r-   rA   r=   rH   sys_pathr1   r1   r2   r   ~  r\   zWrapFS.getsyspathc                 C   rY   r)   )rE   rB   r   gettype)r-   rA   r=   rH   _typer1   r1   r2   r     r\   zWrapFS.gettyper   c                 C   r   N)purpose)rE   rB   r   geturl)r-   rA   r   r=   rH   r1   r1   r2   r     r   zWrapFS.geturlc                 C   rY   r)   )rE   rB   r   
hassyspath)r-   rA   r=   rH   has_sys_pathr1   r1   r2   r     r\   zWrapFS.hassyspathc                 C   sR   |    | |\}}t| |j||d}W d    |S 1 s"w   Y  |S r   )rE   rB   r   hasurl)r-   rA   r   r=   rH   has_urlr1   r1   r2   r     s   

zWrapFS.hasurlc                 C   rY   r)   )rE   rB   r   isdir)r-   rA   r=   rH   _isdirr1   r1   r2   r     r\   zWrapFS.isdirc                 C   rY   r)   )rE   rB   r   isfile)r-   rA   r=   rH   _isfiler1   r1   r2   r     r\   zWrapFS.isfilec                 C   rY   r)   )rE   rB   r   islink)r-   rA   r=   rH   _islinkr1   r1   r2   r     r\   zWrapFS.islinkc                 C   s&   |    | |\}}|j|||dS r^   )rE   rB   makedirsrb   r1   r1   r2   r     s   zWrapFS.makedirsc              
   K   sd   |    | |\}	}
t| |	j|
f||||||d|}W d    |S 1 s+w   Y  |S )N)rp   rq   rM   r   rN   line_buffering)rE   rB   r   open)r-   rA   rp   rq   rM   r   rN   r   rs   r=   rH   	open_filer1   r1   r2   r     s&   

zWrapFS.openc                 C   sb   ddl m} |p	|}| |jstj|dt| || |W  d    S 1 s*w   Y  d S )Nr   r    )rA   )subfsr!   rU   r}   r   r   r   )r-   rA   factoryr!   r1   r1   r2   opendir  s   
$zWrapFS.opendirc                 C   sP   |    | |\}}t| ||| W d    d S 1 s!w   Y  d S r)   )rE   rB   r   
writebytes)r-   rA   contentsr=   rH   r1   r1   r2   r     s
   
"zWrapFS.writebytesc                 K   r   r   )rE   rB   r   uploadr   r1   r1   r2   r     r   zWrapFS.uploadc                 C   sX   |    | |\}}t| |j|||||d W d    d S 1 s%w   Y  d S rL   )rE   rB   r   	writefile)r-   rA   r   rM   r   rN   r=   rH   r1   r1   r2   r      s   	

"zWrapFS.writefilec                 C   sX   |    | |\}}t| || W d    n1 sw   Y  tt|}|S r)   )rE   rB   r   validatepathr
   r   rw   r1   r1   r2   r     s   
zWrapFS.validatepathc                 C   rD   r)   )rE   rB   r   hash)r-   rA   rT   r=   rH   r1   r1   r2   r     rI   zWrapFS.hashc                 C   s   | j j| S r)   )r*   walker_classbindr5   r1   r1   r2   walk   s   zWrapFS.walk)rJ   NrK   r)   )NF)FF)ro   r8   )NN)F)NNNNNN)NNrK   )r   )r   )ro   r8   NNrK   F)8r4   
__module____qualname____doc__r7   r,   r6   r?   rB   rC   rF   rO   rU   rZ   r]   ra   rf   rn   rr   rv   r{   r~   r|   r   r   r   r   r   rm   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   propertyr   __classcell__r1   r1   r/   r2   r(   4   s    


	


	
	




	











	r(   )7r   
__future__r   typingsixrK   r   baser   r   r   r   error_toolsr   r   r	   rA   r
   r   r   TYPE_CHECKINGr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	threadingr   enumsr   r   r_   r   r   r!   r   r"   TypeVarr#   _OpendirFactoryr%   r'   python_2_unicode_compatibleGenericr(   r1   r1   r1   r2   <module>   s2    @