
    ob1D                        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(                  rjd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      Z0ee0e ge,e0   f   Z1 ej^                  ddd      Z2 ej^                  dd      Z3ejh                   G d deejj                  e2                Z6y)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                       e Zd ZdZdZ fdZd Zd Zd Zd Z	d Z
	 	 	 d4d	Zd5d
Zd Zd Z	 	 d6dZd7dZd7dZd8dZd Zd Zd Z	 	 d9dZd Zd9dZd Zd7dZd7dZd:dZd Zd5dZd Z	 	 	 	 	 	 d;dZ d Z!	 	 	 d<d Z"d=d!Z#d" Z$d# Z%d$ Z&d>d%Z'd& Z(d>d'Z)d( Z*d) Z+d* Z,	 	 d6d+Z-	 	 	 	 	 	 d?d,Z.	 d5d-Z/d. Z0d5d/Z1	 	 	 d<d0Z2d1 Z3d2 Z4e5d3        Z6 xZ7S )@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                 8    || _         t        t        |           y N)_wrap_fssuperr*   __init__)selfwrap_fs	__class__s     +/usr/lib/python3/dist-packages/fs/wrapfs.pyr/   zWrapFS.__init__@   s    fd$&    c                 b    dj                  | j                  j                  | j                        S )Nz{}({!r}))formatr2   __name__r-   r0   s    r3   __repr__zWrapFS.__repr__E   s#      !8!8$--HHr4   c           	         g }| }t        |d      r9t        |dd       }||j                  |       |j                  }t        |d      r9|r)dj	                  |dj                  |d d d               }|S dj	                  |      }|S )Nr-   	wrap_namez{}({})z, z{})hasattrgetattrappendr-   r6   r   )r0   wraps_fsr;   _strs        r3   __str__zWrapFS.__str__I   s    c:&[$7I$Y',,C	 c:&
 ??3		%"+(>?D  ;;s#Dr4   c                     | 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-   )r0   paths     r3   delegate_pathzWrapFS.delegate_pathX   s     }}d""r4   c                     | 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`.

        rE   r8   s    r3   delegate_fszWrapFS.delegate_fse   s     }}r4   c                     | j                          | j                  |      \  }}t        |      5  |j                  ||      cd d d        S # 1 sw Y   y xY wr,   )checkrG   r	   appendbytes)r0   rF   datarA   _paths        r3   rL   zWrapFS.appendbyteso   sJ    

''-
U4  	0??5$/	0 	0 	0   AAc                     | j                          | j                  |      \  }}t        |      5  |j                  |||||      cd d d        S # 1 sw Y   y xY wN)encodingr   newline)rK   rG   r	   
appendtext)r0   rF   textrR   r   rS   rA   rN   s           r3   rT   zWrapFS.appendtextv   sZ     	

''-
U4  	>>thvw " 	 	 	s   AAc                 .   | j                          | j                  |      \  }}t        |      5  |j                  ||      j                  }d d d        t        t        |            dk(  rt              }d|d   d<   t              S # 1 sw Y   >xY w)N)
namespaces/ basicname)	rK   rG   r	   getinforawr   r   dictr
   )r0   rF   rW   rA   rN   raw_infos         r3   r\   zWrapFS.getinfo   s    

''-
U4  	E{{5Z{@DDH	E8D>"c)H~H(*HWf%H~	E 	Es   BBc                     | j                          | j                  |      \  }}t        |      5  |j                  |      }d d d        |S # 1 sw Y   S xY wr,   )rK   rG   r	   listdir)r0   rF   rA   rN   dir_lists        r3   ra   zWrapFS.listdir   sO    

''-
U4  	*{{5)H	*	*   AAc                 b    | j                          | j                         }|j                         S r,   )rK   rI   lock)r0   rA   s     r3   re   zWrapFS.lock   s%    

 xxzr4   c                     | j                          | j                  |      \  }}t        |      5  |j                  |||      cd d d        S # 1 sw Y   y xY wN)permissionsrecreate)rK   rG   r	   makedirr0   rF   rh   ri   rA   rN   s         r3   rj   zWrapFS.makedir   sT     	

''-
U4  	R;;u+;Q	R 	R 	Rs   AAc                     | j                  |      \  }}| j                  |      \  }}t        ||||i      5  |j                  ||||       d d d        y # 1 sw Y   y xY w)N)	overwritepreserve_time)rG   r	   move)	r0   src_pathdst_pathrm   rn   rA   	_src_path_	_dst_paths	            r3   ro   zWrapFS.move   sj    ++H5Y))(39IxHEF 	HH9	  	 	 	   AA c                     | j                  |      \  }}| j                  |      \  }}t        ||||i      5  |j                  ||||       d d d        y # 1 sw Y   y xY w)N)creatern   )rG   r	   movedir)	r0   rp   rq   rw   rn   rA   rr   rs   rt   s	            r3   rx   zWrapFS.movedir   sj    ++H5Y))(39IxHEF 	KK9V=  	 	 	ru   c                     | j                          | j                  |      \  }}t        |      5   |j                  |f|dd|}d d d        |S # 1 sw Y   S xY w)Nr<   )mode	buffering)rK   rG   r	   openbin)r0   rF   rz   r{   optionsrA   rN   bin_files           r3   r|   zWrapFS.openbin   s`    

''-
U4  	N"s{{5MtrMWMH	N	Ns   AAc                     | j                          | j                  |      \  }}t        |      5  |j                  |       d d d        y # 1 sw Y   y xY wr,   )rK   rG   r	   remover0   rF   rA   rN   s       r3   r   zWrapFS.remove   sH    

''-
U4  	JJu	 	 	   AAc                    | j                          t        t        |            }|dk(  rt        j                         | j                  |      \  }}t        |      5  |j                  |       d d d        y # 1 sw Y   y xY wNrX   )rK   r   r   r   RemoveRootErrorrG   r	   	removedir)r0   rF   rN   rA   s       r3   r   zWrapFS.removedir   sl    

'C<((**''-
U4  	!MM% 	! 	! 	!s   A88Bc                    | j                          t        t        |            }| j                  |      \  }}t	        |      5  |dk(  r\|j                  |      D ]G  }t        ||j                        }|j                  r|j                  |       7|j                  |       I n|j                  |       d d d        y # 1 sw Y   y xY wr   )rK   r   r   rG   r	   scandirr   r[   is_dir
removetreer   )r0   dir_pathrN   _delegate_fs_delegate_pathinfo	info_paths          r3   r   zWrapFS.removetree   s    

*+'+'9'9('C$n8$ 	8| )00@ 7D $^TYY ?I{{$//	:$++I67 ''7	8 	8 	8s   A3C  C	c              #      K   | j                          | j                  |      \  }}t        |      5  |j                  |||      D ]  }|  	 d d d        y # 1 sw Y   y xY ww)N)rW   page)rK   rG   r	   r   )r0   rF   rW   r   rA   rN   r   s          r3   r   zWrapFS.scandir   sd      	

''-
U4  	EjtL 
	 	 	s   0A&A	A&A#A&c                 n    | j                          | j                  |      \  }}|j                  ||      S r,   )rK   rG   setinfo)r0   rF   r   rA   rN   s        r3   r   zWrapFS.setinfo   s0    

''-
U{{5$''r4   c                     | j                          | j                  |      \  }}t        |      5  |j                  |||       d d d        y # 1 sw Y   y xY w)N)accessedmodified)rK   rG   r	   settimes)r0   rF   r   r   rA   rN   s         r3   r   zWrapFS.settimes   sR    

''-
U4  	FLLHLE	F 	F 	Fs   AAc                     | j                          | j                  |      \  }}t        |      5  |j                  |       d d d        y # 1 sw Y   y xY wr,   )rK   rG   r	   touchr   s       r3   r   zWrapFS.touch  sH    

''-
U4  	IIe	 	 	r   c                    | j                  |      \  }}| j                  |      \  }}t        ||||i      5  |s&|j                  |      rt        j                  |      t        |||||       d d d        y # 1 sw Y   y xY wN)rn   )rG   r	   existsr   DestinationExistsr   )	r0   rp   rq   rm   rn   src_fsrr   dst_fsrt   s	            r3   copyzWrapFS.copy
  s     ..x8	 ..x8	IxHEF 	Yy!9..y99fi-X	Y 	Y 	Ys   9A::Bc                 l   | j                  |      \  }}| j                  |      \  }}t        ||||i      5  |s&|j                  |      st        j                  |      |j                  |      j                  st        j                  |      t        |||||       d d d        y # 1 sw Y   y xY wr   )	rG   r	   r   r   ResourceNotFoundr\   r   DirectoryExpectedr   )	r0   rp   rq   rw   rn   r   rr   r   rt   s	            r3   copydirzWrapFS.copydir  s     ..x8	 ..x8	IxHEF 	X&--	":--h77>>),33..x88VY	W	X 	X 	Xs   A)B**B3c                     | j                          | j                  |      \  }}t        |      5  |j                  ||      cd d d        S # 1 sw Y   y xY w)N)wipe)rK   rG   r	   rw   )r0   rF   r   rA   rN   s        r3   rw   zWrapFS.create  sL    

''-
U4  	0::e$:/	0 	0 	0   AAc                     | j                          | j                  |      \  }}t        |      5  |j                  |      }d d d        |S # 1 sw Y   S xY wr,   )rK   rG   r	   desc)r0   rF   rA   rN   r   s        r3   r   zWrapFS.desc%  sN    

''-
U4  	#88E?D	#	#rc   c                     | j                          | j                  |      \  }}t        |      5   |j                  ||fd|i| d d d        y # 1 sw Y   y xY wN
chunk_size)rK   rG   r	   downloadr0   rF   filer   r}   rA   rN   s          r3   r   zWrapFS.download-  sZ    

''-
U4  	HCLLGGwG	H 	H 	H   AAc                     | j                          | j                  |      \  }}t        |      5  |j                  |      }d d d        |S # 1 sw Y   S xY wr,   )rK   rG   r	   r   )r0   rF   rA   rN   r   s        r3   r   zWrapFS.exists4  sO    

''-
U4  	'ZZ&F	'	'rc   c              #      K   | j                          | j                  |      \  }}	t        |j                  |	||||||            }
t	        |      5  |
D ]  }|  	 d d d        y # 1 sw Y   y xY ww)N)exclude_dirsexclude_filesfilesdirsrW   r   )rK   rG   iter	filterdirr	   )r0   rF   r   r   r   r   rW   r   rA   rN   
iter_filesr   s               r3   r   zWrapFS.filterdir<  s      	

''-
UMM)+%  


 4  	" 
	 	 	s   AA5A) 	A5)A2.A5c                     | j                          | j                  |      \  }}t        |      5  |j                  |      }d d d        |S # 1 sw Y   S xY wr,   )rK   rG   r	   	readbytes)r0   rF   rA   rN   _bytess        r3   r   zWrapFS.readbytesX  sO    

''-
U4  	*]]5)F	*	*rc   c                     | j                          | j                  |      \  }}t        |      5  |j                  ||||      }d d d        |S # 1 sw Y   S xY wrQ   )rK   rG   r	   readtext)r0   rF   rR   r   rS   rA   rN   _texts           r3   r   zWrapFS.readtext`  sc     	

''-
U4  	LL ! E	 		 s   AAc                 f    | j                          | j                         j                  |      }|S )N)	namespace)rK   rI   getmeta)r0   r   metas      r3   r   zWrapFS.getmetap  s,    

!))I)>r4   c                     | j                          | j                  |      \  }}t        |      5  |j                  |      }d d d        |S # 1 sw Y   S xY wr,   )rK   rG   r	   getsize)r0   rF   rA   rN   sizes        r3   r   zWrapFS.getsizev  sO    

''-
U4  	&;;u%D	&	&rc   c                     | j                          | j                  |      \  }}t        |      5  |j                  |      }d d d        |S # 1 sw Y   S xY wr,   )rK   rG   r	   
getsyspath)r0   rF   rA   rN   sys_paths        r3   r   zWrapFS.getsyspath~  sO    

''-
U4  	-~~e,H	-	-rc   c                     | j                          | j                  |      \  }}t        |      5  |j                  |      }d d d        |S # 1 sw Y   S xY wr,   )rK   rG   r	   gettype)r0   rF   rA   rN   _types        r3   r   zWrapFS.gettype  sO    

''-
U4  	'KK&E	'	'rc   c                     | j                          | j                  |      \  }}t        |      5  |j                  ||      cd d d        S # 1 sw Y   y xY wN)purpose)rK   rG   r	   geturl)r0   rF   r   rA   rN   s        r3   r   zWrapFS.geturl  sL    

''-
U4  	6::eW:5	6 	6 	6r   c                     | j                          | j                  |      \  }}t        |      5  |j                  |      }d d d        |S # 1 sw Y   S xY wr,   )rK   rG   r	   
hassyspath)r0   rF   rA   rN   has_sys_paths        r3   r   zWrapFS.hassyspath  sQ    

''-
U4  	1>>%0L	1	1rc   c                     | j                          | j                  |      \  }}t        |      5  |j                  ||      }d d d        |S # 1 sw Y   S xY wr   )rK   rG   r	   hasurl)r0   rF   r   rA   rN   has_urls         r3   r   zWrapFS.hasurl  sS    

''-
U4  	9jjj8G	9	9s   AAc                     | j                          | j                  |      \  }}t        |      5  |j                  |      }d d d        |S # 1 sw Y   S xY wr,   )rK   rG   r	   isdir)r0   rF   rA   rN   _isdirs        r3   r   zWrapFS.isdir  sO    

''-
U4  	&YYu%F	&	&rc   c                     | j                          | j                  |      \  }}t        |      5  |j                  |      }d d d        |S # 1 sw Y   S xY wr,   )rK   rG   r	   isfile)r0   rF   rA   rN   _isfiles        r3   r   zWrapFS.isfile  O    

''-
U4  	(jj'G	(	(rc   c                     | j                          | j                  |      \  }}t        |      5  |j                  |      }d d d        |S # 1 sw Y   S xY wr,   )rK   rG   r	   islink)r0   rF   rA   rN   _islinks        r3   r   zWrapFS.islink  r   rc   c                 r    | j                          | j                  |      \  }}|j                  |||      S rg   )rK   rG   makedirsrk   s         r3   r   zWrapFS.makedirs  s6     	

''-
U||E{X|NNr4   c                     | j                          | j                  |      \  }	}
t        |      5   |	j                  |
f||||||d|}d d d        |S # 1 sw Y   S xY w)N)rz   r{   rR   r   rS   line_buffering)rK   rG   r	   open)r0   rF   rz   r{   rR   r   rS   r   r}   rA   rN   	open_files               r3   r   zWrapFS.open  s}     	

''-
U4  
	 	#!-	 	I
	 
	 s   AAc                     ddl m} |xs |}| j                  |      j                  st	        j
                  |      t        |      5   || |      cd d d        S # 1 sw Y   y xY w)Nr   r!   )rF   )subfsr"   r\   r   r   r   r	   )r0   rF   factoryr"   s       r3   opendirzWrapFS.opendir  s[     	!"U||D!((**554  	'4&	' 	' 	's   		AA%c                     | j                          | j                  |      \  }}t        |      5  |j                  ||       d d d        y # 1 sw Y   y xY wr,   )rK   rG   r	   
writebytes)r0   rF   contentsrA   rN   s        r3   r   zWrapFS.writebytes  sJ    

''-
U4  	,NN5(+	, 	, 	,s   AAc                     | j                          | j                  |      \  }}t        |      5   |j                  ||fd|i| d d d        y # 1 sw Y   y xY wr   )rK   rG   r	   uploadr   s          r3   r   zWrapFS.upload  sZ    

''-
U4  	FCJJudEzEWE	F 	F 	Fr   c                     | j                          | j                  |      \  }}t        |      5  |j                  |||||       d d d        y # 1 sw Y   y xY wrQ   )rK   rG   r	   	writefile)r0   rF   r   rR   r   rS   rA   rN   s           r3   r   zWrapFS.writefile   sZ     	

''-
U4  	MMthvw  	 	 	r   c                     | j                          | j                  |      \  }}t        |      5  |j                  |       d d d        t	        t        |            }|S # 1 sw Y   xY wr,   )rK   rG   r	   validatepathr   r   r   s       r3   r   zWrapFS.validatepath  s]    

''-
U4  	$U#	$x~&	$ 	$s   A  A)c                     | j                          | j                  |      \  }}t        |      5  |j                  ||      cd d d        S # 1 sw Y   y xY wr,   )rK   rG   r	   hash)r0   rF   r[   rA   rN   s        r3   r   zWrapFS.hash  sJ    

''-
U4  	)88E4(	) 	) 	)rO   c                 L    | j                   j                  j                  |       S r,   )r-   walker_classbindr8   s    r3   walkzWrapFS.walk   s     }}))..t44r4   )zutf-8NrY   r,   )NF)FF)rr<   )NN)F)NNNNNN)NNrY   )standard)r   )r   r<   NNrY   F)8r7   
__module____qualname____doc__r;   r/   r9   rC   rG   rI   rL   rT   r\   ra   re   rj   ro   rx   r|   r   r   r   r   r   r   r   r   r   rw   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__)r2   s   @r3   r*   r*   4   s    I'
I#0  	 	
R!8, 	(FY	X0H 8  6 		O < ',F  ) 5 5r4   r*   )7r   
__future__r   typingsixrY   r   baser   r   r   r   error_toolsr	   r   r
   rF   r   r   r   TYPE_CHECKINGr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	threadingr   enumsr   r   rh   r    r   r"   r   r#   TypeVarr$   _OpendirFactoryr&   r(   python_2_unicode_compatibleGenericr*    r4   r3   <module>r     s    (  
   % &  ) )	   " "#(!	D	)BDz5945O V^^D5V^^D-   n5R# n5 !n5r4   