3 \dh@s$ddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z mZmZmZddlmZddlmZmZmZmZmZmZmZddlmZdZd d d d d dgZdZ dZ!dZ"ddZ#Gddde$Z%Gddde%Z&Gddde%Z'e&Z(e'Z)GdddZ*Gddde*Z+e+Z,ddZ-e.ed rTej/e-Z-Gd!d"d"Z0Gd#d$d$Z1Gd%d&d&e0Z2Gd'd(d(e0Z3Gd)d*d*e0Z4Gd+d,d,e Z5Gd-d d e$Z6ej7j8e6Gd.d d e6Z9Gd/d d e6Z:Gd0d d e6Z;Gd1d d e;e9Zssz_WindowsFlavour.azr7ccs|]}t|VqdS)N)rA)rBr5rrrrCtsAZz\\?\ZCONZPRNZAUXZNULcCsh|] }d|qS)zCOM%dr)rBirrr zsz_WindowsFlavour. cCsh|] }d|qS)zLPT%dr)rBrHrrrrI{sc 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) Nrr7r%:rN)_split_extended_pathfindlen drive_letterslstrip) r#r4r!firstsecondprefixZthirdindexZindex2r1r2rrrr*s6      "    z_WindowsFlavour.splitrootcCs|jS)N)lower)r#srrrr8sz_WindowsFlavour.casefoldcCsdd|DS)NcSsg|] }|jqSr)rX)rBprrr sz2_WindowsFlavour.casefold_parts..r)r#r0rrrcasefold_partssz_WindowsFlavour.casefold_partscCsXd}|j|rP|dd}|dd}|jdrP||dd7}d|dd}||fS)Nr%zUNC\rLr>) startswith)r#rYZ ext_prefixrVrrrrOs    z$_WindowsFlavour._split_extended_pathcCs6|sdS|djdrdS|djddj|jkS)NFrz\\r7r&rN)r^ partitionupperreserved_names)r#r0rrr is_reserveds z_WindowsFlavour.is_reservedcCsd|j}t|dkrJ|ddkrJ|jddjd}d|t|jdfSdt|jjdSdS)NrKr7rMr?z file:///%s/%szutf-8zfile:)driverQas_posixrSurlquote_from_bytesencode)r#pathrcrestrrrmake_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 directoryZUSERNAMEr7z%Can't determine home directory for %rrNrN)osenvironKeyError RuntimeErrorr6r")r#usernameuserhomer1r2r0rrr gethomedirs,       z_WindowsFlavour.gethomedirN)r:r;r<r!r'has_drvntpathpathmodrkname is_supportedsetrangeordrRZext_namespace_prefixrar*r8r\rOrbrirqrrrrr=gs" "& '   r=c@sZeZdZdZdZdZeZej dkZ efddZ ddZ d d Z d d Zd dZddZdS) _PosixFlavourr?r%Fr@cCsV|rH|d|krH|j|}t|t|dkr.wrapped) functoolswraps staticmethod)rrr)rr _wrap_strfunc3sz_NormalAccessor._wrap_strfunccstjfdd}t|S)Ncst|t|f|S)N)r)ZpathobjAZpathobjBr)rrrr:sz5_NormalAccessor._wrap_binary_strfunc..wrapped)rrr)rrr)rr_wrap_binary_strfunc9sz$_NormalAccessor._wrap_binary_strfunclchmodcCs tddS)Nz%lchmod() not available on this system)NotImplementedError)r#rmoderrrrNsz_NormalAccessor.lchmodsymlinkFcCs tddS)Nz)os.symlink() not available on this system)r)r#srcdsttarget_is_directoryrrrr^sz_NormalAccessor.symlinkcCs tj|S)N)rkreadlink)r#rgrrrresz_NormalAccessor.readlinkN)F)r:r;r<rrrkstatlstatopenlistdirscandirchmodhasattrrmkdirunlinkrmdirrenamer)rutimergetcwdrrg expanduserrealpathrrrrr1s0                 rcCsP|d}|dd}|dkr"t}n$d|kr4tdnt|rBt}nt}|||S)Nrr7z**z:Invalid pattern: '**' can only be an entire path component)_RecursiveWildcardSelector ValueErrorr_WildcardSelector_PreciseSelector) pattern_partsr child_partsclsrrr_make_selectorvs  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_direxists _accessorriter _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)rurr$)r#rurrrrr$sz_PreciseSelector.__init__c cs^yD|j|j}|jr|n||rBx |jj||||D] }|Vq4WWntk rXdSXdS)N)_make_child_relpathrurrrPermissionError)r#rrrrrgrZrrrrs 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) _flavourr8listrrrurmatchrrrr) r#rrrrcfentriesentryruZ casefoldedrgrZrrrrs    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_symlinkrru_iterate_directoriesr)r#rrrrrrgrZrrrrs   z/_RecursiveWildcardSelector._iterate_directoriesc csyjt}zT|jj}xF|j|||D]4}x.|||||D]}||kr6|V|j|q6Wq"WWd|jXWntk r~dSXdS)N)rwrrraddclearr) r#rrrrZyieldedZsuccessor_selectZstarting_pointrZrrrrsz'_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#rgrrrr$s z_PathParents.__init__cCs(|js |jrt|jdSt|jSdS)Nr7)rrrQr)r#rrr__len__s z_PathParents.__len__cCs@|dks|t|krt||jj|j|j|jd| dS)Nrr7)rQ IndexErrorr_from_parsed_partsrrr)r#idxrrr __getitem__sz_PathParents.__getitem__cCsdj|jjS)Nz <{}.parents>)formatrr:)r#rrr__repr__ sz_PathParents.__repr__N)rrrr)r:r;r< __slots__r$rrrrrrrrs 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@)rrkrurr _from_parts)rrrrr__new__szPurePath.__new__cCs|jt|jfS)N) __class__tupler)r#rrr __reduce__&szPurePath.__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) isinstancerrrkfspathrr, TypeErrorrrr6)rrr0rDrrr _parse_args+s     zPurePath._parse_argsTcCs<tj|}|j|\}}}||_||_||_|r8|j|S)N)objectrrrrr_init)rrinitr#r1r2r0rrrr?s zPurePath._from_partscCs,tj|}||_||_||_|r(|j|S)N)rrrrrr)rr1r2r0rr#rrrrLs zPurePath._from_parsed_partscCs4|s|r$|||jj|ddS|jj|SdS)Nr7)rr")rr1r2r0rrr_format_parsed_partsVszPurePath._format_parsed_partscCsdS)Nr)r#rrrr]szPurePath._initcCs@|j|\}}}|jj|j|j|j|||\}}}|j|||S)N)rrr9rrrr)r#rr1r2r0rrr _make_childaszPurePath._make_childc Cs<y|jStk r6|j|j|j|jp,d|_|jSXdS)Nr&)rAttributeErrorrrrr)r#rrr__str__gs  zPurePath.__str__cCst|S)N)r)r#rrr __fspath__qszPurePath.__fspath__cCs|j}t|j|jdS)Nr?)rrr)r!)r#frrrrdtszPurePath.as_posixcCstjt|S)N)rkfsencoder)r#rrr __bytes__zszPurePath.__bytes__cCsdj|jj|jS)Nz{}({!r}))rrr:rd)r#rrrrszPurePath.__repr__cCs|jstd|jj|S)Nz.relative path can't be expressed as a file URI) is_absoluterrri)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#anchorrrrrs zPurePath.anchorcCs.|j}t||js|jrdndkr&dS|dS)Nr7rr%rN)rrQrr)r#r0rrrrusz PurePath.namecCsD|j}|jd}d|ko*t|dknr<||dSdSdS)Nr&rr7r%)rurfindrQ)r#rurHrrrsuffixs    zPurePath.suffixcCs:|j}|jdrgS|jd}dd|jdddDS)Nr&cSsg|] }d|qS)r&r)rBrrrrr[sz%PurePath.suffixes..r7)ruendswithrSr+)r#rurrrsuffixess   zPurePath.suffixescCsD|j}|jd}d|ko*t|dknr<|d|S|SdS)Nr&rr7)rurrQ)r#rurHrrrstems    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 namer7zInvalid name %rrNrN) rurrr6r!r'rQrrrr)r#rur1r2r0rrr with_names  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 namer7rN) rr!r'rr^rurrQrrrr)r#rrruZ old_suffixrrr with_suffixs    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 argumentr7rz{!r} does not start with {!r}r%) rrrrrrQrr\rrrrr) r#rr0r1r2Z abs_partsZto_drvZto_rootZto_partsZ to_abs_partsnrZ formattedrrr relative_tos( (zPurePath.relative_toc Cs.y|jStk r(t|j|_|jSXdS)N)rrrr)r#rrrr0"s  zPurePath.partscGs |j|S)N)r)r#rrrrjoinpath.szPurePath.joinpathcCs |j|fS)N)r)r#keyrrr __truediv__6szPurePath.__truediv__cCs|j|g|jS)N)rr)r#rrrr __rtruediv__9szPurePath.__rtruediv__cCs@|j}|j}|j}t|dkr*|s&|r*|S|j|||ddS)Nr7rN)rrrrQr)r#r1r2r0rrrparent<s zPurePath.parentcCst|S)N)r)r#rrrparentsFszPurePath.parentscCs|js dS|jj pt|jS)NF)rrrrboolr)r#rrrrKszPurePath.is_absolutecCs|jj|jS)N)rrbr)r#rrrrbRszPurePath.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 patternFr7T) rr8r6rrrrrQzipr(rZ fnmatchcase) r#Z path_patternrr1r2Z pat_partsr0r4rrrrrWs( zPurePath.matchN)rrrrrrr)T)T)/r:r;r<rrr classmethodrrrrrrrrrdrrrpropertyrrrrrrrrrcr2rrurrrrrrr0rrr r r rrbrrrrrrs\             c@seZdZeZfZdS)rN)r:r;r<_posix_flavourrrrrrrrusc@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)Nr@F)rz$cannot instantiate %r on your system) rrkrurrrrrvrr: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#r4r0rrrrs 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#rrrrszPath._raise_closedcCs|jj|||S)N)rr)r#ruflagsrrrr_openersz Path._openercCs|jr|j|jj|||S)N)rrrr)r#rrrrr _raw_openszPath._raw_opencCs |tjS)N)rkr)rrrrcwdszPath.cwdcCs||jjdS)N)rrq)rrrrhomesz Path.homec CsB|j}y |j}Wntk r2tj|}YnXtjj||S)N)rrrkrgsamestat)r#Z other_pathstZother_strrrsamefiles  z Path.samefileccsL|jr|jx8|jj|D](}|dkr*q|j|V|jr|jqWdS)Nr&..>r&r&)rrrrr)r#rurrriterdirs z Path.iterdirccsl|stdj||jj|}|jj|f\}}}|s:|rBtdtt|}x|j|D] }|VqZWdS)NzUnacceptable pattern: {!r}z%Non-relative patterns are unsupported) rrrr8r6rrrr)r#patternr1r2rselectorrZrrrglobs  z Path.globccs^|jj|}|jj|f\}}}|s(|r0tdtdt|}x|j|D] }|VqLWdS)Nz%Non-relative patterns are unsupported**)r+)rr8r6rrrr)r#r(r1r2rr)rZrrrrglobs z Path.rglobcCsD|jr|j|jr|S|jtjg|jdd}|j|d|S)NF)r)r)rrrrrkrrr)r#objrrrabsolutes z Path.absoluteFcCs|jr|jdd}y|jj||d}Wn,tk rV}z||WYdd}~XnX|j|f}|sy |jWn*tk r}z||WYdd}~XnX|S)NcSs0t|dd}|jtks|tkr,td|jdS)NwinerrorrzSymlink loop from %r)getattrerrnor_WINERROR_CANT_RESOLVE_FILENAMErnfilename)er/rrr check_eloop*s z!Path.resolve..check_eloop)strict)rrrrOSErrorrr)r#r6r5rYr4rZrrrresolve!s  z Path.resolvecCs |jj|S)N)rr)r#rrrr?sz Path.statcCsddl}|j|jjjS)Nr)r|r}rst_uidZpw_name)r#r|rrrownerFsz Path.ownercCsddl}|j|jjjS)Nr)grpZgetgrgidrst_gidZgr_name)r#r;rrrgroupMsz Path.grouprr7c Cs,|jr|jtjt|||||||jdS)N)opener)rriorrr)r#r bufferingencodingerrorsnewlinerrrrTsz Path.openc Cs |jdd }|jSQRXdS)Nrb)r)rread)r#rrrr read_bytes_szPath.read_bytesc Cs$|jd||d }|jSQRXdS)Nr>)rrBrC)rrF)r#rBrCrrrr read_textfszPath.read_textc Cs*t|}|jdd }|j|SQRXdS)Nwb)r) memoryviewrwrite)r#dataZviewrrrr write_bytesmszPath.write_bytesc Cs@t|tstd|jj|jd||d }|j|SQRXdS)Nzdata must be str, not %sw)rrBrC)rrrrr:rrK)r#rLrBrCrrrr write_textvs   zPath.write_textTc Csr|jr|j|r>y|jj|dWntk r8YnXdStjtjB}|sX|tjO}|j ||}tj |dS)N) rrrrr7rkO_CREATO_WRONLYO_EXCLr close)r#rexist_okrfdrrrtouchs   z Path.touchc Cs|jr|jy|jj||Wnjtk rf| s@|j|krB|jjddd|j|d|dYn&tk r| s|j rYnXdS)NT)r rTF)rrrrFileNotFoundErrorr r7r)r#rr rTrrrrsz Path.mkdircCs |jr|j|jj||dS)N)rrrr)r#rrrrrsz Path.chmodcCs |jr|j|jj||dS)N)rrrr)r#rrrrrsz Path.lchmodcCs|jr|j|jj|dS)N)rrrr)r#rrrrsz Path.unlinkcCs|jr|j|jj|dS)N)rrrr)r#rrrrsz Path.rmdircCs|jr|j|jj|S)N)rrrr)r#rrrrsz Path.lstatcCs |jr|j|jj||dS)N)rrrr)r#targetrrrrsz Path.renamecCs |jr|j|jj||dS)N)rrrr))r#rXrrrr)sz Path.replacecCs"|jr|j|jj|||dS)N)rrrr)r#rXrrrr symlink_toszPath.symlink_tocCsBy |jWn0tk r<}z|jttfkr.dSd}~XnXdS)NFT)rr7r1rr)r#r4rrrrs z Path.existscCsDyt|jjStk r>}z|jttfkr0dSd}~XnXdS)NF)r rst_moder7r1rr)r#r4rrrrs z Path.is_dircCsDyt|jjStk r>}z|jttfkr0dSd}~XnXdS)NF)r rrZr7r1rr)r#r4rrris_file s z Path.is_filecCsDyt|jjStk r>}z|jttfkr0dSd}~XnXdS)NF)r rrZr7r1rr)r#r4rrrrs zPath.is_symlinkcCsDyt|jjStk r>}z|jttfkr0dSd}~XnXdS)NF)r rrZr7r1rr)r#r4rrris_block_device$s zPath.is_block_devicecCsDyt|jjStk r>}z|jttfkr0dSd}~XnXdS)NF)rrrZr7r1rr)r#r4rrris_char_device1s zPath.is_char_devicecCsDyt|jjStk r>}z|jttfkr0dSd}~XnXdS)NF)rrrZr7r1rr)r#r4rrris_fifo>s z Path.is_fifocCsDyt|jjStk r>}z|jttfkr0dSd}~XnXdS)NF)r rrZr7r1rr)r#r4rrr is_socketKs zPath.is_socketcCsb|jp |j r^|jr^|jddddkr^|jj|jddd}|j|g|jddS|S)Nrr7~)rrrrrqr)r#ZhomedirrrrrXs zPath.expanduser)rr)N)r)r)FrN)r>rNNNN)NN)NN)rT)rFF)F)0r:r;r<rrrrrrrrr rr!r"r%r'r*r,r.r8rr:r=rrGrHrMrOrVrrrrrrrr)rYrrr[rr\r]r^r_rrrrrrs\                       c@seZdZfZdS)rN)r:r;r<rrrrrrdsc@s eZdZfZddZddZdS)rcCs tddS)Nz*Path.owner() is unsupported on this system)r)r#rrrr:rszWindowsPath.ownercCs tddS)Nz*Path.group() is unsupported on this system)r)r#rrrr=uszWindowsPath.groupN)r:r;r<rr:r=rrrrrks)>rrr@rsrkrrr- collectionsr contextlibrr1rrrroperatorrrr r r r r rrZ urllib.parserreZsupports_symlinks__all__Z_WINERROR_NOT_READYZ_WINERROR_INVALID_NAMEr2rrr r=rzrrrrrrrrrrrrrrrPathLikeregisterrrrrrrrrrsd   $  ? 6>  %f   [