U e5dV@s ddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZzddlZejZWnek rdZejZYnXz ddlZWnek rdZYnXz ddlZWnek rdZYnXdddddddd d d d d dg ZGdddeZGdd d eZeZZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'e (e&Z)dZ*dZ+dZ,dZ-dZ.d Z/d!Z0d"Z1dZ2d#Z3d$Z4d%Z5e (e4Z6dZ7dZ8dZ9dZ:dZ;d ZdZ?d#Z@d&ZAd'ZBdZCd(ZDdZEd)ZFd*ZGd+ZHd,ZId-ZJd.ZKe (eJZLdZMdZNdZOdZPdZQd ZRd!ZSd"ZTdZUd#ZVd&ZWd'ZXd/ZYd0ZZe (eYZ[d1Z\d2Z]e (e\Z^dZ_dZ`dZadZbdZcd Zdd!Zed"ZfdZgd#Zhd3Zie jd4Zkd5d6Zld7d8Zmd9d Znd:d;Zodd d eqZrdasd?d@ZtdAdBZuGdCdDdDZvGdEdFdFZwdGdHdIdIdIdIdJdKdLdMdJdNdOdPdQdRdSdTZxdUdVZydsdWdXZzdYdZZ{Gd[d\d\Z|Gd]d^d^Z}Gd_d`d`ej~ZGdadbdbej~ZGdcd d ZGddd d eZdedfZdgdhZejZdidjZGdkdldleZGdmdndneZGdoddZdtdpdqZedrkredS)uN BadZipFile BadZipfileerror ZIP_STORED ZIP_DEFLATED ZIP_BZIP2ZIP_LZMA is_zipfileZipInfoZipFile PyZipFile LargeZipFilePathc@s eZdZdS)rN__name__ __module__ __qualname__rr/usr/lib64/python3.8/zipfile.pyr+sc@s eZdZdS)r Nrrrrrr /si -.?s<4s4H2LHsPK z<4s4B4HL2L5H2LsPK z <4s2B4HL2L2HsPKz<4sLQLsPKz <4sQ2H2L4QsPKiPKr0structr/structEndArchive64LocatorstringEndArchive64LocatorrsizeEndCentDir64structEndArchive64stringEndArchive64_ECD_SIGNATURE_ECD_DISK_NUMBER_ECD_DISK_START_ECD_ENTRIES_THIS_DISK_ECD_ENTRIES_TOTAL _ECD_SIZE _ECD_OFFSET)fpinoffsetendrecdataZsigZdisknoZreloffZdisksZszcreate_versionZ read_versionZdisk_numZdisk_dirZdircountZ dircount2ZdirsizeZ diroffsetrrr _EndRecData64s@      rXc Csh|dd|}z|t dWntk r<YdSX|}t|tkr|ddtkr|dddkrtt |}t |}| d| |tt |t |St |dtd}||d|}|t}|dkrd|||t}t|tkrdSt tt |}|t}||t|t|}| || ||t |||||SdS)Nrrr sr-i)rDtellsizeEndCentDirr:r>r0stringEndArchiverFr/structEndArchivelistr1rXmaxrfind_ECD_COMMENT_SIZE) rSZfilesizerVrUZmaxCommentStartr5ZrecDataZ commentSizecommentrrrr9sD        r9c@sXeZdZdZdddZddZdd d Zd d Zd dZe dddddZ ddZ dS)r ) orig_filenamerB date_time compress_type_compresslevelrbr3 create_systemrWextract_versionreserved flag_bitsvolume internal_attr external_attr header_offsetCRC compress_size file_size _raw_timeNoNamerrrrrcCs||_|td}|dkr(|d|}tjdkrJtj|krJ|tjd}||_||_|ddkrjtdt |_ d|_ d|_ d|_ tjdkrd|_nd|_t|_t|_d|_d|_d|_d|_d|_dS)Nr/ruz+ZIP does not support timestamps before 1980r-Zwin32r)rcfindchrossepreplacerBrd ValueErrorrrerfrbr3sysplatformrgDEFAULT_VERSIONrWrhrirjrkrlrm)selfrBrdZ null_byterrr__init__Xs0   zZipInfo.__init__cCsd|jj|jfg}|jtkr8|dt|j|j|jd?}|jd@}|rd|dt ||rv|d|| }|r|j r|d|j |r|j r|jtks|j |j kr|d|j |d d |S) Nz<%s filename=%r compress_type=%sr)rz filemode=%rz external_attr=%#xz file_size=%rz compress_size=%r>) __class__rrBrerr1compressor_namesgetrmstatfilemodeis_dirrqrpr2)rrChiloisdirrrr__repr__s0       zZipInfo.__repr__NcCs||j}|ddd>|dd>B|dB}|dd>|d d>B|ddB}|jd @rfd}}}n|j}|j}|j}|j}d} |dkr|tkp|tk}|rd } |t| dt | d ||}|tks|tkr|st d d }d }t } |j t krtt| } n|j tkrtt| } t| |j|_t| |j|_|\} } ttt|j|j| |j |||||t| t| } | | |S)Nrrur$rr!rrr&r rz|jd|jdBfYSXdS)Nasciiutf-8)rBencoderjUnicodeEncodeErrorrrrrrszZipInfo._encodeFilenameFlagscCs|j}tj}t|dkr|d|dd\}}|dt|krPtd||f|dkrp|dkrv|d|dd}nV|dkr|d |dd }n:|d kr|d |dd }n|dkrd}ntd||fd}|jdkrt||krtd|||_|d7}|jdkr6t||kr$td|||_|d7}|jdkrpt||krXtd|j}|||_|d7}||dd}q dS)Nr r,z"Corrupt extra field %04x (size=%d)rz|_|rd|_|jd O_n|j|_|S) Nrr"rurt;)rr;rrrvrr)) isinstanceryPathLikefspathrS_ISDIRst_modetime localtimest_mtimepathnormpath splitdriverzaltseprmrqst_size) clsrBarcnamerstrmtimerdzinforrr from_files0       zZipInfo.from_filecCs|jddkS)NrvrBrrrrr%szZipInfo.is_dir)rsrt)N)N) rrr __slots__rrrrr classmethodrrrrrrr >s + .2%cCs0tdD]"}|d@r"|d?dA}q|dL}q|S)Nrrl q[)range)crcr7rrr_gen_crc/s   rcsldddtdkr&ttttdatfddfdd|D] }|qLfd d }|S) NixV4igE#ixV4cs|d?||Ad@AS)Nrr)Zchr)crctablerrcrc32Isz_ZipDecrypter..crc32cs<|d@d@ddd@d?dS)Nrrirrr)c)rkey0key1key2rr update_keysMs z"_ZipDecrypter..update_keyscsNt}|j}|D]4}dB}|||dAd?d@N}|||qt|S)Nrrrr) bytearrayr1bytes)rVrCr1rk)rrrr decrypterWs z _ZipDecrypter..decrypter) _crctabler^maprr)pwdprr)rrrrrrr _ZipDecrypter?s   rc@s,eZdZddZddZddZddZd S) LZMACompressorcCs d|_dSN)_comprrrrrgszLZMACompressor.__init__cCsFtdtji}tjtjttj|gd|_tdddt ||S)Nidfiltersz|rtd|j|||j|_|jW5QRSQRXdS)Nz}Can't reposition in the ZIP file while there is an open writing handle on it. Close the writing handle before trying to read.)rrr|rrDrZr)rrTwhencerrrrDs  z_SharedFile.seekrc CsX|jH|rtd|j|j|j|}|j|_|W5QRSQRXdS)NyCan't read from the ZIP file while there is an open writing handle on it. Close the writing handle before trying to read.)rrr|rrDrr>rZrnrVrrrr>s  z_SharedFile.readcCs$|jdk r |j}d|_||dSr)rr)rfileobjrrrr s z_SharedFile.closeN)r)r)rrrrrDr>r rrrrrs rc@s4eZdZddZddZddZddZd d Zd S) _TellablecCs||_d|_dSNr)r<rTrr<rrrrsz_Tellable.__init__cCs|j|}|j|7_|Sr)r<writerT)rrVrrrrr s z_Tellable.writecCs|jSr)rTrrrrrZsz_Tellable.tellcCs|jdSr)r<rrrrrrsz_Tellable.flushcCs|jdSr)r<r rrrrr sz_Tellable.closeN)rrrrrrZrr rrrrrs rcseZdZdZdZdZd'ddZdd Zd d Zd(d dZ d)ddZ ddZ d*ddZ ddZ ddZddZddZfddZd d!Zd+d#d$Zd%d&ZZS), ZipExtFilei@iiNFcCs(||_||_||_|j|_|j|_|j|_t |j|_ d|_ d|_ d|_ d|_||_|j|_t|drz|j|_td|_nd|_d|_z4|r||_|j|_|j|_|j|_d|_Wntk rYnXd|_|r$|j d@r|j!d?d@}n|jd?d@}|"}||kr$t#d |j$dS) NFr-rroTrrrzBad password for file %r)%_fileobj_pwd_close_fileobjre_compress_typerp_compress_leftrq_leftr _decompressor_eof _readbuffer_offsetnewlinesmoderBnamer@ro _expected_crcr _running_crc _seekablerrZ_orig_compress_start_orig_compress_size_orig_file_size_orig_start_crcAttributeError _decrypterrjrr_init_decrypterrrc)rrr zipinforZ close_fileobjZ check_bytehrrrr)sF       zZipExtFile.__init__cCs4t|j|_|jd}|jd8_||dS)Nrr&)rrr*rr>r)rrrrrr+\s  zZipExtFile._init_decryptercCsvd|jj|jjfg}|jsX|d|j|jf|jtkrb|dt |j|jn |d|dd |S)N<%s.%sz name=%r mode=%rr [closed]rr) rrrclosedr1r!r rrrrr2rrCrrrrgs   zZipExtFile.__repr__rcCsL|dkr>|jd|jd}|dkr>|j|j|}||_|Stj||S)Nr r)rrwrioBufferedIOBasereadline)rlimitr6linerrrr5uszZipExtFile.readlinercCsr|t|j|jkr\||}t||jkrJ||j|jd|_d|_n|jt|8_|j|j|jdS)Nri)r0rrr>)rrchunkrrrpeeks zZipExtFile.peekcCsdSNTrrrrrreadableszZipExtFile.readablecCs|dks|dkrH|j|jd}d|_d|_|jsD|||j7}q,|S||j}|t|jkrz|j|j|}||_|S|t|j}|j|jd}d|_d|_|dkr|js||}|t|kr||_||_||d|7}q||7}|t|8}q|SNrr-rrr_read1MAX_Nr0)rrbufendrVrrrr>s4   zZipExtFile.readcCs@|jdkrdSt||j|_|jr<|j|jkr     zZipExtFile.read1cCs"|js|dkrdS|jtkrH|jj}|t|krR|||t|7}n ||}|jtkrj|jdk|_nx|jtkrt ||j }|j ||}|jj p|jdko|jj |_|jr||j 7}n |j |}|jj p|jdk|_|d|j}|jt|8_|jdkrd|_|||S)Nrr-T)rrrrZunconsumed_tailr0_read2rrr_ MIN_READ_SIZErrrrrCr rrrr>s4          zZipExtFile._read1cCsd|jdkrdSt||j}t||j}|j|}|jt|8_|sLt|jdk r`||}|Sr<) rr_rFminrr>r0EOFErrorr*r rrrrE s      zZipExtFile._read2cs&z|jr|jW5tXdSr)superr rrrrrrr szZipExtFile.closecCs|jSr)r$rrrrr szZipExtFile.seekablercCs>|jstd|}|dkr&|}n.|dkr8||}n|dkrL|j|}ntd||jkrd|j}|dkrpd}||}||j}|dkr|t|jkr||_d}nf|dkr |j |j |j |_ |j|_|j|_d|_d|_t|j|_d|_|}|jdk r ||dkr6t|j|}||||8}q |S)N!underlying stream is not seekablerrrzCwhence must be os.SEEK_SET (0), os.SEEK_CUR (1), or os.SEEK_END (2)r-F)r$r3UnsupportedOperationrZr'r|rr0rrrDr%r(r#r&rrrrrrr*r+rG MAX_SEEK_READr>)rrTr Zcurr_posZnew_posZ read_offsetZ buff_offsetZread_lenrrrrD#sH            zZipExtFile.seekcCs0|jstd|j|jt|j|j}|S)NrK)r$r3rLr'rr0rr)rZfileposrrrrZSs zZipExtFile.tell)NF)r)r)r)r)rrrr?rFrMrr+rr5r9r;r>rCrDr>rEr rrDrZ __classcell__rrrJrrs( 3    ! %$  0rcs@eZdZddZeddZddZddZfd d ZZ S) _ZipWriteFilecCs8||_||_||_t|j|j|_d|_d|_d|_ dSr) _zinfo_zip64_zipfilerrerf _compressor _file_size_compress_size_crc)rzfrrrrrr[sz_ZipWriteFile.__init__cCs|jjSr)rRr<rrrrresz_ZipWriteFile._fileobjcCsdSr:rrrrrwritableisz_ZipWriteFile.writablecCsf|jrtdt|}|j|7_t||j|_|jrV|j|}|jt|7_|j ||S)NzI/O operation on closed file.) r0r|r0rTrrVrSrrUrr)rrVnbytesrrrrls  z_ZipWriteFile.writec sb|jr dSzFt|jrR|j}|jt|7_|j ||j|j _ n |j |j _ |j|j _|j |j _|j jd@r|jrdnd}|j t|t|j j|j j |j j|j |j_nn|js|j tkrtd|jtkrtd|j |j_|j |j j|j |j |j|j |jj|jj|j |j |jj|j j <W5d|j_XdS)NFrzd d!d"d#Zd?d$d%Zd@d&d'ZdAd(d)Zed*d+Zd,d-Zd.d/ZdBd0d1ZdCd2d3Zd4d5Zd6d7Z d8d9Z!d:d;Z"dS)Dr NrTrc CsP|dkrtdt|||_d|_d|_i|_g|_||_||_||_ d|_ d|_ ||_ t |tjrpt|}t |trd|_||_dddd dd d d }||}zt|||_Wqtk r||kr||}YqYqXqqnd |_||_t|dd|_d |_t|_d|_d|_z|dkr4|n|dkrd|_z|j |_!Wn2t"tfk rt#|j|_d|_!d|_Yn6Xz|j$|j!Wn t"tfk rd|_YnXnf|dkrz||j$|j!Wn6t%k r|j$ddd|_|j |_!YnXntdWn$|j} d|_|&| YnXdS)N)r_wxaz+ZipFile requires mode 'r', 'w', 'x', or 'a'Frr-r?w+bx+br+bwbZxb)r_r`rarbrercrdrr!Tr_)r`rarbrz"Mode must be 'r', 'w', 'x', or 'a')'r|r _allowZip64 _didModifydebugr]r\rrr r_comment_strict_timestampsrryrrstr _filePassedrBr3rAr<r:getattr _fileRefCnt threadingRLockrr$r_RealGetContentsrZr[r)rrDr_fpclose) rrr r allowZip64rrZmodeDictrr<rrrrs            zZipFile.__init__cCs|Srrrrrr __enter__szZipFile.__enter__cCs |dSrr )rtypevalue tracebackrrr__exit__szZipFile.__exit__cCsd|jj|jjfg}|jdk rd|jr8|d|jn|jdk rR|d|j|d|jn |d|dd|S)Nr.z file=%rz filename=%rz mode=%rr/rr) rrrr<rmr1rBr r2r1rrrr"s    zZipFile.__repr__c Cs|j}z t|}Wntk r.tdYnX|sr3BytesIOsizeCentralDirr0rFr/structCentralDir _CD_SIGNATUREstringCentralDir_CD_FILENAME_LENGTHdecoder _CD_EXTRA_FIELD_LENGTHr3_CD_COMMENT_LENGTHrb_CD_LOCAL_HEADER_OFFSETrnrWrgrhrirjrerorprqMAX_EXTRACT_VERSIONrrkrlrmrrrdrr\r1r]rB)rr<rUZsize_cdZ offset_cdconcatZinferredrVr|centdirrBflagsratdrrrrr0s                        zZipFile._RealGetContentscCsdd|jDS)NcSsg|] }|jqSrr).0rVrrr sz$ZipFile.namelist..r\rrrrnamelist~szZipFile.namelistcCs|jSrrrrrrinfolistszZipFile.infolistcCsLtdd|d|jD]0}d|jdd}td|j||jf|dqdS)Nz%-46s %19s %12s)z File Namez Modified ZSizerz%d-%02d-%02d %02d:%02d:%02dr"z %-46s %s %12d)r}r\rdrBrq)rrrdaterrrprintdirs zZipFile.printdirc Cs^d}|jD]N}z*||jd}||r,q W5QRXWq tk rV|jYSXq dS)Nir_)r\rArBr>r)rZ chunk_sizerfrrrtestzips  zZipFile.testzipcCs$|j|}|dkr td||S)Nz(There is no item named %r in the archive)r]rKeyError)rr!inforrrgetinfos  zZipFile.getinfocCs6|r t|ts tdt|j|r,||_nd|_dS)Npwd: expected bytes, got %s)rr TypeErrorrwrr)rrrrr setpasswords zZipFile.setpasswordcCs|jSr)rjrrrrrbszZipFile.commentcCs^t|tstdt|jt|tkrNddl}|jdtdd|dt}||_ d|_ dS)Nzcomment: expected bytes, got %srz3Archive comment is too long; truncating to %d bytesr stacklevelT) rrrrwrr0ZIP_MAX_COMMENTwarningswarnrjrh)rrbrrrrrbs   c Cs.||d|}|W5QRSQRXdSNr_rAr>)rr!rr<rrrr>sz ZipFile.readF force_zip64c s|dkrtd|r0t|ts0tdt|j|rD|dkrDtdjsRtdt|trb|}n,|dkrt|}j|_ j |_ n |}|dkrj ||dSjrtdjd 7_tj|jjjfd d }z|t}t|tkrtd tt|}|ttkr&td ||t}|trL||t|jd@r`t d|jd@rtt d|t!d@r|"d} n |"d} | |j#krtd|j#|f|jd @} | r|s҈j$}|st%d|nd}t&||||dWS|'YnXdS)N>r`r_zopen() requires mode "r" or "w"rr`z'pwd is only supported for reading filesz2Attempt to use ZIP archive that was already closedrr rcsjSr)rrrrrr-zZipFile.open..zTruncated file headerz Bad magic number for file header z$compressed patched data (flag bit 5)@zstrong encryption (flag bit 6)rrr{z/File name in directory %r and header %r differ.z6File %r is encrypted, password required for extractionT)(r|rrrrwrr<r rrerrfr_open_to_writerrorrnrsrr>sizeFileHeaderr0rrFr/r _FH_SIGNATUREr_FH_FILENAME_LENGTH_FH_EXTRA_FIELD_LENGTHrjr_FH_GENERAL_PURPOSE_FLAG_BITSrrcrrrr ) rr!r rrrZzef_fileZfheaderfnameZ fname_strZ is_encryptedrrrrAs~               z ZipFile.opencCs|r|jstd|jr tdt|ds0d|_d|_d|_d|_|jt krZ|jdO_|j sn|jdO_|j szd|_ |jo|p|jdt k}|j r|j |j|j |_||d |_|j ||d |_t|||S) NzHforce_zip64 is True, but allowZip64 was False when opening the ZIP file.zzCan't write to the ZIP file while there is another write handle open on it. Close the first handle before opening another.rqrrrg?T)rgr|rr@rqrprorjrerr$rmrr<rDr[rZrn _writecheckrhrrrO)rrrrrrrr(s8     zZipFile._open_to_writecCs*|dkrt}n t|}||||Sr)rygetcwdr_extract_member)rmemberrrrrrextractSs  zZipFile.extractcCsH|dkr|}|dkr"t}n t|}|D]}||||q0dSr)rryrrr)rrmembersrr,rrr extractall`s  zZipFile.extractallcCs^|j}|s(d}t|dt|}||_||}dd||D}|dd|D}|S)Nz:<>|"?*_css|]}|dVqdS).N)rstriprrarrr {sz1ZipFile._sanitize_windows_name..css|]}|r|VqdSrrrrrrr}s)!_windows_illegal_name_trans_tablerl maketransr0 translatesplitr2)rrpathseptableZillegalrrr_sanitize_windows_nameqs zZipFile._sanitize_windows_namec sLt|ts||}|jdtjj}tjjrB|tjjtjj}tj |d}dtjj tjj ftjj fdd| tjjD}tjjdkr||tjj}tj ||}tj|}tj|}|rtj|st||r tj|st||S|j||d(}t|d}t||W5QRXW5QRX|S) Nrvrrc3s|]}|kr|VqdSrrrZinvalid_path_partsrrrsz*ZipFile._extract_member..\)rrf)rr rrBr{ryrrzrrcurdirpardirr2rrrdirnameexistsmakedirsrrmkdirrAshutil copyfileobj)rrZ targetpathrrZ upperdirssourcetargetrrrrs2  &       zZipFile._extract_membercCs|j|jkr(ddl}|jd|jdd|jdkr:td|jsHtdt|j|j sd}t |j t krpd}n|j tkrd }n|jtkrd }|rt|d dS) NrzDuplicate name: %rrrr`rarbz&write() requires mode 'w', 'x', or 'a'z4Attempt to write ZIP archive that was already closed Files countZFilesizez Zipfile size would require ZIP64 extensions)rBr]rrr r|r<rrergr0r\ZIP_FILECOUNT_LIMITrqrrnr )rrrrequires_zip64rrrrs,     zZipFile._writecheckc CsP|jstd|jrtdtj|||jd}|rDd|_d|_n0|dk rT||_ n|j |_ |dk rl||_ n|j |_ |r|j |jr|j|j|j|_|j tkr|jdO_||d|_|j|||j|j<|j|d|j|_W5QRXnCan't write to ZIP archive while an open writing handle existsrrrTFr?r`i ) r<r|rr rrkrrprorerrfrrr$rDr[rZrnrrjrrhr\r1r]rBrrrArr)rrBrrerrsrcdestrrrrsF      z ZipFile.writec Cst|tr|d}t|tsxt|ttddd}|j|_|j|_ |j ddkrpd|_ |j dO_ q|d|_ n|}|j st d |jrt d |dk r||_|dk r||_ t||_|j*|j|d d }||W5QRXW5QRXdS) Nrr")rBrdrrviAr)rrz?Can't write to ZIP archive while an open writing handle exists.r`)r )rrlrr rrrrerrfrBrmr<r|rr0rqrrAr)rZzinfo_or_arcnamerVrerrrrrrwritestrs:    zZipFile.writestrcCs |dSrrvrrrr__del__szZipFile.__del__c Cs||jdkrdS|jrtdzB|jdkr\|jr\|j"|jrJ|j|j | W5QRXW5|j}d|_||XdS)NzvCan't close the ZIP file while there is an open writing handle on it. Close the writing handle before closing the zip.r) r<rr|rsr rhrr$rDr[_write_end_recordrrrrr s z ZipFile.closecCs|jD]D}|j}|ddd>|dd>B|dB}|dd>|d d>B|ddB}g}|jtksr|jtkr||j||jd }d }n |j}|j}|jtkr||jd }n|j}|j} d} |r t| d } t j d d t |ddt |f|| } t } |j tkr$tt| } n|j tkr:tt| } t| |j} t| |j} zZ|\} }t tt| |j| |j||j |||j||t | t | t |jd|j|j|}Wnltk rttt| |j| |j|j |j |||j||t |j!t | t |jd|j|j|ft"j#dYnX|j$%||j$%| |j$%| |j$%|jq|j$&}t |j}||j'}|j'}d}|t(krd}n|tkrd}n|tkrd}|r$|j)st*|dt t+t,ddddd|||| }|j$%|t t-t.d|d}|j$%|t/|d}t/|d }t/|d }t t0t1dd||||t |j2 }|j$%||j$%|j2|j3dkrt|j$4|j$5dS)Nrrur$rr!rrr&r r)rr,QrrrzCentral directory offsetzCentral directory sizer,rrrb)6r\rdrqrrpr1rnr3r8rFrr0rrerr_rrrrhrWrrrrgrirorbrlrmDeprecationWarningr}rjrBr}stderrr<rrZr[rrgr rJrKrGrHrGr]r\rjr truncater)rrrrrr3rqrprnZ extra_datarrhrWrBrjrZpos2Z centDirCountZ centDirSizeZ centDirOffsetrZ zip64endrecZ zip64locrecrUrrrr5s $$                               zZipFile._write_end_recordcCs&|jd8_|js"|js"|dSNr)rormr rrrrrss zZipFile._fpclose)N)N)r_N)F)NN)NNN)NNN)NN)#rrrr<rrrrurzrrrrrrrrrr^rbsetterr>rArrrrrrrrrrr rrsrrrrr sR ZN      b +  * 2 )hc@s0eZdZdeddfddZd dd Zd d ZdS) r r_TrcCstj|||||d||_dS)N)r rrt)r r _optimize)rrr rrtoptimizerrrrs zPyZipFile.__init__rNcCst|}|rD||sD|jr@tj|r,dnd}td||fdStj|\}}tj|rhtj|d}tj|r|rd||f}n|}|jrtd|d|| |dd |\}} |jrtd | | || t t |} | d| D]} tj|| } tj| \} }tj| rRtjtj| dr|j| ||d q|d kr|r~|| s~|jrtd | q| | dd |\}} |jrtd | | || qn|jrtd|t t |D]} tj|| } tj| \} }|d kr|r,|| s,|jrtd | q| | dd |\}} |jrVtd | | || qnP|d dd krtd| |dd |\}} |jrtd| | || dS)Nrrz%s %r skipped by filterfuncz __init__.py%s/%szAdding package inasrZAdding) filterfunc.pyzfile %r skipped by filterfunczAdding files from directoryz.Files added with writepy() must end with ".py"z Adding file)ryrrirrr}rr2isfile _get_codenamersortedlistdirremovesplitextwritepyr)rpathnamebasenamerZlabeldirr!ZinitnamerrZdirlistrBrrootZextrrrrs            zPyZipFile.writepyc sdfdd }|d}|d}tjj|dd}tjj|dd}tjj|d d}jdkr\tj|rt|jt|jkr|} } ntj|rt|jt|jkr|} |} ntj|rt|jt|jkr|} |} nvtj|rt|jt|jkr|} |} nD||rRt j j d kr4|} nt j j dkrH|} n|} |} n|} } njd krr|} |} n<|} jdkr|} n&jd kr|} nd j} t | tj| rt| jt|jks||jd s|} } tj| d} |rd || f} | | fS)Nrc sfddl}jrtd|z|j|d|dWn4|jk r`}zt|jWYdSd}~XYnXdS)NrZ CompilingT)doraiserF) py_compilerir}compilePyCompileErrormsg)rrrerrrrr_compiles  z)PyZipFile._get_codename.._compilerz.pycr) optimizationrrrz"invalid value for 'optimize': {!r})rr)r) importlibutilcache_from_sourcerryrrrrr}rrformatr|r) rrrrZfile_pyZfile_pycZ pycache_opt0Z pycache_opt1Z pycache_opt2rrrZ archivenamerrrrsj             zPyZipFile._get_codename)rN)rrrrrrrrrrrr s   RcCstt|ddSr) itertoolsislice _ancestry)rrrr_parentsRsrccs4|tj}|r0|tjkr0|Vt|\}}q dSr)r posixpathrzr)rtailrrrres rcCstt|j|Sr)r filterfalseset __contains__)ZminuendZ subtrahendrrr _differencesr csDeZdZeddZfddZddZddZed d Z Z S) CompleteDirscCs.tjtt|}dd|D}tt||S)Ncss|]}|tjVqdSr)rrz)rrrrrrsz-CompleteDirs._implied_dirs..)rchain from_iterablerr_deduper )namesparentsZas_dirsrrr _implied_dirsszCompleteDirs._implied_dirscs tt|}|t||Sr)rIr rr^r)rrrJrrrszCompleteDirs.namelistcCs t|Sr)r rrrrr _name_setszCompleteDirs._name_setcCs,|}|d}||ko||k}|r(|S|SNrv)r)rr!rrZ dir_matchrrr resolve_dirszCompleteDirs.resolve_dircCsNt|tr|St|ts ||Sd|jkr.t}||}t|t||Sr)rr r r __new__varsupdate)rrresrrrmakes    zCompleteDirs.make) rrr staticmethodrrrrrrrNrrrJrr s   r cs(eZdZfddZfddZZS) FastLookupc s:tt|jW5QRSQRXtt||_|jSr) contextlibsuppressr)Z_FastLookup__namesrIrrrrJrrrs zFastLookup.namelistc s:tt|jW5QRSQRXtt||_|jSr)rrr)Z_FastLookup__lookuprIrrrrJrrrs zFastLookup._name_set)rrrrrrNrrrJrrs rc@seZdZdZd"ddZeddZeddZd d Zd d Z d dZ ddZ ddZ ddZ ddZddZddZddZddZeZedd Zd!S)#rz>{self.__class__.__name__}({self.root.filename!r}, {self.at!r})rcCst||_||_dSr)rrrat)rrr rrrr s z Path.__init__cCst|jj|jSr) functoolspartialrrAr rrrrrA sz Path.opencCst|jdSr)rrr rrrrrr! sz Path.namec Os6|$}tj|f||W5QRSQRXdSr)rAr3 TextIOWrapperr>)rargskwargsstrmrrr read_text s zPath.read_textc Cs(|}|W5QRSQRXdSrr)rr&rrr read_bytes s zPath.read_bytescCst|jd|jdkSr)rrr r)rrrrr _is_child" szPath._is_childcCs t|j|Sr)rr)rr rrr_next% sz Path._nextcCs|j p|jdSr)r endswithrrrrr( sz Path.is_dircCs | Sr)rrrrris_file+ sz Path.is_filecCs|j|jkSr)r rrrrrrr. sz Path.existscCs.|stdt|j|j}t|j|S)NzCan't listdir a file)rr|rr*rrfilterr))rZsubsrrriterdir1 sz Path.iterdircCst|jj|jSr)rr2rrBr rrrr__str__7 sz Path.__str__cCs|jj|dS)Nr) _Path__reprrrrrrr: sz Path.__repr__cCs t|j|}||j|Sr)rr2r r*rr)raddnextrrrjoinpath= sz Path.joinpathcCs(t|jd}|r|d7}||Sr)rrr rr*)rZ parent_atrrrparentC sz Path.parentN)r)rrrr0rr^rAr!r'r(r)r*rr,rr.r/rr3 __truediv__r4rrrrrs(A   c sddl}d}|j|d}|jdd}|jdddd d |jd d d ddd|jdddddd|jddddd ||}|jdk r|j}t|d}|}W5QRX|rtd |tdn|j dk r|j }t|d}| W5QRXn|j dk r,|j \}}t|d}| |W5QRXn|jdk r|jd} |j} fddt| d\}| D]P} tj| } | stjtj| } | dtjtjfkrd} || | qfW5QRXdS) Nrz3A simple command-line interface for zipfile module.) descriptionT)Zrequiredz-lz--list zShow listing of a zipfile)metavarhelpz-ez --extractr)r7z zExtract zipfile into target dir)nargsr8r9z-cz--create+)zzzCreate zipfile from sourcesz-tz--testzTest if a zipfile is validr_z.The following enclosed file is corrupted: {!r}z Done testingcsptj|r|||tnPtj|rl|r8|||tt|D]$}|tj||tj||qFdSr) ryrrrrrrrr2)rWrzippathZnmaddToZiprrr>s s    zmain..addToZipr`r)argparseArgumentParserZadd_mutually_exclusive_group add_argument parse_argsZtestr rr}rr^rrrZcreatepopryrrrrr) r$r?r6parsergrouprrWZbadfilerZzip_namefilesrr<rr=rmainK s\                   rG__main__)N)N)Zbinasciir!importlib.utilrr3rryrrrrFr}rprrrr ImportErrorrr__all__ Exceptionrr rrrrrrrrrrrrrrr]r\rr[rLrMrNrOrPrQrRrar~rrrrrZ_CD_CREATE_VERSIONZ_CD_CREATE_SYSTEMZ_CD_EXTRACT_VERSIONZ_CD_EXTRACT_SYSTEMZ _CD_FLAG_BITSZ_CD_COMPRESS_TYPEZ_CD_TIMEZ_CD_DATEZ_CD_CRCZ_CD_COMPRESSED_SIZEZ_CD_UNCOMPRESSED_SIZErrrZ_CD_DISK_NUMBER_STARTZ_CD_INTERNAL_FILE_ATTRIBUTESZ_CD_EXTERNAL_FILE_ATTRIBUTESrrrrrZ_FH_EXTRACT_VERSIONZ_FH_EXTRACT_SYSTEMrZ_FH_COMPRESSION_METHODZ_FH_LAST_MOD_TIMEZ_FH_LAST_MOD_DATEZ_FH_CRCZ_FH_COMPRESSED_SIZEZ_FH_UNCOMPRESSED_SIZErrrGrHrErJrKrIZ_CD64_SIGNATUREZ_CD64_DIRECTORY_RECSIZEZ_CD64_CREATE_VERSIONZ_CD64_EXTRACT_VERSIONZ_CD64_DISK_NUMBERZ_CD64_DISK_NUMBER_STARTZ_CD64_NUMBER_ENTRIES_THIS_DISKZ_CD64_NUMBER_ENTRIES_TOTALZ_CD64_DIRECTORY_SIZEZ_CD64_OFFSET_START_CENTDIRrZZStructr.r8r=r rXr9objectr rrrrrrrrrrrr4rrOr r rrdictfromkeysrr r rrrGrrrrrsj             +=q& &AN/2 =