B t `f@snddddddddgZdd lZdd lZdd lZdd lZd Zd Zd Zd Zd Z ydd l Z d ZWn YnXydd l Z d ZWn YnXydd l Z d ZWn YnXydd l Z d Z Wn YnXd ZyeZWnek rYnXd dZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZd S)ArchiveReaderFactory ArchiveReaderZipArchiveReaderTarArchiveReaderDirArchiveReaderFileArchiveReaderGzipFileArchiveReaderBZ2FileArchiveReaderN/FTcKstjt|s0td|dt|dt|rFt|f|Str`t |r`t |f|St rzt |rzt |f|Strt|rt|f|Strt|rt|f|St|rt|f|Std|dS)NzCannot find file or directory `z' Path expanded to: ''zJArchiveReaderFactory was given an unrecognized archive type with name '%s')ospathexistsrnormalize_nameIOErrorisDirrzipfile_availableisZiprtarfile_availableisTarrgzip_available isGzipFiler bz2_available isBZ2FilerisFiler ValueError)dirnamekwdsr?/tmp/pip-unpacked-wheel-cqckmaqz/pyutilib/misc/archivereader.pyrDs"        c@seZdZeddZeddZeddZeddZed d Zed d Z ed dZ eddZ eddZ ddZ ddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd5d(d)Zd*d+Zd6d-d.Zd/d0Zd7d1d2Zed8d3d4Zd'S)9rcCstjt|S)N)r r isdirrr)namerrrr]szArchiveReader.isDircCs,ts tdytt|SdSdS)Nzzipfile support is disabledF)r ImportErrorzipfile is_zipfilerr)r!rrrras zArchiveReader.isZipcCsts tdtt|S)Nztarfile support is disabled)rr"tarfile is_tarfilerr)r!rrrrjszArchiveReader.isTarcCsNt|pt| r$tr$t|pLtr2t|pLtr@t|pLt oLt |S)N) rrrrrrrrrrr)r!rrrisArchivedFileps zArchiveReader.isArchivedFilecCsLts tdy&tt|}|d|Wntk rFdSXdS)Nzgzip support is disabledFT) rr"gzipGzipFilerrreadcloser)r!frrrrxs  zArchiveReader.isGzipFilecCs^ts tdy&tt|}|d|Wn&tk rFdSt k rXdSXdS)Nzbz2 support is disabledr(FT) rr"bz2BZ2Filerrr+r,rEOFError)r!r-rrrrs  zArchiveReader.isBZ2FilecCstjt|S)N)r r isfilerr)r!rrrrszArchiveReader.isFilecCsD|dk r@tj|}tj|s,tj|}t|}t|SdS)z9Turns the given file name into a normalized absolute pathN) r r expanduserisabsabspathr _posix_name posixpathnormpath)filenamerrrrs     zArchiveReader.normalize_namecCs|dk r|ddSdS)N\r )replace)r8rrrr5szArchiveReader._posix_namecs"|}tj|s&td|dtj|_tj|_|_ | dd}|dk rl| dkrld}| dd}| dd_ |dk rt t|tnd_|_jdk rʈjdkrtdg_t_t_d_t_j||j dk rfd d jD_dS) Nzcannot find file or directory `r subdirmaxdepthfilterr zmaxdepth must be >= 0csg|]}|s|qSr)_filter).0_f)selfrr sz*ArchiveReader.__init__..)rr r rrr_abspathbasename _basename _archive_namepopstripr?r6r7rr5_sep_subdir _maxdepthr _names_listset_artificial_dirs _extractions_handlertempfilemkdtemp_workdir_init)rBr!argsrZ posixabsnamer;r=r)rBr__init__s0    "   zArchiveReader.__init__cCs|jS)N)rG)rBrrrr!szArchiveReader.namecCs|jS)N)rT)rBrrrgetExtractionDirszArchiveReader.getExtractionDircCs|S)Nr)rBrrr __enter__szArchiveReader.__enter__cCs |dS)N)r,)rBtypevalue tracebackrrr__exit__szArchiveReader.__exit__cCsD|jdk r|j|jdk r:tj|jr:t|jdd|_dS)NT)rQr,rTr r rshutilrmtree)rBrrrr,s    zArchiveReader.closecCsx0|jD]&}tj|rtj|st|qW|j|jdk rtj|jrxdt|jD]T\}}}x$t |rt t ||dqnWx"t |rtt ||qWqbWdS)NT)rPr r rr removeclearrTwalklenr^r_r6joinrH)rBr!rootdirsfilesrrrclear_extractionss       zArchiveReader.clear_extractionscCs|jS)N)rM)rBrrrgetnamesszArchiveReader.getnamescCs ||jkS)N)rM)rBr!rrrcontainsszArchiveReader.containscCs,||}|dkr*t|jdkr*tdn2|dkrJt|jdkrJtdn|dkr\|jd}||jkrnd|fS||s |t}|jdks|t|jdkrx8|j D].}| |r|j ||j |d|fSqWd||j f}|jdk r|d|j7}t||jdkr|n|j|}||fS)Nr zThe archive is empty!r(zEA name argument is required when the archive has more than one memberz-There is no item named '%s' in the archive %sz, subdirectory: )r5rcrMKeyErrorrOrjrJrLcount_fulldepth_names_list startswithaddappendrFrK)rBr!Z checknameZ othernamemsgabsnamerrr_validate_names2              zArchiveReader._validate_nameNcOs"||\}}|j||f||S)N)rs_openImp)rBr!rVrrrrelnamerrropenszArchiveReader.opencOs tddS)Nz$This method has not been implemented)NotImplementedError)rBr!rVrrrrrt szArchiveReader._openImpFc Os\||\}}|j||||f||\}} |j||sLt| dksXtn |j| |S)Nr )rs _extractImprProrcAssertionErrorupdate) rBmemberr recursiverVr absolute_name relative_namedstchildrenrrrextract#s   zArchiveReader.extractcOs tddS)Nz$This method has not been implemented)rw)rBr}r~r r|rVrrrrrx.szArchiveReader._extractImpc Osd}|dk rt|}n t|j}t|t|jkr6d}g}x|r||\}} |j|| ||f||\} } |st| dkst|| |j | t| r<|j | |t| }q.r csg|]}|r|qSr)rn)r@r!)r;rrrC}scs"g|]}|tkr|qSr)rlrJ)r@r!)r= subdir_depthrrrCscsg|]}|dqS)r<)r:)r@r!)r;rrrCscsg|]}|dqS)r<)r:)r@r!)r;rrrCs)rlrJlist)rr;r= names_listZfulldepth_names_listr)r=r;rr _fixnamesxs   z_ziptar_base._fixnamescsd}|dkr(d}|jdkrn|j}t|j|}|rzy|j||jWqtk rv|j|t|jYqXntj |st ||}|dk r"t|}tj |r|j ||ddnZtj tj |st tj |yt||Wn"tk r t||YnXg}tj |r|rfdd|jD} | krb| xL| D]D} || \} } || | |d\} }t|dkst|| qhW||fS)NTFr )r=csg|]}|r|qSr)rn)r@ru)r~rrrCsz,_ziptar_base._extractImp..)rKr6rdrTrQrrkrJr r rrr rrrenameOSErrorr^rrMr`rsrxrcryrp)rBr}r~r r|Z use_handlerZtmp_dstrrZ new_namesZ childnameZabsolute_childnameZrelative_childnameZchilddstZ recursivesr)r~rrxsH         z_ziptar_base._extractImpN)rrrrrrxrrrrrvs rc@seZdZddZddZdS)rcOstdkrtd|jdk st|jdk s,t|jdk s:t||jsTtd|jtj|jf|||_ | |j |j |j \|_|_|_dS)Nzzipfile support is disabledz(Unrecognized zipfile format for file: %s)r#r"rDryrFrGr TypeErrorZipFilerQrnamelistrKrLrMrm _subdir_depth)rBrVrrrrrUs  zZipArchiveReader._initcOsNd}y$|dkrt|jj|f||}Wn tk rHtd|YnX|S)Nz9Failed to open with zipfile, this must be a directory: %s)rkrQrvr)rBr}r~rVrr-rrrrtszZipArchiveReader._openImpN)rrrrUrtrrrrrsc@seZdZddZddZdS)rcOsts td|jdk st|jdk s(t|jdk s6t||jsPtd|jtj |jf|||_ | |j |j |j\|_|_|_dS)Nztarfile support is disabledz(Unrecognized tarfile format for file: %s)rr"rDryrFrGrrr%rvrQrrirKrLrMrmr)rBrVrrrrrUs  zTarArchiveReader._initcOs8d}|dk r |jj|f||}|dkr4td||S)Nz9Failed to open with tarfile, this must be a directory: %s)rQ extractfiler)rBr}r~rVrr-rrrrtszTarArchiveReader._openImpN)rrrrUrtrrrrrsc@s2eZdZddZed ddZddZdd ZdS) rcOs|jdk st|jdk st|jdk s*t|rRtdt|jdt| f|rrtdt|jd|f| |jst d|j|j}|j dk rt ||j }tj|std|j |jf|j||jdd|_n|j||jd|_|||_dS)Nz=Unexpected keyword options found while initializing '%s': %s,z7Unexpected arguments found while initializing '%s': %sz&Path not recognized as a directory: %sz7Subdirectory '%s' does not exists in root directory: %sr()r=)rDryrFrGrrZrrdsortedkeysrrrKr6r r rr_walkrLrMrm)rBrVrrootdirrrrrUs.    zDirArchiveReader._initNc Csg}xtj|ddD]\}}}tt||}|trF|dd}|dkrRd}x|D]}|t ||qXW|dk r| t|krqx|D]}|t ||qWqW|S)NT)topdown.r<) r rbr6relpathrr5endswithrJrprdrl) rr=rrerfrgprefixZdnamefnamerrrr s    zDirArchiveReader._walkc Cs|dk s t|dk r"t||}nt|j|}t|j|}g}tj|r|rg}xF||D]8} t|| } | |j kr| | qb| t|| qbW|j |||dqtj |st |n0tj t|st tj|t||||fS)N)r)ryr6rdrTrGr r r rrMrprrrrr^r) rBr}r~r r|rrrrchildrnamerrrrx1s*        zDirArchiveReader._extractImpcOs(|dk s ttt|j|df||S)Nrb)ryrvr6rdrG)rBr}r~rVrrrrrtQs zDirArchiveReader._openImp)N)rrrrUrrrxrtrrrrrs   c@s0eZdZeZddZddZddZddZd S) rcCs|S)Nr)rBr!rrr _extract_name\szFileArchiveReader._extract_namecCs|jdk st|jdk st|jdk s*t|jdk rFtdt|j|jdk rbtdt|j| |js|t d|j| |j}|dk r|g|_ |g|_ ||_ n|jg|_ |jg|_ d|_ dS)Nz.'subdir' keyword option is not handled by '%s'z0'maxdepth' keyword option is not handled by '%s'z!Path does not point to a file: %s)rDryrFrGrKrrZrrLrrrrMrm)rBZ extract_namerrrrU_s(       zFileArchiveReader._initc Cs||jkst||jkst|r(td|dk r>t||}nt|j|}t|d(}||jd}t ||| WdQRX|gfS)NzJRecursive extraction does not make sense for compressed file archive typeswbr) rryrr6rdrTrv_handler_classrGr^ copyfileobjr,)rBr}r~r r|rZdstfhandlerrrrrxxs  zFileArchiveReader._extractImpcOs$||jkst|j|jdf||S)Nr)rryrrG)rBr}r~rVrrrrrtszFileArchiveReader._openImpN) rrrrvrrrUrxrtrrrrrXs cs:eZdZerejndZddZfddZddZ Z S)rNcCs&tj|\}}||jkr|SdSdS)N)r r splitext_suffix)rBr!rEextrrrrs z#GzipFileArchiveReader._extract_namecsJts td|dd|_tt|j||||jsFt d|jdS)Nzgzip support is disabledsuffixz.gzz%Unrecognized gzip format for file: %s) rr"rHrsuperrrWrrGr)rBrVr) __class__rrrWs zGzipFileArchiveReader.__init__cCs<|jdkr*tdtj|jd|jft|||||S)NzExtraction disabled. File suffix %s does not match expected suffix for compression type %s. The default suffix can be changed by passing 'suffix=.' into the ArchiveReader constructor.r() rrr r rrFrrrx)rBr}r~r r|rrrrxs   z!GzipFileArchiveReader._extractImp) rrrrr)r*rrrWrx __classcell__rr)rrrs cs2eZdZerejndZddZfddZZ S)rNcCs8tj|\}}|dkr|S|dkr,|dS|dSdS)N)z.bz2z.bz)z.tbz2z.tbzz.tarz.out)r r r)rBr!rErrrrrs z"BZ2FileArchiveReader._extract_namecs<ts tdtt|j||||js8td|jdS)Nzbz2 support is disabledz&Unrecognized bzip2 format for file: %s)rr"rrrWrrGr)rBrVr)rrrrWs  zBZ2FileArchiveReader.__init__) rrrrr.r/rrrWrrr)rrrs )__all__r rRr^r6rJrrrrr#r%r)r.rZ WindowsError NameErrorrobjectrrrrrrrrrrrr s^MY6!