U :e@sddlZddlZddlZddlZddlZddlZzddlZ[dZWnek rZdZYnXzddl Z [ dZ Wnek rdZ YnXzddl Z [ dZ Wnek rdZ YnXzddl mZWnek rdZYnXzddlmZWnek rdZYnXejdkZdZZejdkr2ddlZner@ddlZerJdnd Zeed odejd aeoteed Zd Zddddddddddddddddddd d!d"d#d$d%d&gZGd'ddeZGd(d&d&eZGd)ddeZ Gd*ddeZ!Gd+d,d,eZ"Gd-d.d.e#Z$Gd/d0d0e#Z%d1d2Z&d3d4Z'efd5d6Z(dd7dZ)d8d9Z*d:d;Z+dd?dZ-dd>d@dZ.eedArdd>dBdCZ/ndDdCZ/dd>dEdZ0dd>dFdZ1dd>dGdZ2dHd"Z3ddIdJZ4dde2ddfdKdZ5eej6dLrdMdNZ7dOdPZ8ndQdNZ7dRdPZ8dSdTZ9dUdVZ:ej;ejejkobej?ej@kobejejAkZBddWdZCeBeC_DdXdYZEe2fdZdZFd[d\ZGd]d^ZHd_d`ZIdadbZJddddeZKddfdgZLdheKdigdjfiZMereKdkgdlfeMdm<eLgdnfeMdo<e reKdpgdqfeMdr<e reKdsgdtfeMdu<dvdZNddxdZOdydZPddzdZQd{dZRd|d}ZSdd~dZTdd ZUddZVddZWddZXdgeXgdjfdgeWgdnfdZYerddgeXgdlfeYdm<e rddgeXgdqfeYdr<e rddgeXgdtfeYdu<ddZZddd!Z[eedr}z t|W5d}~XYnXzt|||WnTtk r}z6|j|_|j|_|j t j t j hkrt|n|dW5d}~XYnXdSN) fileno Exceptionr*rrOSErrornamefilename filename2errnoEINVALENOTSUP)fsrcfdstflagsinfdoutfderrr&r&r'_fastcopy_fcopyfile^s  r;c CsDz|}|}Wn*tk r>}z t|W5d}~XYnXztt|jd}Wntk rnd}YnXtj dkrt |d}d}zt ||||}Wntk r&}zj|j |_ |j |_|jtjkrdat||jtjkr|d|dkrt|dtjdkrt||W5d}~XYqX|dkr6q@||7}qdS)Niili@rF)r,r-r*maxosfstatst_sizer.sysmaxsizeminrr/r0r1r2ENOTSOCK_USE_CP_SENDFILEENOSPClseekSEEK_CUR)r5r6r8r9r: blocksizeoffsetsentr&r&r'_fastcopy_sendfilers8        rKc Csn|j}|j}tt|L}||}|s*q`q||krV|d|}||W5QRXq||qW5QRXdSr+)readintowrite memoryview bytearray)r5r6length fsrc_readinto fdst_writemvnsmvr&r&r'_copyfileobj_readintosrVcCs0|st}|j}|j}||}|s"q,||qdSr+) COPY_BUFSIZEreadrM)r5r6rP fsrc_readrRbufr&r&r'r scCst|tjrJttjdrJztj|t|WStk rHYdSXttjdr~ztj||WStk r|YdSXtj tj |tj tj |kS)NsamestatFsamefile) isinstancer=DirEntryhasattrpathr[statr.r\normcaseabspathsrcdstr&r&r' _samefiles rgcCst|tjr|St|Sr+)r]r=r^rafnr&r&r'_statsrjcCs t|tjr|Stj|Sr+)r]r=r^ is_symlinkr`islinkrhr&r&r'_islinksrmfollow_symlinksc Cstd||t||r(td||d}t||gD]j\}}z t|}Wntk r`Yq8Xt |j rt |t j r|jn|}td|tr8|dkr8|j}q8|st|rt t ||n t|d}t|d}tr,z,t||tj|WW5QRW5QRStk r(YnXntrtz(t|||WW5QRW5QRStk rpYnXn>tr|dkrt||t|t|W5QRW5QRSt ||W5QRXW5QRX|S)Nzshutil.copyfilez{!r} and {!r} are the same filerz`%s` is a named piperbwb)!r@auditrgr!format enumeraterjr.raS_ISFIFOst_moder]r=r^r`r_WINDOWSr?rmsymlinkreadlinkopen_HAS_FCOPYFILEr;r_COPYFILE_DATAr*rDrKrVrBrWr ) rerfro file_sizeiristr5r6r&r&r'r sD       cCsptd|||sFt|rFtj|rFttdr@tjtj}}qRdSn t tj }}||}||t |j dS)Nzshutil.copymodelchmod)r@rrrmr=r`rlr_lstatrrjchmodraS_IMODErv)rerfro stat_func chmod_funcrr&r&r'r !s   listxattrc Csztj||d}Wn@tk rR}z"|jtjtjtjfkr<WYdSd}~XYnX|D]j}z&tj|||d}tj||||dWqXtk r}z |jtj tjtjtjfkrW5d}~XYqXXqXdSNrn) r=rr.r2r4ENODATAr3getxattrsetxattrEPERM)rerfronameser/valuer&r&r' _copyxattr7s rcOsdSr+r&)argskwargsr&r&r'rOsc s`td||ddddd|p6t|o4tj| }|rJfdd}n fdd}t|tjrp|j|d}n|d ||d}t |j }|d ||j |j f|dt |||dz|d |||dWntk rYnXt|d r\z|d ||j|dWnVtk rZ}z6dD]*}tt|r|jtt|krqJqW5d}~XYnXdS)Nzshutil.copystat)nsrocWsdSr+r&)rrorr&r&r'_nop`szcopystat.._nopcs tt|Sr+)getattrr=r/rr&r'lookupgszcopystat..lookupcstt|}|tjkr|SSr+)rr=supports_follow_symlinks)r/rirr&r'rls  rnrautimerst_flagschflags) EOPNOTSUPPr4)r@rrrmr=r`rlr]r^rarrv st_atime_ns st_mtime_nsrNotImplementedErrorr_rr.r2r) rerfrofollowrrmodewhyr:r&rr'r Rs4       cCsBtj|r"tj|tj|}t|||dt|||d|Sr)r=r`isdirjoinbasenamer r rerfror&r&r'r s cCsBtj|r"tj|tj|}t|||dt|||d|Sr)r=r`rrrr r rr&r&r'rs csfdd}|S)Ncs(g}D]}|t||qt|Sr+)extendfnmatchfilterset)r`r ignored_namespatternpatternsr&r'_ignore_patternssz)ignore_patterns.._ignore_patternsr&)rrr&rr'rs c Cs>|dk r$|t|dd|D}nt}tj||dg} |tkpJ|tk} |D]~} | j|krbqPtj|| j} tj|| j} | r| n| }z| }|rtjdkr| j dd}|j t j krd}|r8t | }|rt|| t|| | dnBtj|s |r WqP| r,t|| ||||dn ||| n*| rXt|| ||||dn ||| WqPtk r}z| |jdW5d}~XYqPtk r}z| | | t|fW5d}~XYqPXqPzt||WnJtk r*}z*t|d ddkr| ||t|fW5d}~XYnX| r:t| |S) NcSsg|] }|jqSr&r).0xr&r&r' sz_copytree..)exist_okrFrn) dirs_exist_okrwinerror)r=fspathrmakedirsrr r/r`rrkrast_reparse_tagIO_REPARSE_TAG_MOUNT_POINTryrxr existsis_dirrrrrr.appendstrr)entriesrerfsymlinksignore copy_functionignore_dangling_symlinksrrerrors use_srcentrysrcentrysrcnamedstnamesrcobjrkrlinktor:rr&r&r' _copytrees`             (&rc CsDtd||t|}t|}W5QRXt||||||||dS)Nzshutil.copytree)rrerfrrrrr)r@rrr=scandirlistr) rerfrrrrritrrr&r&r'rs&  st_file_attributescCsPz4|jdd}t|jo2|jtj@o0|jtjk WStk rJYdSXdSNFrn)raS_ISDIRrvrFILE_ATTRIBUTE_REPARSE_POINTrrr.)entryrr&r&r' _rmtree_isdir6s    rcCsLz0t|}t|jp.|jtj@o.|jtjkWSt k rFYdSXdS)NF) r=rraS_ISLNKrvrrrrr.)r`rr&r&r'_rmtree_islink?s    rcCs*z|jddWStk r$YdSXdSr)rr.)rr&r&r'rHscCs tj|Sr+)r=r`rl)r`r&r&r'rNsc Cs&z"t|}t|}W5QRXWn*tk rL|tj|tg}YnX|D]}|j}t|rz|rvtdWn,tk r|tjj |tYqRYnXt ||qRzt |WqRtk r|tj |tYqRXqRzt |Wn(tk r |tj |tYnXdS)N%Cannot call rmtree on a symbolic link) r=rrr.r@exc_infor`rrkrl_rmtree_unsafeunlinkrmdir)r`onerror scandir_itrrfullnamer&r&r'rRs0     rc Cs.z"t|}t|}W5QRXWn@tk rb}z"||_|tj|tWYdSd}~XYnX|D]}tj||j }z|j dd}Wntk rd}YnNX|rz|j dd} t | j }Wn*tk r|tj|tYqhYnX|rztj|j tj|d} Wn(tk r:|tj|tYnXztj| t| rt| ||ztj|j |dWn(tk r|tj|tYnXn8z tdWn*tk r|tjj|tYnXW5t| Xqhztj|j |dWqhtk r&|tj|tYqhXqhdS)NFrn)dir_fdr)r=rrr.r0r@rr`rr/rrarrvrrzO_RDONLYcloser[r>_rmtree_safe_fdrrlr) topfdr`rrrr:rrrorig_stdirfdr&r&r'rqsR       rc Cstd||rdd}n|dkr*dd}tr`t|trDt|}zt|}Wn(tk rz|tj|t YdSXzt |tj }Wn(tk r|tj |t YdSXztj |t|rt|||zt|Wn(tk r|tj|t YnXn8z tdWn*tk rL|tj j|t YnXW5t |XnNzt|rttdWn,tk r|tj j|t YdSXt||SdS)Nz shutil.rmtreecWsdSr+r&rr&r&r'rszrmtree..onerrorcWsdSr+r&rr&r&r'rsr)r@rr_use_fd_functionsr]bytesr=fsdecoderr-rrzrrr`r[r>rrr.rlrr)r` ignore_errorsrrfdr&r&r'rsJ        cCs&tjjtjjpd}tj||S)N)r=r`sepaltseprrstrip)r`rr&r&r' _basenamesrc CsTtd|||}tj|rbt||r8t||dStj|t|}tj |rbt d|zt||Wnt k rNtj |rt |}t||t|ntj|r6t||rt d||ft|s t|tjst|rtjdkrtd||ft|||ddt|n|||t|YnX|S)Nz shutil.movez$Destination path '%s' already existsz.Cannot move a directory '%s' into itself '%s'.darwinzKCannot move the non-empty directory '%s': Lacking write permission to '%s'.T)rr)r@rrr=r`rrgrenamerrrrr.rlryrxr _destinsrc _is_immutableaccessW_OKlistdirplatformPermissionErrorrr)rerfrreal_dstrr&r&r'rsL              cCsVtj|}tj|}|tjjs2|tjj7}|tjjsL|tjj7}||Sr+)r=r`rcendswithr startswithrdr&r&r'r/s    rcCs(t|}tjtjg}t|do&|j|kS)Nr)rjra UF_IMMUTABLE SF_IMMUTABLEr_r)rerimmutable_statesr&r&r'r8s rcCsNtdks|dkrdSz t|}Wntk r8d}YnX|dk rJ|dSdSN)rKeyErrorr/resultr&r&r'_get_gid=s  rcCsNtdks|dkrdSz t|}Wntk r8d}YnX|dk rJ|dSdSr)rrrr&r&r'_get_uidIs  rgzipcs |dkrd}nDtr |dkr d}n2tr2|dkr2d}n trD|dkrDd}ntd|ddl} |rfd |nd} |d | } tj| } | rtj | s|dk r| d | |st | |dk r| d t t fd d} |s| | d|}z|j|| dW5|X| S)Nrrgzbzip2bz2xzzCbad value for 'compress', or compression format not supported : {0}r..tar creating %szCreating tar archivecs,dk r|_|_dk r(|_|_|Sr+)gidgnameuiduname)tarinforgroupownerrr&r' _set_uid_gidsz#_make_tarball.._set_uid_gidzw|%s)r)_ZLIB_SUPPORTED_BZ2_SUPPORTED_LZMA_SUPPORTED ValueErrorrstarfiler=r`dirnamerinforrrrzradd) base_namebase_dircompressverbosedry_runrrloggertar_compressionr compress_ext archive_name archive_dirrtarr&rr' _make_tarballUs>          r*c Csnddl}|d}tj|}|rNtj|sN|dk r@|d||sNt||dk rd|d|||sj|j|d|jd}tj |} | tj kr| | | |dk r|d| t |D]\} } } t | D]:} tj tj| | } | | | |dk r|d| q| D]L} tj tj| | } tj| r| | | |dk r|d| qqW5QRX|S)Nr.zipr z#creating '%s' and adding '%s' to itw) compressionz adding '%s')zipfiler=r`rrrrZipFile ZIP_DEFLATEDnormpathcurdirrMwalksortedrisfile)rr r"r#r$r. zip_filenamer(zfr`dirpathdirnames filenamesr/r&r&r' _make_zipfilesH           r;r))r!Nzuncompressed tar file)r!rzgzip'ed tar-filegztarzZIP filezip)r!rzbzip2'ed tar-fileZbztar)r!r zxz'ed tar-fileZxztarcCsddtD}||S)NcSsg|]\}}||dfqS)rr&)rr/registryr&r&r'rsz'get_archive_formats..)_ARCHIVE_FORMATSitemssortformatsr&r&r'rs rcCst|dkr g}t|s td|t|ttfs6td|D]&}t|ttfrXt|dkr:tdq:|||ft|<dS)NzThe %s object is not callablez!extra_args needs to be a sequencerz+extra_args elements are : (arg_name, value))callable TypeErrorr]tuplerlenr?)r/function extra_args descriptionelementr&r&r'rs   cCs t|=dSr+)r?rr&r&r'rsc  Cstd||||t} |dk rP|dk r6|d|tj|}|sPt||dkr^tj}||d} z t |} Wn"t k rt d|dYnX| d} | dD]\} }|| | <q|dkr|| d<|| d <z| ||f| }W5|dk r|dk r|d | t| X|S) Nzshutil.make_archivezchanging into '%s')r#r$zunknown archive format '%s'rr=rrzchanging back to '%s') r@rrr=getcwddebugr`rcchdirr2r?rr)rrsroot_dirr r"r#rrr$save_cwdr format_infofuncargvalr0r&r&r'rs8          cCsddtD}||S)NcSs"g|]\}}||d|dfqS)rr&)rr/rr&r&r'r3sz&get_unpack_formats..)_UNPACK_FORMATSr@rArBr&r&r'r-s c Csji}tD]\}}|dD] }|||<qq |D]$}||kr0d}t||||fq0t|sftddS)Nrz!%s is already registered for "%s"z*The registered function must be a callable)rWr@r)rDrE) extensionsrHrIexisting_extensionsr/rext extensionmsgr&r&r'_check_unpack_options8s   r]cCs,|dkr g}t|||||||ft|<dSr+)r]rW)r/rXrHrIrJr&r&r'rJs cCs t|=dSr+)rWrr&r&r'r`scCs&tj|}tj|s"t|dSr+)r=r`rrr)r`rr&r&r'_ensure_directoryds  r^c Csddl}||std|||}z|D]}|j}|ds2d|krPq2tj j |f| d}|snq2t || ds2||j}t|d}z||W5|~Xq2W5|XdS)Nrz%s is not a zip file/z..rq)r. is_zipfiler(r/rinfolistr0rr=r`rsplitr^rrXrzrM) r0 extract_dirr.r=rr/targetdatafr&r&r'_unpack_zipfilejs*        rgcCsXddl}z||}Wn"|jk r8td|YnXz||W5|XdS)Nrz/%s is not a compressed or uncompressed tar file)rrzTarErrorr(r extractall)r0rcrtarobjr&r&r'_unpack_tarfiles rkr r+)r)r=z.tar.gzz.tgzz.tar.bz2z.tbz2z.tar.xzz.txzcCs:tD],\}}|dD]}||r|SqqdS)Nr)rWr@r)r0r/rr[r&r&r'_find_unpack_formats   rlcCstd||||dkr t}t|}t|}|dk rz t|}Wn$tk rltd|dYnX|d}|||ft |dnHt |}|dkrt d|t|d}t t|d}|||f|dS)Nzshutil.unpack_archivezUnknown unpack format '{0}'rLrzUnknown archive format '{0}') r@rrr=rMrrWrrrsdictrlr()r0rcrsrRrSrr&r&r'rs$    statvfs disk_usageusageztotal used freezTotal space in byteszUsed space in byteszFree space in bytescCs@t|}|j|j}|j|j}|j|j|j}t|||Sr+)r=rnf_bavailf_frsizef_blocksf_bfree_ntuple_diskusage)r`rfreetotalusedr&r&r'ros    cCs"t|\}}||}t|||Sr+)rZ _getdiskusageru)r`rwrvrxr&r&r'roscCstd||||dkr(|dkr(td|}|}|dkr>d}n(t|trft|}|dkrftd||dkrtd}n(t|tst |}|dkrtd|t |||dS)Nz shutil.chownzuser and/or group must be setzno such user: {!r}zno such group: {!r}) r@rrrr]rr LookupErrorrsintrr=r)r`userr_user_groupr&r&r'rs$  Pc Cszttjd}Wnttfk r.d}YnXzttjd}Wnttfk r^d}YnX|dksp|dkrzttj}Wn$t tt fk rt |}YnX|dkr|j }|dkr|j }t ||fS)NCOLUMNSrLINES)r{r=environrrr r@ __stdout__r,AttributeErrorr. terminal_sizecolumnslines)fallbackrrsizer&r&r'r s$  cCs&tj|o$t||o$tj| Sr+)r=r`rrr)rirr&r&r' _access_checkQs rc stjrt|rSdStt}|dkrttjdd}|dkrtztd}Wnt t fk rrtj }YnX|s|dS|rt |}| t tj}nt|}| tj}tjdkrTtj}|rt |}||kr|d|tdpt}dd| tjD}|r dd|D}tfd d |Dr@g}nfd d|D}ng}t}|D]X} tj| } | |krd|| |D],} tj| | } t| |r| SqqddS) NPATHCS_PATHwin32rPATHEXTcSsg|] }|r|qSr&r&rrZr&r&r'rszwhich..cSsg|]}t|qSr&)r=fsencoderr&r&r'rsc3s |]}|VqdSr+)lowerrrcmdr&r' szwhich..csg|] }|qSr&r&rrr&r'rs)r=r`rrr]rrgetconfstrrrdefpathrrbpathseprr@rr2insertgetenv_WIN_DEFAULT_PATHEXTanyrrbrr) rrr` use_bytesr2pathext_sourcepathextfilesseendirnormdirthefiler/r&rr'rVsV              )r)F)FN)rrrNNN)rrN)Nr)NNrrNNN)Nr)NN)NN)r)jr=r@rar collectionsr2zlibr ImportErrorr rZlzmarpwdrgrprr/rwrrrWr_rrrDr{r__all__r.rr!rrr(r-r)r*r;rKrVr rgrjrmr r rr r rrrr stat_resultrrrrrzrrsupports_dir_fdr supports_fdrrravoids_symlink_attacksrrrrrrr*r;r?rrrrrr]rrr^rgrkrWrlrr namedtuplerurw__doc__rxrvrorr rF_OKX_OKrr&r&r&r'sr          @  7 B A . 4   > ?    A -   8  "      *       1