B
    u9a+                 @   sj  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	 d dl
mZmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZ d dlmZ dZejdkrd dlZe  dd	 d
krd dlm!Z! qdZdZ!ndZddddddgZ"eeeefZ#dZ$dd Z%dd Z&G dd de'Z(G dd de(Z)G dd de(Z*e) Z+e* Z,G dd dZ-G d d! d!e-Z.e. Z/d"d# Z0e1ed$re2 e0Z0G d%d& d&Z3G d'd( d(Z4G d)d* d*e3Z5G d+d, d,e3Z6G d-d. d.e3Z7G d/d0 d0e	Z8G d1d de'Z9ej:;e9 G d2d de9Z<G d3d de9Z=G d4d de9Z>G d5d de>e<Z?G d6d de>e=Z@dS )7    N)Sequence)EINVALENOENTENOTDIREBADFELOOP)
attrgetter)S_ISDIRS_ISLNKS_ISREGS_ISSOCKS_ISBLKS_ISCHRS_ISFIFO)quote_from_bytesTnt   )   r   )_getfinalpathnameFPurePathPurePosixPathPureWindowsPathPath	PosixPathWindowsPath)   i  c             C   s    t | dd tkpt | dd tkS )NerrnoZwinerror)getattr_IGNORED_ERROS_IGNORED_WINERRORS)Z	exception r    /usr/lib/python3.7/pathlib.py_ignore_error-   s    r"   c             C   s   d| kpd| kpd| kS )N*?[r    )patr    r    r!   _is_wildcard_pattern2   s    r'   c               @   s$   e Zd Zdd Zdd Zdd ZdS )_Flavourc             C   s   | j j| _d S )N)sepjoin)selfr    r    r!   __init__<   s    z_Flavour.__init__c             C   s  g }| j }| j}d }}t|}x|D ]}|s0q&|r@|||}| |\}}}	||	krxPt|	|D ] }
|
rh|
dkrh|t|
 qhW n|	r|	dkr|t|	 |s|r&|sx6|D ].}|sq|r|||}| |d }|rP qW P q&W |s|r|||  |	  |||fS )N .r   )
r)   altsepreversedreplace	splitrootsplitappendsysinternreverse)r+   partsZparsedr)   r/   drvrootitpartZrelxr    r    r!   parse_parts?   s@    


z_Flavour.parse_partsc             C   sz   |r*|sp|rp|||| g|dd   fS nF|rb||ksJ|  ||  |krp||||dd   fS n|||| fS |||fS )N   )casefold)r+   r9   r:   r8   Zdrv2Zroot2Zparts2r    r    r!   join_parsed_partse   s    z_Flavour.join_parsed_partsN)__name__
__module____qualname__r,   r>   rA   r    r    r    r!   r(   8   s   &r(   c               @   s   e Zd ZdZdZdZeZej	dkZ
edZdZddd	d
hdd eddD B dd eddD B ZefddZdd Zdd Zd$ddZefddZdd Zdd Zdd  Zd!d" Zd#S )%_WindowsFlavour\/Tr   Z4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZz\\?\ZCONZPRNZAUXZNULc             C   s   h | ]}d | qS )zCOM%dr    ).0ir    r    r!   	<setcomp>   s    z_WindowsFlavour.<setcomp>r?   
   c             C   s   h | ]}d | qS )zLPT%dr    )rH   rI   r    r    r!   rJ      s    c             C   s\  |dd }|dd }||krP||krP|  |\}}|dd }|dd }nd}|dd }||kr||kr||kr||d}|dkr|||d }||d kr|dkrt|}|r||d|  |||d d  fS |d | |||d d  fS d }	}
|dkr6|| jkr6|d d }	|dd  }|}||krN|}
||}||	 |
|fS )Nr   r?   r   r-      :)_split_extended_pathfindlendrive_letterslstrip)r+   r<   r)   firstsecondprefixZthirdindexZindex2r9   r:   r    r    r!   r2      s6    "

z_WindowsFlavour.splitrootc             C   s   |  S )N)lower)r+   sr    r    r!   r@      s    z_WindowsFlavour.casefoldc             C   s   dd |D S )Nc             S   s   g | ]}|  qS r    )rX   )rH   pr    r    r!   
<listcomp>   s    z2_WindowsFlavour.casefold_parts.<locals>.<listcomp>r    )r+   r8   r    r    r!   casefold_parts   s    z_WindowsFlavour.casefold_partsFc             C   s   t |}|st S d }td k	r|r2| t|S g }xly| t|}W n> tk
r   |}tj|\}}|| ||kr|S Y q8X tjj	|ft
| S q8W d S )N)strosgetcwdr   _ext_to_normalFileNotFoundErrorpathr3   r4   r*   r0   )r+   rb   strictrY   Z
previous_sZ
tail_partstailr    r    r!   resolve   s&    

z_WindowsFlavour.resolvec             C   sX   d}| |rP|d d }|dd  }| drP||d d 7 }d|dd   }||fS )Nr-      zUNC\rL   rF   )
startswith)r+   rY   Z
ext_prefixrV   r    r    r!   rO      s    

z$_WindowsFlavour._split_extended_pathc             C   s   |  |d S )Nr?   )rO   )r+   rY   r    r    r!   r`      s    z_WindowsFlavour._ext_to_normalc             C   s6   |sdS |d  drdS |d dd  | jkS )NFr   z\\rM   r.   )rg   	partitionupperreserved_names)r+   r8   r    r    r!   is_reserved   s
    z_WindowsFlavour.is_reservedc             C   sd   |j }t|dkrJ|d dkrJ| dd  d}d|t|df S dt| d S d S )Nr   r?   rN   rG   zfile:///%s/%szutf-8zfile:)driverQ   as_posixrS   urlquote_from_bytesencode)r+   rb   rl   restr    r    r!   make_uri   s    z_WindowsFlavour.make_uric             C   s   dt jkrt jd }n`dt jkr,t jd }nJdt jkrnyt jd }W n tk
r\   d}Y nX |t jd  }ntd|rt jd |kr| |f\}}}|d t jd krtd	| ||d< |s|r|| | |d
d   }n
| |}|S )NHOMEZUSERPROFILEZHOMEPATHZ	HOMEDRIVEr-   zCan't determine home directoryZUSERNAMErM   z%Can't determine home directory for %rr?   )r^   environKeyErrorRuntimeErrorr>   r*   )r+   usernameuserhomer9   r:   r8   r    r    r!   
gethomedir   s,    




z_WindowsFlavour.gethomedirN)F)rB   rC   rD   r)   r/   has_drvntpathpathmodr^   nameis_supportedsetrR   Zext_namespace_prefixrangerj   r2   r@   r\   re   rO   r`   rk   rq   rx   r    r    r    r!   rE   w   s$   
	'

rE   c               @   sd   e Zd ZdZdZdZeZej	dkZ
efddZdd Zd	d
 ZdddZdd Zdd Zdd ZdS )_PosixFlavourrG   r-   Fr   c             C   sV   |rH|d |krH| |}t|t| dkr<d|d |fS d||fS n
dd|fS d S )Nr   r   r-   )rS   rQ   )r+   r<   r)   Zstripped_partr    r    r!   r2   #  s    
z_PosixFlavour.splitrootc             C   s   |S )Nr    )r+   rY   r    r    r!   r@   2  s    z_PosixFlavour.casefoldc             C   s   |S )Nr    )r+   r8   r    r    r!   r\   5  s    z_PosixFlavour.casefold_partsc                sJ   | j |ji  fdd | r0dnt } |t|pHS )Nc                s   | rd} x|D ]}|r|dkr,q|dkrF| \} }}q|  | }|krx| } | d k	rlqtd| y|}W n6 tk
r } z|jtkrr |} W d d }~X Y qX d |<  | |} | |< qW | S )Nr-   r.   z..zSymlink loop from %r)rg   r3   
rpartitionru   readlinkOSErrorr   r   )rb   rp   r|   _newpathtargete)_resolveaccessorseenr)   rc   r    r!   r   <  s0    

z'_PosixFlavour.resolve.<locals>._resolver-   )r)   	_accessoris_absoluter^   r_   r]   )r+   rb   rc   baser    )r   r   r   r)   rc   r!   re   8  s    &z_PosixFlavour.resolvec             C   s   dS )NFr    )r+   r8   r    r    r!   rk   e  s    z_PosixFlavour.is_reservedc             C   s   t |}dt| S )Nzfile://)bytesrn   )r+   rb   Zbpathr    r    r!   rq   h  s    z_PosixFlavour.make_uric             C   st   |s:y
t jd S  tk
r6   dd l}|t  jS X n6dd l}y||jS  tk
rn   td| Y nX d S )Nrr   r   z%Can't determine home directory for %r)	r^   rs   rt   pwdgetpwuidgetuidpw_dirgetpwnamru   )r+   rv   r   r    r    r!   rx   n  s    
z_PosixFlavour.gethomedirN)F)rB   rC   rD   r)   r/   ry   	posixpathr{   r^   r|   r}   r2   r@   r\   re   rk   rq   rx   r    r    r    r!   r     s   

-r   c               @   s   e Zd ZdS )	_AccessorN)rB   rC   rD   r    r    r    r!   r     s   r   c               @   s   e Zd ZejZejZejZejZejZej	Z	e
edr>ejZndd ZejZejZejZejZejZer~ertejZqdd Znedd ZejZdd Zd	S )
_NormalAccessorlchmodc             C   s   t dd S )Nz%lchmod() not available on this system)NotImplementedError)r+   Zpathobjmoder    r    r!   r     s    z_NormalAccessor.lchmodc             C   s   t dd S )Nz&symlink() not available on this system)r   )abtarget_is_directoryr    r    r!   symlink  s    z_NormalAccessor.symlinkc             C   s   t | |S )N)r^   r   )r   r   r   r    r    r!   r     s    c             C   s
   t |S )N)r^   r   )r+   rb   r    r    r!   r     s    z_NormalAccessor.readlinkN)rB   rC   rD   r^   statlstatopenlistdirscandirchmodhasattrr   mkdirunlinkrmdirrenamer1   r   supports_symlinksr   staticmethodutimer   r    r    r    r!   r     s*   

r   c             C   sP   | d }| dd  }|dkr"t }n$d|kr4tdnt|rBt}nt}|||S )Nr   r?   z**z:Invalid pattern: '**' can only be an entire path component)_RecursiveWildcardSelector
ValueErrorr'   _WildcardSelector_PreciseSelector)pattern_partsr&   child_partsclsr    r    r!   _make_selector  s    
r   	lru_cachec               @   s   e Zd Zdd Zdd ZdS )	_Selectorc             C   s.   || _ |rt|| _d| _nt | _d| _d S )NTF)r   r   	successordironly_TerminatingSelector)r+   r   r    r    r!   r,     s    
z_Selector.__init__c             C   s<   t |}|j}|j}|jj}||s,tg S | ||||S )N)typeis_direxistsr   r   iter_select_from)r+   parent_pathZpath_clsr   r   r   r    r    r!   select_from  s    z_Selector.select_fromN)rB   rC   rD   r,   r   r    r    r    r!   r     s   	r   c               @   s   e Zd Zdd ZdS )r   c             c   s
   |V  d S )Nr    )r+   r   r   r   r   r    r    r!   r     s    z!_TerminatingSelector._select_fromN)rB   rC   rD   r   r    r    r    r!   r     s   r   c               @   s   e Zd Zdd Zdd ZdS )r   c             C   s   || _ t| | d S )N)r|   r   r,   )r+   r|   r   r    r    r!   r,     s    z_PreciseSelector.__init__c             c   s^   yD| | j}| jr|n||rBx | j||||D ]
}|V  q4W W n tk
rX   d S X d S )N)_make_child_relpathr|   r   r   r   PermissionError)r+   r   r   r   r   rb   rZ   r    r    r!   r     s    z_PreciseSelector._select_fromN)rB   rC   rD   r,   r   r    r    r    r!   r     s   r   c               @   s   e Zd Zdd Zdd ZdS )r   c             C   s"   t t|| _t| | d S )N)recompilefnmatch	translater&   r   r,   )r+   r&   r   r    r    r!   r,     s    z_WildcardSelector.__init__c             c   s   y|j j}t||}x|D ]}d}y| }W n, tk
r\ }	 zt|	sL W d d }	~	X Y nX | jrh|r|j}
||
}| j	|r|
|
}x | j||||D ]
}|V  qW qW W n tk
r   d S X d S )NF)_flavourr@   listr   r   r"   r   r|   r&   matchr   r   r   r   )r+   r   r   r   r   cfentriesentryentry_is_dirr   r|   Z
casefoldedrb   rZ   r    r    r!   r     s&    


z_WildcardSelector._select_fromN)rB   rC   rD   r,   r   r    r    r    r!   r     s   r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )r   c             C   s   t | | d S )N)r   r,   )r+   r&   r   r    r    r!   r,     s    z#_RecursiveWildcardSelector.__init__c       
      c   s   |V  yt ||}x|D ]x}d}y| }W n, tk
rZ } zt|sJ W d d }~X Y nX |r| s||j}x| |||D ]
}	|	V  qW qW W n tk
r   d S X d S )NF)	r   r   r   r"   
is_symlinkr   r|   _iterate_directoriesr   )
r+   r   r   r   r   r   r   r   rb   rZ   r    r    r!   r   !  s     
z/_RecursiveWildcardSelector._iterate_directoriesc       	      c   s   yjt  }zT| jj}xF| |||D ]4}x.|||||D ]}||kr6|V  || q6W q"W W d |  X W n tk
r~   d S X d S )N)r~   r   r   r   addclearr   )	r+   r   r   r   r   ZyieldedZsuccessor_selectZstarting_pointrZ   r    r    r!   r   3  s    z'_RecursiveWildcardSelector._select_fromN)rB   rC   rD   r,   r   r   r    r    r    r!   r     s   r   c               @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )_PathParents)_pathcls_drv_root_partsc             C   s&   t || _|j| _|j| _|j| _d S )N)r   r   r   r   r   )r+   rb   r    r    r!   r,   L  s    
z_PathParents.__init__c             C   s(   | j s| jrt| jd S t| jS d S )Nr?   )r   r   rQ   r   )r+   r    r    r!   __len__S  s    z_PathParents.__len__c             C   s@   |dk s|t | krt|| j| j| j| jd | d  S )Nr   r?   )rQ   
IndexErrorr   _from_parsed_partsr   r   r   )r+   idxr    r    r!   __getitem__Y  s    z_PathParents.__getitem__c             C   s   d | jjS )Nz<{}.parents>)formatr   rB   )r+   r    r    r!   __repr___  s    z_PathParents.__repr__N)rB   rC   rD   	__slots__r,   r   r   r   r    r    r    r!   r   G  s
   r   c               @   s  e Zd ZdZdd Zdd Zedd ZedUd	d
ZedVddZ	edd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zedd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zeed-d.d/Zeed0d1d/Zed2d3 Zed4d5 Zed6d7 Z ed8d9 Z!ed:d; Z"d<d= Z#d>d? Z$d@dA Z%edBdC Z&dDdE Z'dFdG Z(dHdI Z)edJdK Z*edLdM Z+dNdO Z,dPdQ Z-dRdS Z.dTS )Wr   )r   r   r   _str_hash_pparts_cached_cpartsc             G   s$   | t krtjdkrtnt} | |S )Nr   )r   r^   r|   r   r   _from_parts)r   argsr    r    r!   __new__q  s    zPurePath.__new__c             C   s   | j t| jfS )N)	__class__tupler   )r+   r    r    r!   
__reduce__{  s    zPurePath.__reduce__c             C   sh   g }xV|D ]N}t |tr$||j7 }q
t|}t |trH|t| q
tdt| q
W | j	
|S )NzNargument should be a str object or an os.PathLike object returning str, not %r)
isinstancer   r   r^   fspathr]   r4   	TypeErrorr   r   r>   )r   r   r8   r   r    r    r!   _parse_args  s    



zPurePath._parse_argsTc             C   s<   t | }||\}}}||_||_||_|r8|  |S )N)objectr   r   r   r   r   _init)r   r   initr+   r9   r:   r8   r    r    r!   r     s    
zPurePath._from_partsc             C   s,   t | }||_||_||_|r(|  |S )N)r   r   r   r   r   r   )r   r9   r:   r8   r   r+   r    r    r!   r     s    
zPurePath._from_parsed_partsc             C   s4   |s|r$|| | j |dd   S | j |S d S )Nr?   )r   r*   )r   r9   r:   r8   r    r    r!   _format_parsed_parts  s    zPurePath._format_parsed_partsc             C   s   d S )Nr    )r+   r    r    r!   r     s    zPurePath._initc             C   s@   |  |\}}}| j| j| j| j|||\}}}| |||S )N)r   r   rA   r   r   r   r   )r+   r   r9   r:   r8   r    r    r!   _make_child  s    zPurePath._make_childc             C   s<   y| j S  tk
r6   | | j| j| jp,d| _ | j S X d S )Nr.   )r   AttributeErrorr   r   r   r   )r+   r    r    r!   __str__  s    zPurePath.__str__c             C   s   t | S )N)r]   )r+   r    r    r!   
__fspath__  s    zPurePath.__fspath__c             C   s   | j }t| |jdS )NrG   )r   r]   r1   r)   )r+   fr    r    r!   rm     s    zPurePath.as_posixc             C   s
   t | S )N)r^   fsencode)r+   r    r    r!   	__bytes__  s    zPurePath.__bytes__c             C   s   d | jj|  S )Nz{}({!r}))r   r   rB   rm   )r+   r    r    r!   r     s    zPurePath.__repr__c             C   s   |   std| j| S )Nz.relative path can't be expressed as a file URI)r   r   r   rq   )r+   r    r    r!   as_uri  s    zPurePath.as_uric             C   s2   y| j S  tk
r,   | j| j| _ | j S X d S )N)r   r   r   r\   r   )r+   r    r    r!   _cparts  s
    zPurePath._cpartsc             C   s&   t |tstS | j|jko$| j|jkS )N)r   r   NotImplementedr   r   )r+   otherr    r    r!   __eq__  s    
zPurePath.__eq__c             C   s2   y| j S  tk
r,   tt| j| _ | j S X d S )N)r   r   hashr   r   )r+   r    r    r!   __hash__  s
    zPurePath.__hash__c             C   s&   t |tr| j|jk	rtS | j|jk S )N)r   r   r   r   r   )r+   r   r    r    r!   __lt__  s    zPurePath.__lt__c             C   s&   t |tr| j|jk	rtS | j|jkS )N)r   r   r   r   r   )r+   r   r    r    r!   __le__  s    zPurePath.__le__c             C   s&   t |tr| j|jk	rtS | j|jkS )N)r   r   r   r   r   )r+   r   r    r    r!   __gt__  s    zPurePath.__gt__c             C   s&   t |tr| j|jk	rtS | j|jkS )N)r   r   r   r   r   )r+   r   r    r    r!   __ge__  s    zPurePath.__ge__r   z.The drive prefix (letter or UNC path), if any.)docr   zThe root of the path, if any.c             C   s   | j | j }|S )N)r   r   )r+   anchorr    r    r!   r    s    zPurePath.anchorc             C   s.   | j }t|| js| jrdndkr&dS |d S )Nr?   r   r-   rM   )r   rQ   r   r   )r+   r8   r    r    r!   r|     s    zPurePath.namec             C   sD   | j }|d}d|  k r,t|d k r<n n||d  S dS d S )Nr.   r   r?   r-   )r|   rfindrQ   )r+   r|   rI   r    r    r!   suffix  s
    
 zPurePath.suffixc             C   s:   | j }|drg S |d}dd |ddd  D S )Nr.   c             S   s   g | ]}d | qS )r.   r    )rH   r  r    r    r!   r[   +  s    z%PurePath.suffixes.<locals>.<listcomp>r?   )r|   endswithrS   r3   )r+   r|   r    r    r!   suffixes$  s
    

zPurePath.suffixesc             C   sD   | j }|d}d|  k r,t|d k r<n n|d | S |S d S )Nr.   r   r?   )r|   r  rQ   )r+   r|   rI   r    r    r!   stem-  s
    
 zPurePath.stemc             C   s   | j std| f | j|f\}}}|rX|d | jj| jjgksX|sX|sXt|dkrdtd| | | j| j	| j
d d |g S )Nz%r has an empty namerM   r?   zInvalid name %r)r|   r   r   r>   r)   r/   rQ   r   r   r   r   )r+   r|   r9   r:   r8   r    r    r!   	with_name7  s    zPurePath.with_namec             C   s   | j }|j|ks |jr.|j|kr.td|f |r<|drD|dkrPtd| | j}|shtd| f | j}|s||| }n|d t|  | }| | j	| j
| jd d |g S )NzInvalid suffix %rr.   z%r has an empty namerM   )r   r)   r/   r   rg   r|   r  rQ   r   r   r   r   )r+   r  r   r|   Z
old_suffixr    r    r!   with_suffixB  s    
zPurePath.with_suffixc             G   s   |st d| j}| j}| j}|r8||g|dd   }n|}| |\}}}|rf||g|dd   }	n|}	t|	}
| jj}|
dkr|s|rn||d |
 ||	kr| |||}t	d
t| t|| d|
dkr|nd||
d  S )Nzneed at least one argumentr?   r   z{!r} does not start with {!r}r-   )r   r   r   r   r   rQ   r   r\   r   r   r   r]   r   )r+   r   r8   r9   r:   Z	abs_partsZto_drvZto_rootZto_partsZto_abs_partsnr   	formattedr    r    r!   relative_toW  s(    	*zPurePath.relative_toc             C   s.   y| j S  tk
r(   t| j| _ | j S X d S )N)r   r   r   r   )r+   r    r    r!   r8   w  s
    zPurePath.partsc             G   s
   |  |S )N)r   )r+   r   r    r    r!   joinpath  s    zPurePath.joinpathc             C   s   |  |fS )N)r   )r+   keyr    r    r!   __truediv__  s    zPurePath.__truediv__c             C   s   |  |g| j S )N)r   r   )r+   r  r    r    r!   __rtruediv__  s    zPurePath.__rtruediv__c             C   s@   | j }| j}| j}t|dkr*|s&|r*| S | |||d d S )Nr?   rM   )r   r   r   rQ   r   )r+   r9   r:   r8   r    r    r!   parent  s    zPurePath.parentc             C   s   t | S )N)r   )r+   r    r    r!   parents  s    zPurePath.parentsc             C   s   | j s
dS | jj pt| jS )NF)r   r   ry   boolr   )r+   r    r    r!   r     s    zPurePath.is_absolutec             C   s   | j | jS )N)r   rk   r   )r+   r    r    r!   rk     s    zPurePath.is_reservedc       	      C   s   | j j}||}| j |f\}}}|s0td|rF||| jkrFdS |r\||| jkr\dS | j}|sj|rt|t|kr~dS |dd  }nt|t|krdS x.tt	|t	|D ]\}}t
||sdS qW dS )Nzempty patternFr?   T)r   r@   r>   r   r   r   r   rQ   zipr0   r   Zfnmatchcase)	r+   Zpath_patternr   r9   r:   Z	pat_partsr8   r<   r&   r    r    r!   r     s(    zPurePath.matchN)T)T)/rB   rC   rD   r   r   r   classmethodr   r   r   r   r   r   r   r   rm   r   r   r   propertyr   r   r   r   r   r   r  r   rl   r:   r  r|   r  r  r  r	  r
  r  r8   r  r  r  r  r  r   rk   r   r    r    r    r!   r   c  sZ   

	
	
	
 
c               @   s   e Zd ZeZdZdS )r   r    N)rB   rC   rD   _posix_flavourr   r   r    r    r    r!   r     s   c               @   s   e Zd ZeZdZdS )r   r    N)rB   rC   rD   _windows_flavourr   r   r    r    r    r!   r     s   c               @   s  e Zd ZdZdd ZdaddZdd Zd	d
 Zdd Zdd Z	dbddZ
dcddZedd Zedd Zdd Zdd Zdd Zdd  Zd!d" Zddd$d%Zd&d' Zd(d) Zd*d+ Zded.d/Zd0d1 Zdfd2d3Zd4d5 Zdgd6d7Zdhd9d:Zdid;d<Zd=d> Zd?d@ Z dAdB Z!dCdD Z"dEdF Z#dGdH Z$dIdJ Z%djdKdLZ&dMdN Z'dOdP Z(dQdR Z)dSdT Z*dUdV Z+dWdX Z,dYdZ Z-d[d\ Z.d]d^ Z/d_d` Z0dS )kr   )r   _closedc             O   sL   | t krtjdkrtnt} | j|dd}|jjs@td| j	f |
  |S )Nr   F)r   z$cannot instantiate %r on your system)r   r^   r|   r   r   r   r   r}   r   rB   r   )r   r   kwargsr+   r    r    r!   r     s    zPath.__new__Nc             C   s"   d| _ |d k	r|j| _nt| _d S )NF)r  r   _normal_accessor)r+   templater    r    r!   r     s    
z
Path._initc             C   s   | j |g }| | j| j|S )N)r   r   r   r   )r+   r<   r8   r    r    r!   r     s    zPath._make_child_relpathc             C   s   | j r|   | S )N)r  _raise_closed)r+   r    r    r!   	__enter__	  s    zPath.__enter__c             C   s
   d| _ d S )NT)r  )r+   tvtbr    r    r!   __exit__  s    zPath.__exit__c             C   s   t dd S )NzI/O operation on closed path)r   )r+   r    r    r!   r    s    zPath._raise_closed  c             C   s   | j | ||S )N)r   r   )r+   r|   flagsr   r    r    r!   _opener  s    zPath._opener  c             C   s   | j r|   | j| ||S )N)r  r  r   r   )r+   r%  r   r    r    r!   	_raw_open  s    zPath._raw_openc             C   s   | t  S )N)r^   r_   )r   r    r    r!   cwd#  s    zPath.cwdc             C   s   | |  j d S )N)r   rx   )r   r    r    r!   home*  s    z	Path.homec             C   sB   |   }y|  }W n tk
r2   t |}Y nX tj||S )N)r   r   r^   rb   samestat)r+   Z
other_pathstZother_str    r    r!   samefile1  s    zPath.samefilec             c   sL   | j r|   x8| j| D ](}|dkr*q| |V  | j r|   qW d S )N>   ..r.   )r  r  r   r   r   )r+   r|   r    r    r!   iterdir<  s    zPath.iterdirc             c   sl   |st d|| j|}| j|f\}}}|s:|rBtdtt|}x|| D ]
}|V  qZW d S )NzUnacceptable pattern: {!r}z%Non-relative patterns are unsupported)	r   r   r   r@   r>   r   r   r   r   )r+   patternr9   r:   r   selectorrZ   r    r    r!   globJ  s    z	Path.globc             c   s^   | j |}| j |f\}}}|s(|r0tdtdt| }x|| D ]
}|V  qLW d S )Nz%Non-relative patterns are unsupported)z**)r   r@   r>   r   r   r   r   )r+   r0  r9   r:   r   r1  rZ   r    r    r!   rglobX  s    z
Path.rglobc             C   sD   | j r|   |  r| S | jt g| j dd}|j| d |S )NF)r   )r  )r  r  r   r   r^   r_   r   r   )r+   objr    r    r!   absolutee  s    zPath.absoluteFc             C   sh   | j r|   | jj| |d}|d kr:|   t|  }| jj|}| j	|fdd}|j
| d |S )N)rc   F)r   )r  )r  r  r   re   r   r]   r5  r{   normpathr   r   )r+   rc   rY   Znormedr4  r    r    r!   re   w  s    zPath.resolvec             C   s   | j | S )N)r   r   )r+   r    r    r!   r     s    z	Path.statc             C   s   dd l }||  jjS )Nr   )r   r   r   st_uidZpw_name)r+   r   r    r    r!   owner  s    z
Path.ownerc             C   s   dd l }||  jjS )Nr   )grpZgetgrgidr   st_gidZgr_name)r+   r9  r    r    r!   group  s    z
Path.grouprrM   c          	   C   s(   | j r|   tj| |||||| jdS )N)opener)r  r  ior   r&  )r+   r   	bufferingencodingerrorsnewliner    r    r!   r     s    z	Path.openc          	   C   s    | j dd
}| S Q R X d S )Nrb)r   )r   read)r+   r   r    r    r!   
read_bytes  s    zPath.read_bytesc          	   C   s$   | j d||d
}| S Q R X d S )Nr<  )r   r@  rA  )r   rD  )r+   r@  rA  r   r    r    r!   	read_text  s    zPath.read_textc          	   C   s*   t |}| jdd}||S Q R X d S )Nwb)r   )
memoryviewr   write)r+   dataZviewr   r    r    r!   write_bytes  s    zPath.write_bytesc          	   C   s@   t |tstd|jj | jd||d}||S Q R X d S )Nzdata must be str, not %sw)r   r@  rA  )r   r]   r   r   rB   r   rI  )r+   rJ  r@  rA  r   r    r    r!   
write_text  s
    
zPath.write_textTc             C   sr   | j r|   |r>y| j| d  W n tk
r8   Y nX d S tjtjB }|sX|tjO }| 	||}t
| d S )N)r  r  r   r   r   r^   O_CREATO_WRONLYO_EXCLr(  close)r+   r   exist_okr%  fdr    r    r!   touch  s    
z
Path.touchc             C   s   | j r|   y| j| | W nd tk
rd   |r>| j| kr@ | jjddd | j|d|d Y n" tk
r   |r~|  s Y nX d S )NT)r  rR  F)r  r  r   r   ra   r  r   r   )r+   r   r  rR  r    r    r!   r     s    z
Path.mkdirc             C   s    | j r|   | j| | d S )N)r  r  r   r   )r+   r   r    r    r!   r     s    z
Path.chmodc             C   s    | j r|   | j| | d S )N)r  r  r   r   )r+   r   r    r    r!   r     s    zPath.lchmodc             C   s   | j r|   | j|  d S )N)r  r  r   r   )r+   r    r    r!   r     s    zPath.unlinkc             C   s   | j r|   | j|  d S )N)r  r  r   r   )r+   r    r    r!   r     s    z
Path.rmdirc             C   s   | j r|   | j| S )N)r  r  r   r   )r+   r    r    r!   r     s    z
Path.lstatc             C   s    | j r|   | j| | d S )N)r  r  r   r   )r+   r   r    r    r!   r   !  s    zPath.renamec             C   s    | j r|   | j| | d S )N)r  r  r   r1   )r+   r   r    r    r!   r1   )  s    zPath.replacec             C   s"   | j r|   | j|| | d S )N)r  r  r   r   )r+   r   r   r    r    r!   
symlink_to2  s    zPath.symlink_toc          
   C   s>   y|    W n, tk
r8 } zt|s( dS d }~X Y nX dS )NFT)r   r   r"   )r+   r   r    r    r!   r   =  s    zPath.existsc          
   C   s@   yt |  jS  tk
r: } zt|s* dS d }~X Y nX d S )NF)r	   r   st_moder   r"   )r+   r   r    r    r!   r   I  s    zPath.is_dirc          
   C   s@   yt |  jS  tk
r: } zt|s* dS d }~X Y nX d S )NF)r   r   rV  r   r"   )r+   r   r    r    r!   is_fileV  s    zPath.is_filec             C   st   |   r|  sdS t| j}y| j}W n tk
r@   dS X |  j}||krXdS |  j}| j}||kS )NFT)r   r   r   r  r   st_devr   st_ino)r+   r  Z
parent_devZdevZinoZ
parent_inor    r    r!   is_mountd  s    



zPath.is_mountc          
   C   s@   yt |  jS  tk
r: } zt|s* dS d }~X Y nX d S )NF)r
   r   rV  r   r"   )r+   r   r    r    r!   r   y  s    zPath.is_symlinkc          
   C   s@   yt |  jS  tk
r: } zt|s* dS d }~X Y nX d S )NF)r   r   rV  r   r"   )r+   r   r    r    r!   is_block_device  s    zPath.is_block_devicec          
   C   s@   yt |  jS  tk
r: } zt|s* dS d }~X Y nX d S )NF)r   r   rV  r   r"   )r+   r   r    r    r!   is_char_device  s    zPath.is_char_devicec          
   C   s@   yt |  jS  tk
r: } zt|s* dS d }~X Y nX d S )NF)r   r   rV  r   r"   )r+   r   r    r    r!   is_fifo  s    zPath.is_fifoc          
   C   s@   yt |  jS  tk
r: } zt|s* dS d }~X Y nX d S )NF)r   r   rV  r   r"   )r+   r   r    r    r!   	is_socket  s    zPath.is_socketc             C   s`   | j s\| js\| jr\| jd d d dkr\| j| jd dd  }| |g| jdd   S | S )Nr   r?   ~)r   r   r   r   rx   r   )r+   Zhomedirr    r    r!   
expanduser  s
    zPath.expanduser)N)r$  )r'  )F)r<  rM   NNN)NN)NN)r$  T)r'  FF)F)1rB   rC   rD   r   r   r   r   r  r#  r  r&  r(  r  r)  r*  r-  r/  r2  r3  r5  re   r   r8  r;  r   rE  rF  rK  rM  rT  r   r   r   r   r   r   r   r1   rU  r   r   rW  rZ  r   r[  r\  r]  r^  r`  r    r    r    r!   r     s\   




 


	



				
c               @   s   e Zd ZdZdS )r   r    N)rB   rC   rD   r   r    r    r    r!   r     s   c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	r   r    c             C   s   t dd S )Nz*Path.owner() is unsupported on this system)r   )r+   r    r    r!   r8    s    zWindowsPath.ownerc             C   s   t dd S )Nz*Path.group() is unsupported on this system)r   )r+   r    r    r!   r;    s    zWindowsPath.groupc             C   s   t dd S )Nz-Path.is_mount() is unsupported on this system)r   )r+   r    r    r!   rZ    s    zWindowsPath.is_mountN)rB   rC   rD   r   r8  r;  rZ  r    r    r    r!   r     s   )Ar   	functoolsr>  rz   r^   r   r   r5   _collections_abcr   r   r   r   r   r   r   operatorr   r   r	   r
   r   r   r   r   r   Zurllib.parser   rn   r   r|   r   Zgetwindowsversionr   __all__r   r   r"   r'   r   r(   rE   r   r  r  r   r   r  r   r   r   r   r   r   r   r   r   r   PathLikeregisterr   r   r   r   r   r    r    r    r!   <module>   sp   $

? %c1+  f
   g