???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3
i                 @   s$  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 d dl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d	d
ddddgZdZ dZ!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 Z-e.ed rTej/ e-Z-G d!d" d"Z0G d#d$ d$Z1G d%d& d&e0Z2G d'd( d(e0Z3G d)d* d*e0Z4G d+d, d,e	Z5G d-d	 d	e$Z6ej7j8e6 G d.d
 d
e6Z9G d/d de6Z:G d0d de6Z;G d1d de;e9Z<G d2d de;e:Z=dS )3    N)Sequence)contextmanager)EINVALENOENTENOTDIRELOOP)
attrgetter)S_ISDIRS_ISLNKS_ISREGS_ISSOCKS_ISBLKS_ISCHRS_ISFIFO)quote_from_bytesTPurePathPurePosixPathPureWindowsPathPath	PosixPathWindowsPath   {   i  c             C   s   d| kpd| kpd| kS )N*?[ )patr   r   /usr/lib64/python3.6/pathlib.py_is_wildcard_pattern"   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@|j||}| j|\}}}	||	krxPt|	j|D ] }
|
rh|
dkrh|jtj|
 qhW n|	r|	dkr|jtj|	 |s|r&|sx6|D ].}|sq|r|j||}| j|d }|rP qW P q&W |s |r|j||  |j	  |||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   s|   |r,| rr|rr|||| g|dd   fS nF|rd||ksL| j || j |krr||||dd   fS n|||| fS |||fS )N   )casefold)r#   r1   r2   r0   Zdrv2Zroot2Zparts2r   r   r   join_parsed_partsU   s    
z_Flavour.join_parsed_partsN)__name__
__module____qualname__r$   r6   r9   r   r   r   r   r    (   s   &r    c               @   s   e Zd ZdZdZdZeZej	dkZ
edd eededd	 D ed
d eededd	 D B 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efddZdd Zd d! Zd"d# Zd$S )%_WindowsFlavour\/Tntc             c   s   | ]}t |V  qd S )N)chr).0r5   r   r   r   	<genexpr>s   s    z_WindowsFlavour.<genexpr>azr7   c             c   s   | ]}t |V  qd S )N)rA   )rB   r5   r   r   r   rC   t   s    AZz\\?\ZCONZPRNZAUXZNULc             C   s   h | ]}d | qS )zCOM%dr   )rB   ir   r   r   	<setcomp>z   s    z_WindowsFlavour.<setcomp>
   c             C   s   h | ]}d | qS )zLPT%dr   )rB   rH   r   r   r   rI   {   s    c             C   sb  |dd }|dd }||krP||krP| j |\}}|dd }|dd }nd}|dd }||kov||kov||kr|j|d}|dkr|j||d }||d kr|dkrt|}|r||d|  |||d d  fS |d | |||d d  fS d }	}
|dkr<|| jkr<|d d }	|dd  }|}||krT|}
|j|}||	 |
|fS )	Nr   r7      r%      :rN   )_split_extended_pathfindlendrive_letterslstrip)r#   r4   r!   firstsecondprefixZthirdindexZindex2r1   r2   r   r   r   r*      s6    
"

z_WindowsFlavour.splitrootc             C   s   |j  S )N)lower)r#   sr   r   r   r8      s    z_WindowsFlavour.casefoldc             C   s   dd |D S )Nc             S   s   g | ]}|j  qS r   )rX   )rB   pr   r   r   
<listcomp>   s    z2_WindowsFlavour.casefold_parts.<locals>.<listcomp>r   )r#   r0   r   r   r   casefold_parts   s    z_WindowsFlavour.casefold_partsc             C   sX   d}|j |rP|d d }|dd  }|j drP||d d 7 }d|dd   }||fS )Nr%      zUNC\rL   r>   )
startswith)r#   rY   Z
ext_prefixrV   r   r   r   rO      s    

z$_WindowsFlavour._split_extended_pathc             C   s6   |sdS |d j drdS |d jdd j | jkS )NFr   z\\r7   r&   rN   )r^   	partitionupperreserved_names)r#   r0   r   r   r   is_reserved   s
    z_WindowsFlavour.is_reservedc             C   sd   |j }t|dkrJ|d dkrJ|j dd  jd}d|t|jdf S dt|j jd S d S )NrK   r7   rM   r?   zfile:///%s/%szutf-8zfile:)driverQ   as_posixrS   urlquote_from_bytesencode)r#   pathrc   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| j|f\}}}|d
 t jd krtd	| ||d< |s|r|| | j|dd   }n
| j|}|S )NHOMEZUSERPROFILEZHOMEPATHZ	HOMEDRIVEr%   zCan't determine home directoryZUSERNAMEr7   z%Can't determine home directory for %rrN   rN   )osenvironKeyErrorRuntimeErrorr6   r"   )r#   usernameuserhomer1   r2   r0   r   r   r   
gethomedir   s,    




z_WindowsFlavour.gethomedirN)r:   r;   r<   r!   r'   has_drvntpathpathmodrk   nameis_supportedsetrangeordrR   Zext_namespace_prefixra   r*   r8   r\   rO   rb   ri   rq   r   r   r   r   r=   g   s"   
"&	'
r=   c               @   sZ   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 Zdd Zdd ZdS )_PosixFlavourr?   r%   Fr@   c             C   sV   |rH|d |krH|j |}t|t| dkr<d|d |fS d||fS n
dd|fS d S )Nr   rK   r%   )rS   rQ   )r#   r4   r!   Zstripped_partr   r   r   r*      s    
z_PosixFlavour.splitrootc             C   s   |S )Nr   )r#   rY   r   r   r   r8   	  s    z_PosixFlavour.casefoldc             C   s   |S )Nr   )r#   r0   r   r   r   r\     s    z_PosixFlavour.casefold_partsc             C   s   dS )NFr   )r#   r0   r   r   r   rb     s    z_PosixFlavour.is_reservedc             C   s   t |}dt| S )Nzfile://)bytesre   )r#   rg   Zbpathr   r   r   ri     s    z_PosixFlavour.make_uric             C   st   |s:y
t jd S  tk
r6   dd l}|jt j jS X n6dd l}y|j|jS  tk
rn   td| Y nX d S )Nrj   r   z%Can't determine home directory for %r)	rk   rl   rm   pwdgetpwuidgetuidpw_dirgetpwnamrn   )r#   ro   r|   r   r   r   rq     s    
z_PosixFlavour.gethomedirN)r:   r;   r<   r!   r'   rr   	posixpathrt   rk   ru   rv   r*   r8   r\   rb   ri   rq   r   r   r   r   rz      s   
rz   c               @   s   e Zd ZdS )	_AccessorN)r:   r;   r<   r   r   r   r   r   ,  s   r   c               @   s   e Zd Zdd Zdd ZeejZeejZeejZeej	Z	eej
Z
eejZeedrjeejZndd ZeejZeejZeejZeejZeejZeedrejZn
dd
dZeejZdd ZejZeejjZeejjZdS )_NormalAccessorc                s   t j  fdd}t|S )Nc                s    t | f| S )N)str)pathobjargs)strfuncr   r   wrapped4  s    z._NormalAccessor._wrap_strfunc.<locals>.wrapped)	functoolswrapsstaticmethod)r   r   r   )r   r   _wrap_strfunc3  s    z_NormalAccessor._wrap_strfuncc                s   t j  fdd}t|S )Nc                s    t | t |f| S )N)r   )ZpathobjAZpathobjBr   )r   r   r   r   :  s    z5_NormalAccessor._wrap_binary_strfunc.<locals>.wrapped)r   r   r   )r   r   r   )r   r   _wrap_binary_strfunc9  s    z$_NormalAccessor._wrap_binary_strfunclchmodc             C   s   t dd S )Nz%lchmod() not available on this system)NotImplementedError)r#   r   moder   r   r   r   N  s    z_NormalAccessor.lchmodsymlinkFc             C   s   t dd S )Nz)os.symlink() not available on this system)r   )r#   srcdsttarget_is_directoryr   r   r   r   ^  s    z_NormalAccessor.symlinkc             C   s
   t j|S )N)rk   readlink)r#   rg   r   r   r   r   e  s    z_NormalAccessor.readlinkN)F)r:   r;   r<   r   r   rk   statlstatopenlistdirscandirchmodhasattrr   mkdirunlinkrmdirrenamer)   r   utimer   getcwdr   rg   
expanduserrealpathr   r   r   r   r   1  s0   














r   c             C   sP   | d }| dd  }|dkr"t }n$d|kr4tdnt|rBt}nt}|||S )Nr   r7   z**z:Invalid pattern: '**' can only be an entire path component)_RecursiveWildcardSelector
ValueErrorr   _WildcardSelector_PreciseSelector)pattern_partsr   child_partsclsr   r   r   _make_selectorv  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 | j||||S )N)typeis_direxists	_accessorr   iter_select_from)r#   parent_pathZpath_clsr   r   r   r   r   r   select_from  s    z_Selector.select_fromN)r:   r;   r<   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)r:   r;   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j| | d S )N)ru   r   r$   )r#   ru   r   r   r   r   r$     s    z_PreciseSelector.__init__c             c   s^   yD|j | j}| jr|n||rBx | jj||||D ]
}|V  q4W W n tk
rX   d S X d S )N)_make_child_relpathru   r   r   r   PermissionError)r#   r   r   r   r   rg   rZ   r   r   r   r     s    z_PreciseSelector._select_fromN)r:   r;   r<   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 jtj|| _tj| | 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||}xb|D ]Z}| j s0|j r|j}||}	| jj|	r|j|}
x | j	j
|
|||D ]
}|V  qhW qW W n tk
r   d S X d S )N)_flavourr8   listr   r   ru   r   matchr   r   r   r   )r#   r   r   r   r   cfentriesentryru   Z
casefoldedrg   rZ   r   r   r   r     s    

z_WildcardSelector._select_fromN)r:   r;   r<   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 j| | d S )N)r   r$   )r#   r   r   r   r   r   r$     s    z#_RecursiveWildcardSelector.__init__c             c   sz   |V  yZt ||}xH|D ]@}|j r|j  r|j|j}x| j|||D ]
}|V  qLW qW W n tk
rt   d S X d S )N)r   r   
is_symlinkr   ru   _iterate_directoriesr   )r#   r   r   r   r   r   rg   rZ   r   r   r   r     s    
z/_RecursiveWildcardSelector._iterate_directoriesc       	      c   s   yjt  }zT| jj}xF| j|||D ]4}x.|||||D ]}||kr6|V  |j| q6W q"W W d |j  X W n tk
r~   d S X d S )N)rw   r   r   r   addclearr   )	r#   r   r   r   r   ZyieldedZsuccessor_selectZstarting_pointrZ   r   r   r   r     s    z'_RecursiveWildcardSelector._select_fromN)r:   r;   r<   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#   rg   r   r   r   r$     s    
z_PathParents.__init__c             C   s(   | j s| jrt| jd S t| jS d S )Nr7   )r   r   rQ   r   )r#   r   r   r   __len__  s    z_PathParents.__len__c             C   s@   |dk s|t | krt|| jj| j| j| jd | d  S )Nr   r7   )rQ   
IndexErrorr   _from_parsed_partsr   r   r   )r#   idxr   r   r   __getitem__  s    z_PathParents.__getitem__c             C   s   dj | jjS )Nz<{}.parents>)formatr   r:   )r#   r   r   r   __repr__
  s    z_PathParents.__repr__N)r   r   r   r   )r:   r;   r<   	__slots__r$   r   r   r   r   r   r   r   r     s
   r   c               @   s  e Zd ZdYZdd	 Zd
d Zedd ZedZddZed[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d!d" Zd#d$ Zed%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zeedd3d4Zeedd5d4Zed6d7 Zed8d9 Zed:d; Z ed<d= Z!ed>d? Z"d@dA Z#dBdC Z$dDdE Z%edFdG Z&dHdI Z'dJdK Z(dLdM Z)edNdO Z*edPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXS )\r   r   r   r   _str_hash_pparts_cached_cpartsc             G   s$   | t krtjdkrtnt} | j|S )Nr@   )r   rk   ru   r   r   _from_parts)r   r   r   r   r   __new__  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j|}t |trH|jt| q
tdt| q
W | j	j
|S )NzNargument should be a str object or an os.PathLike object returning str, not %r)
isinstancer   r   rk   fspathr   r,   	TypeErrorr   r   r6   )r   r   r0   rD   r   r   r   _parse_args+  s    



zPurePath._parse_argsTc             C   s<   t j| }|j|\}}}||_||_||_|r8|j  |S )N)objectr   r   r   r   r   _init)r   r   initr#   r1   r2   r0   r   r   r   r   ?  s    
zPurePath._from_partsc             C   s,   t j| }||_||_||_|r(|j  |S )N)r   r   r   r   r   r   )r   r1   r2   r0   r   r#   r   r   r   r   L  s    
zPurePath._from_parsed_partsc             C   s4   |s|r$|| | j j|dd   S | j j|S d S )Nr7   )r   r"   )r   r1   r2   r0   r   r   r   _format_parsed_partsV  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| j| j|||\}}}| j|||S )N)r   r   r9   r   r   r   r   )r#   r   r1   r2   r0   r   r   r   _make_childa  s    zPurePath._make_childc             C   s<   y| j S  tk
r6   | j| j| j| jp,d| _ | j S X d S )Nr&   )r   AttributeErrorr   r   r   r   )r#   r   r   r   __str__g  s    zPurePath.__str__c             C   s   t | S )N)r   )r#   r   r   r   
__fspath__q  s    zPurePath.__fspath__c             C   s   | j }t| j|jdS )Nr?   )r   r   r)   r!   )r#   fr   r   r   rd   t  s    zPurePath.as_posixc             C   s   t jt| S )N)rk   fsencoder   )r#   r   r   r   	__bytes__z  s    zPurePath.__bytes__c             C   s   dj | jj| j S )Nz{}({!r}))r   r   r:   rd   )r#   r   r   r   r     s    zPurePath.__repr__c             C   s   | j  std| jj| S )Nz.relative path can't be expressed as a file URI)is_absoluter   r   ri   )r#   r   r   r   as_uri  s    zPurePath.as_uric             C   s2   y| j S  tk
r,   | j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 s| 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 s| 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 s| 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 s| 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__z.The drive prefix (letter or UNC path), if any.)docz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 )Nr7   r   r%   rN   )r   rQ   r   r   )r#   r0   r   r   r   ru     s    zPurePath.namec             C   sD   | j }|jd}d|  k o*t|d k n  r<||d  S dS d S )Nr&   r   r7   r%   )ru   rfindrQ   )r#   ru   rH   r   r   r   suffix  s
    
 zPurePath.suffixc             C   s:   | j }|jdrg S |jd}dd |jddd  D S )Nr&   c             S   s   g | ]}d | qS )r&   r   )rB   r   r   r   r   r[     s    z%PurePath.suffixes.<locals>.<listcomp>r7   )ru   endswithrS   r+   )r#   ru   r   r   r   suffixes  s
    

zPurePath.suffixesc             C   sD   | j }|jd}d|  k o*t|d k n  r<|d | S |S d S )Nr&   r   r7   )ru   r   rQ   )r#   ru   rH   r   r   r   stem  s
    
 zPurePath.stemc             C   s   | j std| f | jj|f\}}}| sZ|d | jj| jjgksZ|sZ|sZt|dkrftd| | j| j| j	| j
d d |g S )Nz%r has an empty namer7   zInvalid name %rrN   rN   )ru   r   r   r6   r!   r'   rQ   r   r   r   r   )r#   ru   r1   r2   r0   r   r   r   	with_name  s    zPurePath.with_namec             C   s   | j }|j|ks |jr,|j|kr,td| |r<|jd sD|dkrPtd| | j}|shtd| f | j}|s||| }n|d t|  | }| j| j	| j
| jd d |g S )NzInvalid suffix %rr&   z%r has an empty namer7   rN   )r   r!   r'   r   r^   ru   r   rQ   r   r   r   r   )r#   r   r   ru   Z
old_suffixr   r   r   with_suffix  s    
zPurePath.with_suffixc             G   s   |st d| j}| j}| j}|r8||g|dd   }n|}| j|\}}}|rf||g|dd   }	n|}	t|	}
| jj}|
dkr|p|n||d |
 ||	kr| j|||}t	dj
t| t|| jd|
dkr|nd||
d  S )Nzneed at least one argumentr7   r   z{!r} does not start with {!r}r%   )r   r   r   r   r   rQ   r   r\   r   r   r   r   r   )r#   r   r0   r1   r2   Z	abs_partsZto_drvZto_rootZto_partsZto_abs_partsnr   Z	formattedr   r   r   relative_to  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   r0   "  s
    zPurePath.partsc             G   s
   | j |S )N)r   )r#   r   r   r   r   joinpath.  s    zPurePath.joinpathc             C   s   | j |fS )N)r   )r#   keyr   r   r   __truediv__6  s    zPurePath.__truediv__c             C   s   | j |g| j S )N)r   r   )r#   r  r   r   r   __rtruediv__9  s    zPurePath.__rtruediv__c             C   s@   | j }| j}| j}t|dkr*|s&|r*| S | j|||d d S )Nr7   rN   )r   r   r   rQ   r   )r#   r1   r2   r0   r   r   r   parent<  s    zPurePath.parentc             C   s   t | S )N)r   )r#   r   r   r   parentsF  s    zPurePath.parentsc             C   s   | j s
dS | jj pt| jS )NF)r   r   rr   boolr   )r#   r   r   r   r   K  s    zPurePath.is_absolutec             C   s   | j j| jS )N)r   rb   r   )r#   r   r   r   rb   R  s    zPurePath.is_reservedc       	      C   s   | j 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
j||sdS qW dS )Nzempty patternFr7   T)r   r8   r6   r   r   r   r   rQ   zipr(   r   Zfnmatchcase)	r#   Zpath_patternr   r1   r2   Z	pat_partsr0   r4   r   r   r   r   r   W  s(    zPurePath.matchN)r   r   r   r   r   r   r   )T)T)/r:   r;   r<   r   r   r   classmethodr   r   r   r   r   r   r   r   rd   r   r   r   propertyr   r   r   r   r   r   r   r   rc   r2   r   ru   r   r   r  r  r  r  r0   r  r  r	  r
  r  r   rb   r   r   r   r   r   r     s\   
 
	
	
	
 
c               @   s   e Zd ZeZf ZdS )r   N)r:   r;   r<   _posix_flavourr   r   r   r   r   r   r   u  s   c               @   s   e Zd ZeZf ZdS )r   N)r:   r;   r<   _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dfd/d0Zd1d2 Zdgd3d4Zd5d6 Zdhd7d8Zdid:d;Zdjd<d=Zd>d? Zd@dA Z dBdC Z!dDdE Z"dFdG Z#dHdI Z$dJdK Z%dkdLdMZ&dNdO Z'dPdQ Z(dRdS Z)dTdU Z*dVdW Z+dXdY Z,dZd[ Z-d\d] Z.d^d_ Z/dS )lr   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 |j
  |S )Nr@   F)r   z$cannot instantiate %r on your system)r   rk   ru   r   r   r   r   rv   r   r:   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| j|S )N)r   r   r   r   )r#   r4   r0   r   r   r   r     s    zPath._make_child_relpathc             C   s   | j r| j  | 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 j| ||S )N)r   r   )r#   ru   flagsr   r   r   r   _opener  s    zPath._opener  c             C   s   | j r| j  | jj| ||S )N)r  r  r   r   )r#   r  r   r   r   r   	_raw_open  s    zPath._raw_openc             C   s   | t j S )N)rk   r   )r   r   r   r   cwd  s    zPath.cwdc             C   s   | |  j jd S )N)r   rq   )r   r   r   r   home  s    z	Path.homec             C   sB   | j  }y|j  }W n tk
r2   tj |}Y nX tjj||S )N)r   r   rk   rg   samestat)r#   Z
other_pathstZother_str   r   r   samefile  s    zPath.samefilec             c   sL   | j r| j  x8| jj| D ](}|dkr*q| j|V  | j r| j  qW d S )Nr&   ..>   r&  r&   )r  r  r   r   r   )r#   ru   r   r   r   iterdir  s    zPath.iterdirc             c   sl   |st dj|| jj|}| jj|f\}}}|s:|rBtdtt|}x|j| D ]
}|V  qZW d S )NzUnacceptable pattern: {!r}z%Non-relative patterns are unsupported)	r   r   r   r8   r6   r   r   r   r   )r#   patternr1   r2   r   selectorrZ   r   r   r   glob  s    z	Path.globc             c   s^   | j j|}| j j|f\}}}|s(|r0tdtdt| }x|j| D ]
}|V  qLW d S )Nz%Non-relative patterns are unsupported**)r+  )r   r8   r6   r   r   r   r   )r#   r(  r1   r2   r   r)  rZ   r   r   r   rglob  s    z
Path.rglobc             C   sD   | j r| j  | j r| S | jtj g| j dd}|j| d |S )NF)r   )r  )r  r  r   r   rk   r   r   r   )r#   objr   r   r   absolute  s    zPath.absoluteFc             C   s   | j r| j  dd }y| jj| |d}W n, tk
rV } z||  W Y d d }~X nX | j|f}|sy|j  W n* tk
r } z|| W Y d d }~X nX |S )Nc             S   s0   t | dd}| jtks|tkr,td| j d S )Nwinerrorr   zSymlink loop from %r)getattrerrnor   _WINERROR_CANT_RESOLVE_FILENAMErn   filename)er/  r   r   r   check_eloop*  s    z!Path.resolve.<locals>.check_eloop)strict)r  r  r   r   OSErrorr   r   )r#   r6  r5  rY   r4  rZ   r   r   r   resolve!  s    zPath.resolvec             C   s   | j j| S )N)r   r   )r#   r   r   r   r   ?  s    z	Path.statc             C   s   dd l }|j| j jjS )Nr   )r|   r}   r   st_uidZpw_name)r#   r|   r   r   r   ownerF  s    z
Path.ownerc             C   s   dd l }|j| j jjS )Nr   )grpZgetgrgidr   st_gidZgr_name)r#   r;  r   r   r   groupM  s    z
Path.grouprr7   c          	   C   s,   | j r| j  tjt| |||||| jdS )N)opener)r  r  ior   r   r  )r#   r   	bufferingencodingerrorsnewliner   r   r   r   T  s    z	Path.openc          	   C   s    | j dd
}|j 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
}|j S Q R X d S )Nr>  )r   rB  rC  )r   rF  )r#   rB  rC  r   r   r   r   	read_textf  s    zPath.read_textc          	   C   s*   t |}| jdd}|j|S Q R X d S )Nwb)r   )
memoryviewr   write)r#   dataZviewr   r   r   r   write_bytesm  s    zPath.write_bytesc          	   C   s@   t |tstd|jj | jd||d}|j|S Q R X d S )Nzdata must be str, not %sw)r   rB  rC  )r   r   r   r   r:   r   rK  )r#   rL  rB  rC  r   r   r   r   
write_textv  s
    
zPath.write_textTc             C   sr   | j r| j  |r>y| jj| d  W n tk
r8   Y nX d S tjtjB }|sX|tjO }| j	||}tj
| d S )N)r  r  r   r   r7  rk   O_CREATO_WRONLYO_EXCLr   close)r#   r   exist_okr  fdr   r   r   touch  s    
z
Path.touchc             C   s   | j r| j  y| jj| | W nj tk
rf   | s@| j| krB | jjddd | j|d|d Y n& tk
r   | s| j  r Y nX d S )NT)r  rT  F)r  r  r   r   FileNotFoundErrorr
  r7  r   )r#   r   r  rT  r   r   r   r     s    z
Path.mkdirc             C   s    | j r| j  | jj| | d S )N)r  r  r   r   )r#   r   r   r   r   r     s    z
Path.chmodc             C   s    | j r| j  | jj| | d S )N)r  r  r   r   )r#   r   r   r   r   r     s    zPath.lchmodc             C   s   | j r| j  | jj|  d S )N)r  r  r   r   )r#   r   r   r   r     s    zPath.unlinkc             C   s   | j r| j  | jj|  d S )N)r  r  r   r   )r#   r   r   r   r     s    z
Path.rmdirc             C   s   | j r| j  | jj| S )N)r  r  r   r   )r#   r   r   r   r     s    z
Path.lstatc             C   s    | j r| j  | jj| | d S )N)r  r  r   r   )r#   targetr   r   r   r     s    zPath.renamec             C   s    | j r| j  | jj| | d S )N)r  r  r   r)   )r#   rX  r   r   r   r)     s    zPath.replacec             C   s"   | j r| j  | jj|| | d S )N)r  r  r   r   )r#   rX  r   r   r   r   
symlink_to  s    zPath.symlink_toc             C   sB   y| j   W n0 tk
r< } z|jttfkr. dS d }~X nX dS )NFT)r   r7  r1  r   r   )r#   r4  r   r   r   r     s    zPath.existsc             C   sD   yt | j jS  tk
r> } z|jttfkr0 dS d }~X nX d S )NF)r	   r   st_moder7  r1  r   r   )r#   r4  r   r   r   r     s    zPath.is_dirc             C   sD   yt | j jS  tk
r> } z|jttfkr0 dS d }~X nX d S )NF)r   r   rZ  r7  r1  r   r   )r#   r4  r   r   r   is_file
  s    zPath.is_filec             C   sD   yt | j jS  tk
r> } z|jttfkr0 dS d }~X nX d S )NF)r
   r   rZ  r7  r1  r   r   )r#   r4  r   r   r   r     s    zPath.is_symlinkc             C   sD   yt | j jS  tk
r> } z|jttfkr0 dS d }~X nX d S )NF)r   r   rZ  r7  r1  r   r   )r#   r4  r   r   r   is_block_device$  s    zPath.is_block_devicec             C   sD   yt | j jS  tk
r> } z|jttfkr0 dS d }~X nX d S )NF)r   r   rZ  r7  r1  r   r   )r#   r4  r   r   r   is_char_device1  s    zPath.is_char_devicec             C   sD   yt | j jS  tk
r> } z|jttfkr0 dS d }~X nX d S )NF)r   r   rZ  r7  r1  r   r   )r#   r4  r   r   r   is_fifo>  s    zPath.is_fifoc             C   sD   yt | j jS  tk
r> } z|jttfkr0 dS d }~X nX d S )NF)r   r   rZ  r7  r1  r   r   )r#   r4  r   r   r   	is_socketK  s    zPath.is_socketc             C   sb   | j p
| j r^| jr^| jd d d dkr^| jj| jd dd  }| j|g| jdd   S | S )Nr   r7   ~)r   r   r   r   rq   r   )r#   Zhomedirr   r   r   r   X  s
    zPath.expanduser)r   r  )N)r  )r  )FrN   )r>  rN   NNN)NN)NN)r  T)r  FF)F)0r:   r;   r<   r   r   r   r   r  r  r  r  r   r  r!  r"  r%  r'  r*  r,  r.  r8  r   r:  r=  r   rG  rH  rM  rO  rV  r   r   r   r   r   r   r   r)   rY  r   r   r[  r   r\  r]  r^  r_  r   r   r   r   r   r     s\   
 



 


	



				
c               @   s   e Zd Zf ZdS )r   N)r:   r;   r<   r   r   r   r   r   r   d  s   c               @   s    e Zd Zf Zdd Zdd ZdS )r   c             C   s   t dd S )Nz*Path.owner() is unsupported on this system)r   )r#   r   r   r   r:  r  s    zWindowsPath.ownerc             C   s   t dd S )Nz*Path.group() is unsupported on this system)r   )r#   r   r   r   r=  u  s    zWindowsPath.groupN)r:   r;   r<   r   r:  r=  r   r   r   r   r   k  s   )>r   r   r@  rs   rk   r   r   r-   collectionsr   
contextlibr   r1  r   r   r   r   operatorr   r   r	   r
   r   r   r   r   r   Zurllib.parser   re   Zsupports_symlinks__all__Z_WINERROR_NOT_READYZ_WINERROR_INVALID_NAMEr2  r   r   r    r=   rz   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>   sd   $
? 6>%  f
   [