3 \V@sVddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z mZmZddlmZddlmZmZmZmZmZmZmZddlmZdZejd krddlZej dd d5krdd lm!Z!qd ZdZ!ndZddddddgZ"ddZ#Gddde$Z%Gddde%Z&Gddde%Z'e&Z(e'Z)GdddZ*Gddde*Z+e+Z,d d!Z-e.ed"rej/e-Z-Gd#d$d$Z0Gd%d&d&Z1Gd'd(d(e0Z2Gd)d*d*e0Z3Gd+d,d,e0Z4Gd-d.d.e Z5Gd/dde$Z6ej7j8e6Gd0dde6Z9Gd1dde6Z:Gd2dde6Z;Gd3dde;e9Zwsz_WindowsFlavour.azr8ccs|]}t|VqdS)N)rA)rBr6rrrrCxsAZz\\?\ZCONZPRNZAUXZNULcCsh|] }d|qS)zCOM%dr)rBirrr ~sz_WindowsFlavour. cCsh|] }d|qS)zLPT%dr)rBrHrrrrIsc Csb|dd}|dd}||krP||krP|j|\}}|dd}|dd}nd}|dd}||kov||kov||kr|j|d}|dkr|j||d}||dkr|dkrt|}|r||d||||ddfS|d||||ddfSd} } |dkr<||jkr<|dd} |dd}|}||krT|} |j|}|| | |fS) Nrr8rr&:rM)_split_extended_pathfindlen drive_letterslstrip) r$r5r"firstsecondprefixZthirdindexZindex2r2r3rrrr+s6      "    z_WindowsFlavour.splitrootcCs|jS)N)lower)r$srrrr9sz_WindowsFlavour.casefoldcCsdd|DS)NcSsg|] }|jqSr)rW)rBprrr sz2_WindowsFlavour.casefold_parts..r)r$r1rrrcasefold_partssz_WindowsFlavour.casefold_partsFc Cst|}|stjSd}tdk r|r2|jt|Sg}xly|jt|}Wn>tk r|}tjj|\}}|j|||kr|SYq8Xtjj |ft |Sq8WdS)N) strosgetcwdr_ext_to_normalFileNotFoundErrorpathr,r-r#r))r$rastrictrXZ previous_sZ tail_partstailrrrresolves&  z_WindowsFlavour.resolvecCsXd}|j|rP|dd}|dd}|jdrP||dd7}d|dd}||fS)Nr&zUNC\rKr?) startswith)r$rXZ ext_prefixrUrrrrNs    z$_WindowsFlavour._split_extended_pathcCs|j|dS)Nr8)rN)r$rXrrrr_sz_WindowsFlavour._ext_to_normalcCs6|sdS|djdrdS|djddj|jkS)NFrz\\r8r'rM)rf partitionupperreserved_names)r$r1rrr is_reserveds z_WindowsFlavour.is_reservedcCsd|j}t|dkrJ|ddkrJ|jddjd}d|t|jdfSdt|jjdSdS)Nrr8rLr@z file:///%s/%szutf-8zfile:)driverPas_posixrRurlquote_from_bytesencode)r$rarkrestrrrmake_uris z_WindowsFlavour.make_uric Csdtjkrtjd}n`dtjkr,tjd}nJdtjkrnytjd}Wntk r\d}YnX|tjd}ntd|rtjd|kr|j|f\}}}|d tjdkrtd |||d <|s|r|||j|dd}n |j|}|S) NHOMEZ USERPROFILEZHOMEPATHZ HOMEDRIVEr&zCan't determine home directoryZUSERNAMEr8z%Can't determine home directory for %rrMrM)r]environKeyError RuntimeErrorr7r#)r$usernameuserhomer2r3r1rrr gethomedirs,       z_WindowsFlavour.gethomedirN)F)r;r<r=r"r(has_drvntpathpathmodr]name is_supportedsetrangeordrQZext_namespace_prefixrir+r9r[rdrNr_rjrprwrrrrr>ks& "& '    r>c@sdeZdZdZdZdZeZej dkZ efddZ ddZ d d Z dd d Zd dZddZddZdS) _PosixFlavourr@r&FrcCsV|rH|d|krH|j|}t|t|dkr._resolver&)r" _accessor is_absoluter]r^r\)r$rarbbaser)rrrr"rbrrd/s &z_PosixFlavour.resolvecCsdS)NFr)r$r1rrrrj\sz_PosixFlavour.is_reservedcCst|}dt|S)Nzfile://)bytesrm)r$raZbpathrrrrp_sz_PosixFlavour.make_uric Cst|s:y tjdStk r6ddl}|jtjjSXn6ddl}y |j|jStk rntd|YnXdS)Nrqrz%Can't determine home directory for %r) r]rrrspwdgetpwuidgetuidpw_dirgetpwnamrt)r$rurrrrrwes  z_PosixFlavour.gethomedirN)F)r;r<r=r"r(rx posixpathrzr]r{r|r+r9r[rdrjrprwrrrrrs   -rc@s eZdZdS) _AccessorN)r;r<r=rrrrrysrc@seZdZddZddZeejZeejZeejZeej Z eej Z eej Z e edrjeej Z nddZ eejZeejZeejZeejZeejZerereejZqdd Zn ed d ZeejZd d Zd S)_NormalAccessorcstjfdd}t|S)Ncst|f|S)N)r\)pathobjargs)strfuncrrwrappedsz._NormalAccessor._wrap_strfunc..wrapped) functoolswraps staticmethod)rrr)rr _wrap_strfuncsz_NormalAccessor._wrap_strfunccstjfdd}t|S)Ncst|t|f|S)N)r\)ZpathobjAZpathobjBr)rrrrsz5_NormalAccessor._wrap_binary_strfunc..wrapped)rrr)rrr)rr_wrap_binary_strfuncsz$_NormalAccessor._wrap_binary_strfunclchmodcCs tddS)Nz%lchmod() not available on this system)NotImplementedError)r$rmoderrrrsz_NormalAccessor.lchmodcCs tddS)Nz&symlink() not available on this system)r)rDbtarget_is_directoryrrrsymlinksz_NormalAccessor.symlinkcCstjt|t|S)N)r]rr\)rDrrrrrrscCs tj|S)N)r]r)r$rarrrrsz_NormalAccessor.readlinkN)r;r<r=rrr]statlstatopenlistdirscandirchmodhasattrrmkdirunlinkrmdirrenamer*rsupports_symlinksrrutimerrrrrr~s.                 rcCsP|d}|dd}|dkr"t}n$d|kr4tdnt|rBt}nt}|||S)Nrr8z**z:Invalid pattern: '**' can only be an entire path component)_RecursiveWildcardSelector ValueErrorr _WildcardSelector_PreciseSelector) pattern_partsr child_partsclsrrr_make_selectors  r lru_cachec@seZdZddZddZdS) _SelectorcCs.||_|rt||_d|_nt|_d|_dS)NTF)rr successordironly_TerminatingSelector)r$rrrrr%s  z_Selector.__init__cCs<t|}|j}|j}|jj}||s,tgS|j||||S)N)typeis_direxistsrriter _select_from)r$ parent_pathZpath_clsrrrrrr select_fromsz_Selector.select_fromN)r;r<r=r%rrrrrrs rc@seZdZddZdS)rccs |VdS)Nr)r$rrrrrrrrsz!_TerminatingSelector._select_fromN)r;r<r=rrrrrrsrc@seZdZddZddZdS)rcCs||_tj||dS)N)r{rr%)r$r{rrrrr%sz_PreciseSelector.__init__c cs^yD|j|j}|jr|n||rBx |jj||||D] }|Vq4WWntk rXdSXdS)N)_make_child_relpathr{rrrPermissionError)r$rrrrrarYrrrrs z_PreciseSelector._select_fromN)r;r<r=r%rrrrrrsrc@seZdZddZddZdS)rcCs"tjtj||_tj||dS)N)recompilefnmatch translaterrr%)r$rrrrrr%sz_WildcardSelector.__init__c csy||jj}t||}xb|D]Z}|j s0|jr|j}||} |jj| r|j|} x |j j | |||D] } | VqhWqWWnt k rdSXdS)N) _flavourr9listrrr{rmatchrrrr) r$rrrrcfentriesentryr{Z casefoldedrarYrrrrs    z_WildcardSelector._select_fromN)r;r<r=r%rrrrrrsrc@s$eZdZddZddZddZdS)rcCstj||dS)N)rr%)r$rrrrrr%sz#_RecursiveWildcardSelector.__init__c csz|VyZt||}xH|D]@}|jr|j r|j|j}x|j|||D] }|VqLWqWWntk rtdSXdS)N)rr is_symlinkrr{_iterate_directoriesr)r$rrrrrrarYrrrrs   z/_RecursiveWildcardSelector._iterate_directoriesc csyjt}zT|jj}xF|j|||D]4}x.|||||D]}||kr6|V|j|q6Wq"WWd|jXWntk r~dSXdS)N)r}rrraddclearr) r$rrrrZyieldedZsuccessor_selectZstarting_pointrYrrrr*sz'_RecursiveWildcardSelector._select_fromN)r;r<r=r%rrrrrrrs rc@s0eZdZdZddZddZd d Zd d Zd S) _PathParents_pathcls_drv_root_partscCs&t||_|j|_|j|_|j|_dS)N)rrrrr)r$rarrrr%Cs z_PathParents.__init__cCs(|js |jrt|jdSt|jSdS)Nr8)rrrPr)r$rrr__len__Js z_PathParents.__len__cCs@|dks|t|krt||jj|j|j|jd| dS)Nrr8)rP IndexErrorr_from_parsed_partsrrr)r$idxrrr __getitem__Psz_PathParents.__getitem__cCsdj|jjS)Nz <{}.parents>)formatrr;)r$rrr__repr__Vsz_PathParents.__repr__N)rrrr)r;r<r= __slots__r%rrrrrrrr>s rc@seZdZdYZdd Zd d Zed d ZedZddZed[ddZ eddZ ddZ ddZ ddZ ddZddZdd Zd!d"Zd#d$Zed%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zeedd3d4Zeedd5d4Zed6d7Zed8d9Zed:d;Z edd?Z"d@dAZ#dBdCZ$dDdEZ%edFdGZ&dHdIZ'dJdKZ(dLdMZ)edNdOZ*edPdQZ+dRdSZ,dTdUZ-dVdWZ.dXS)\rrrr_str_hash_pparts_cached_cpartscGs$|tkrtjdkrtnt}|j|S)Nr)rr]r{rr _from_parts)rrrrr__new__hszPurePath.__new__cCs|jt|jfS)N) __class__tupler)r$rrr __reduce__rszPurePath.__reduce__cCshg}xV|D]N}t|tr$||j7}q tj|}t|trH|jt|q tdt|q W|j j |S)NzNargument should be a str object or an os.PathLike object returning str, not %r) isinstancerrr]fspathr\r- TypeErrorrrr7)rrr1rDrrr _parse_argsws     zPurePath._parse_argsTcCs<tj|}|j|\}}}||_||_||_|r8|j|S)N)objectrrrrr_init)rrinitr$r2r3r1rrrrs zPurePath._from_partscCs,tj|}||_||_||_|r(|j|S)N)rrrrrr)rr2r3r1rr$rrrrs zPurePath._from_parsed_partscCs4|s|r$|||jj|ddS|jj|SdS)Nr8)rr#)rr2r3r1rrr_format_parsed_partsszPurePath._format_parsed_partscCsdS)Nr)r$rrrrszPurePath._initcCs@|j|\}}}|jj|j|j|j|||\}}}|j|||S)N)rrr:rrrr)r$rr2r3r1rrr _make_childszPurePath._make_childc Cs<y|jStk r6|j|j|j|jp,d|_|jSXdS)Nr')rAttributeErrorrrrr)r$rrr__str__s  zPurePath.__str__cCst|S)N)r\)r$rrr __fspath__szPurePath.__fspath__cCs|j}t|j|jdS)Nr@)rr\r*r")r$frrrrlszPurePath.as_posixcCstjt|S)N)r]fsencoder\)r$rrr __bytes__szPurePath.__bytes__cCsdj|jj|jS)Nz{}({!r}))rrr;rl)r$rrrrszPurePath.__repr__cCs|jstd|jj|S)Nz.relative path can't be expressed as a file URI)rrrrp)r$rrras_uriszPurePath.as_uric Cs2y|jStk r,|jj|j|_|jSXdS)N)rrrr[r)r$rrr_cpartss zPurePath._cpartscCs&t|tstS|j|jko$|j|jkS)N)rrNotImplementedrr)r$otherrrr__eq__s zPurePath.__eq__c Cs2y|jStk r,tt|j|_|jSXdS)N)rrhashrr)r$rrr__hash__s zPurePath.__hash__cCs(t|t s|j|jk rtS|j|jkS)N)rrrrr)r$rrrr__lt__szPurePath.__lt__cCs(t|t s|j|jk rtS|j|jkS)N)rrrrr)r$rrrr__le__szPurePath.__le__cCs(t|t s|j|jk rtS|j|jkS)N)rrrrr)r$rrrr__gt__szPurePath.__gt__cCs(t|t s|j|jk rtS|j|jkS)N)rrrrr)r$rrrr__ge__szPurePath.__ge__z.The drive prefix (letter or UNC path), if any.)doczThe root of the path, if any.cCs|j|j}|S)N)rr)r$anchorrrrr s zPurePath.anchorcCs.|j}t||js|jrdndkr&dS|dS)Nr8rr&rM)rrPrr)r$r1rrrr{ sz PurePath.namecCsD|j}|jd}d|ko*t|dknr<||dSdSdS)Nr'rr8r&)r{rfindrP)r$r{rHrrrsuffixs    zPurePath.suffixcCs:|j}|jdrgS|jd}dd|jdddDS)Nr'cSsg|] }d|qS)r'r)rBr rrrrZ"sz%PurePath.suffixes..r8)r{endswithrRr,)r$r{rrrsuffixess   zPurePath.suffixescCsD|j}|jd}d|ko*t|dknr<|d|S|SdS)Nr'rr8)r{r rP)r$r{rHrrrstem$s    z PurePath.stemcCs|jstd|f|jj|f\}}}| sZ|d|jj|jjgksZ|sZ|sZt|dkrftd||j|j|j |j dd|gS)Nz%r has an empty namer8zInvalid name %rrMrM) r{rrr7r"r(rPrrrr)r$r{r2r3r1rrr with_name.s  zPurePath.with_namecCs|j}|j|ks |jr,|j|kr,td||r<|jd sD|dkrPtd||j}|shtd|f|j}|s|||}n|dt| |}|j|j |j |j dd|gS)NzInvalid suffix %rr'z%r has an empty namer8rM) rr"r(rrfr{r rPrrrr)r$r rr{Z old_suffixrrr with_suffix9s    zPurePath.with_suffixc Gs|s td|j}|j}|j}|r8||g|dd}n|}|j|\}}}|rf||g|dd} n|} t| } |jj} | dkr|p|n| |d| | | kr|j|||} t dj t |t | |j d| dkr|nd|| dS)Nzneed at least one argumentr8rz{!r} does not start with {!r}r&) rrrrrrPrr[rrrr\r) r$rr1r2r3Z abs_partsZto_drvZto_rootZto_partsZ to_abs_partsnrZ formattedrrr relative_toNs( (zPurePath.relative_toc Cs.y|jStk r(t|j|_|jSXdS)N)rrrr)r$rrrr1ns  zPurePath.partscGs |j|S)N)r)r$rrrrjoinpathzszPurePath.joinpathcCs |j|fS)N)r)r$keyrrr __truediv__szPurePath.__truediv__cCs|j|g|jS)N)rr)r$rrrr __rtruediv__szPurePath.__rtruediv__cCs@|j}|j}|j}t|dkr*|s&|r*|S|j|||ddS)Nr8rM)rrrrPr)r$r2r3r1rrrparents zPurePath.parentcCst|S)N)r)r$rrrparentsszPurePath.parentscCs|js dS|jj pt|jS)NF)rrrxboolr)r$rrrrszPurePath.is_absolutecCs|jj|jS)N)rrjr)r$rrrrjszPurePath.is_reservedc Cs|jj}||}|jj|f\}}}|s0td|rF|||jkrFdS|r\|||jkr\dS|j}|sj|rt|t|kr~dS|dd}nt|t|krdSx.tt |t |D]\}}t j ||sdSqWdS)Nz empty patternFr8T) rr9r7rrrrrPzipr)rZ fnmatchcase) r$Z path_patternrr2r3Z pat_partsr1r5rrrrrs( zPurePath.matchN)rrrrrrr)T)T)/r;r<r=rrr classmethodrrrrrrrrrlrrrpropertyrrrrrrrrrkr3r r{r r rrrrr1rrrrrrrjrrrrrrZs\             c@seZdZeZfZdS)rN)r;r<r=_posix_flavourrrrrrrrsc@seZdZeZfZdS)rN)r;r<r=_windows_flavourrrrrrrrsc@seZdZd`ZddZdaddZdd Zd d Zd d ZddZ dbddZ dcddZ e ddZ e ddZddZddZddZd d!Zd"d#Zddd%d&Zd'd(Zd)d*Zd+d,Zdfd/d0Zd1d2Zdgd3d4Zd5d6Zdhd7d8Zdid:d;Zdjdd?Zd@dAZ dBdCZ!dDdEZ"dFdGZ#dHdIZ$dJdKZ%dkdLdMZ&dNdOZ'dPdQZ(dRdSZ)dTdUZ*dVdWZ+dXdYZ,dZd[Z-d\d]Z.d^d_Z/dS)lrr_closedcOsL|tkrtjdkrtnt}|j|dd}|jjs@td|j f|j |S)NrF)rz$cannot instantiate %r on your system) rr]r{rrrrr|rr;r)rrkwargsr$rrrrs z Path.__new__NcCs"d|_|dk r|j|_nt|_dS)NF)rr_normal_accessor)r$templaterrrrs z Path._initcCs|j|g}|j|j|j|S)N)rrrr)r$r5r1rrrrs zPath._make_child_relpathcCs|jr|j|S)N)r _raise_closed)r$rrr __enter__szPath.__enter__cCs d|_dS)NT)r)r$tvtbrrr__exit__sz Path.__exit__cCs tddS)NzI/O operation on closed path)r)r$rrrr#szPath._raise_closedcCs|jj|||S)N)rr)r$r{flagsrrrr_opener sz Path._openercCs|jr|j|jj|||S)N)rr#rr)r$r*rrrr _raw_openszPath._raw_opencCs |tjS)N)r]r^)rrrrcwdszPath.cwdcCs||jjdS)N)rrw)rrrrhome!sz Path.homec CsB|j}y |j}Wntk r2tj|}YnXtjj||S)N)rrr]rasamestat)r$Z other_pathstZother_strrrsamefile(s  z Path.samefileccsL|jr|jx8|jj|D](}|dkr*q|j|V|jr|jqWdS)Nr'..>r3r')rr#rrr)r$r{rrriterdir3s z Path.iterdirccsl|stdj||jj|}|jj|f\}}}|s:|rBtdtt|}x|j|D] }|VqZWdS)NzUnacceptable pattern: {!r}z%Non-relative patterns are unsupported) rrrr9r7rrrr)r$patternr2r3rselectorrYrrrglobAs  z Path.globccs^|jj|}|jj|f\}}}|s(|r0tdtdt|}x|j|D] }|VqLWdS)Nz%Non-relative patterns are unsupported**)r8)rr9r7rrrr)r$r5r2r3rr6rYrrrrglobOs z Path.rglobcCsD|jr|j|jr|S|jtjg|jdd}|j|d|S)NF)r)r")rr#rrr]r^rr)r$objrrrabsolute[s z Path.absoluteFcCsh|jr|j|jj||d}|dkr:|jt|j}|jjj|}|j |fdd}|j |d|S)N)rbF)r)r") rr#rrdrr\r;rznormpathrr)r$rbrXZnormedr:rrrrdms  z Path.resolvecCs |jj|S)N)rr)r$rrrrsz Path.statcCsddl}|j|jjjS)Nr)rrrst_uidZpw_name)r$rrrrownersz Path.ownercCsddl}|j|jjjS)Nr)grpZgetgrgidrst_gidZgr_name)r$r?rrrgroupsz Path.grouprr8c Cs,|jr|jtjt|||||||jdS)N)opener)rr#iorr\r+)r$r bufferingencodingerrorsnewlinerrrrsz Path.openc Cs |jdd }|jSQRXdS)Nrb)r)rread)r$rrrr read_bytesszPath.read_bytesc Cs$|jd||d }|jSQRXdS)NrB)rrFrG)rrJ)r$rFrGrrrr read_textszPath.read_textc Cs*t|}|jdd }|j|SQRXdS)Nwb)r) memoryviewrwrite)r$dataZviewrrrr write_bytesszPath.write_bytesc Cs@t|tstd|jj|jd||d }|j|SQRXdS)Nzdata must be str, not %sw)rrFrG)rr\rrr;rrO)r$rPrFrGrrrr write_texts   zPath.write_textTc Csr|jr|j|r>y|jj|dWntk r8YnXdStjtjB}|sX|tjO}|j ||}tj |dS)N) rr#rrrr]O_CREATO_WRONLYO_EXCLr-close)r$rexist_okr*fdrrrtouchs   z Path.touchc Cs|jr|jy|jj||Wnjtk rf| s@|j|krB|jjddd|j|d|dYn&tk r| s|j rYnXdS)NT)rrXF)rr#rrr`rrr)r$rrrXrrrrsz Path.mkdircCs |jr|j|jj||dS)N)rr#rr)r$rrrrrsz Path.chmodcCs |jr|j|jj||dS)N)rr#rr)r$rrrrrsz Path.lchmodcCs|jr|j|jj|dS)N)rr#rr)r$rrrrsz Path.unlinkcCs|jr|j|jj|dS)N)rr#rr)r$rrrrsz Path.rmdircCs|jr|j|jj|S)N)rr#rr)r$rrrrsz Path.lstatcCs |jr|j|jj||dS)N)rr#rr)r$rrrrrsz Path.renamecCs |jr|j|jj||dS)N)rr#rr*)r$rrrrr*sz Path.replacecCs"|jr|j|jj|||dS)N)rr#rr)r$rrrrr symlink_to(szPath.symlink_tocCsBy |jWn0tk r<}z|jttfkr.dSd}~XnXdS)NFT)rrrrr)r$rrrrr3s z Path.existscCsDyt|jjStk r>}z|jttfkr0dSd}~XnXdS)NF)rrst_moderrrr)r$rrrrr?s z Path.is_dircCsDyt|jjStk r>}z|jttfkr0dSd}~XnXdS)NF)r rr\rrrr)r$rrrris_fileLs z Path.is_filecCsDyt|jjStk r>}z|jttfkr0dSd}~XnXdS)NF)r rr\rrrr)r$rrrrrZs zPath.is_symlinkcCsDyt|jjStk r>}z|jttfkr0dSd}~XnXdS)NF)r rr\rrrr)r$rrrris_block_devicefs zPath.is_block_devicecCsDyt|jjStk r>}z|jttfkr0dSd}~XnXdS)NF)r rr\rrrr)r$rrrris_char_devicess zPath.is_char_devicecCsDyt|jjStk r>}z|jttfkr0dSd}~XnXdS)NF)rrr\rrrr)r$rrrris_fifos z Path.is_fifocCsDyt|jjStk r>}z|jttfkr0dSd}~XnXdS)NF)r rr\rrrr)r$rrrr is_sockets zPath.is_socketcCsb|jp |j r^|jr^|jddddkr^|jj|jddd}|j|g|jddS|S)Nrr8~)rrrrrwr)r$Zhomedirrrr expandusers zPath.expanduser)rr)N)r))r,)FrM)rBrMNNN)NN)NN)r)T)r,FF)F)0r;r<r=rrrrr$r(r#r+r-rr.r/r2r4r7r9r;rdrr>rArrKrLrQrSrZrrrrrrrr*r[rrr]rr^r_r`rarcrrrrrs\                       c@seZdZfZdS)rN)r;r<r=rrrrrrsc@s eZdZfZddZddZdS)rcCs tddS)Nz*Path.owner() is unsupported on this system)r)r$rrrr>szWindowsPath.ownercCs tddS)Nz*Path.group() is unsupported on this system)r)r$rrrrAszWindowsPath.groupN)r;r<r=rr>rArrrrrs)rr)>rrrDryr]rrr. collectionsr contextlibrrrrroperatorrrrr r r r r rZ urllib.parserrmrr{rZgetwindowsversionr__all__r rr!r>rrrrrr!rrrrrrrrrrPathLikeregisterrrrrrrrrrsl   $   ?(c=  %f   Q