U :eV@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/local/python38/lib/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)fpinoffsetendrecdatasigZdisknoZreloffZdisksZszcreate_versionZ read_versionZdisk_numZdisk_dirZdircountZ dircount2ZdirsizeZ diroffsetrrr _EndRecData64s@      rYc 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/structEndArchivelistr1rYmaxrfind_ECD_COMMENT_SIZE) rSZfilesizerVrUZmaxCommentStartr5ZrecDataZ commentSizecommentrrrr9sD        r9c@sXeZdZdZdddZddZdd d Zd d Zd dZe dddddZ ddZ dS)r ) orig_filenamerB date_time compress_type_compresslevelrcr3 create_systemrXextract_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/rvz+ZIP does not support timestamps before 1980r-win32r)rdfindchrossepreplacerBre ValueErrorrrfrgrcr3sysplatformrhDEFAULT_VERSIONrXrirjrkrlrmrn)selfrBreZ 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__rrBrfrr1compressor_namesgetrnstatfilemodeis_dirrrrqr2)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)Nrrvr$rr!rrr&r rz|jd|jdBfYSXdS)Nasciiutf-8)rBencoderkUnicodeEncodeErrorrrrrrszZipInfo._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"rvru;)rr;rrrwrr)) isinstancer{PathLikefspathrS_ISDIRst_modetime localtimest_mtimepathnormpath splitdriver|altseprnrrst_size) clsrBarcnamerstrmtimerezinforrr from_files0       zZipInfo.from_filecCs|jddkS)NrwrBrrrrr%szZipInfo.is_dir)rtru)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.)r r r~r rDr[r )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.)r r r~r rDr r>r[rnrVrrrr>s  z_SharedFile.readcCs$|jdk r |j}d|_||dSr)r r )rfileobjrrrrs z_SharedFile.closeN)r)r)rrrrrDr>rrrrrrs 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)rTrrrrr[sz_Tellable.tellcCs|jdSr)r<rrrrrrsz_Tellable.flushcCs|jdSr)r<rrrrrrsz_Tellable.closeN)rrrrrr[rrrrrrrs 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-rrpTrrrzBad password for file %r)%_fileobj_pwd_close_fileobjrf_compress_typerq_compress_leftrr_leftr _decompressor_eof _readbuffer_offsetnewlinesmoderBnamer@rp _expected_crcr _running_crc _seekablerr[_orig_compress_start_orig_compress_size_orig_file_size_orig_start_crcAttributeError _decrypterrkrs_init_decrypterrrd)rrr)zipinforZ close_fileobjZ check_bytehrrrr)sF       zZipExtFile.__init__cCs4t|j|_|jd}|jd8_||dS)Nrr&)rrr3rr>r")rrrrrr4\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)r!rrrr2rrCrrrrgs   zZipExtFile.__repr__rcCsL|dkr>|jd|jd}|dkr>|j|j|}||_|Stj||S)Nr r)r&ryr'ioBufferedIOBasereadline)rlimitr6linerrrr>uszZipExtFile.readlinercCsr|t|j|jkr\||}t||jkrJ||j|jd|_d|_n|jt|8_|j|j|jdS)Nri)r0r&r'r>)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-r&r'r%_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)r%r!rr$unconsumed_tailr0_read2rr"r` MIN_READ_SIZErrrr#rLrrrrrGs4          zZipExtFile._read1cCsd|jdkrdSt||j}t||j}|j|}|jt|8_|sLt|jdk r`||}|SrE) r"r`rPminrr>r0EOFErrorr3rrrrrO s      zZipExtFile._read2cs&z|jr|jW5tXdSr)superrr rrrrrrszZipExtFile.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-r<UnsupportedOperationr[r0r~r'r0r&rrDr.r1r,r/r"r#rr!r$r%r3r4rQ MAX_SEEK_READr>)rrTrZcurr_posZnew_posZ read_offsetZ buff_offsetZread_lenrrrrD#sH            zZipExtFile.seekcCs0|jstd|j|jt|j|j}|S)NrU)r-r<rVr0r#r0r&r')rZfileposrrrr[Ss zZipExtFile.tell)NF)r)r)r)r)rrrrHrPrWrr4rr>rBrDr>rLrMrGrOrrrDr[ __classcell__rrrTrrs( 3    ! %$  0rcs@eZdZddZeddZddZddZfd d ZZ S) _ZipWriteFilecCs8||_||_||_t|j|j|_d|_d|_d|_ dSr) _zinfo_zip64_zipfilerrfrg _compressor _file_size_compress_size_crc)rzfrrrrrr[sz_ZipWriteFile.__init__cCs|jjSr)r\r<rrrrresz_ZipWriteFile._fileobjcCsdSrCrrrrrwritableisz_ZipWriteFile.writablecCsf|jrtdt|}|j|7_t||j|_|jrV|j|}|jt|7_|j ||S)NzI/O operation on closed file.) r9r~r0r^rr`r]rr_rr)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)riwxaz+ZipFile requires mode 'r', 'w', 'x', or 'a'Frr-r?w+bx+br+bwbZxb)rirjrkrlrormrnrr*Tri)rjrkrlrz"Mode must be 'r', 'w', 'x', or 'a')'r~r _allowZip64 _didModifydebugrgrfrrr)r_comment_strict_timestampsrr{rrstr _filePassedrBr<rAr<r:getattr _fileRefCnt threadingRLockr r-r _RealGetContentsr[rer2rrDr_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)Nr7z file=%rz filename=%rz mode=%rr8rr) rrrr<rwr1rBr)r2r:rrrr"s    zZipFile.__repr__c Cs|j}z t|}Wntk r.tdYnX|sr<BytesIOsizeCentralDirr0rFr/structCentralDir _CD_SIGNATUREstringCentralDir_CD_FILENAME_LENGTHdecoder _CD_EXTRA_FIELD_LENGTHr3_CD_COMMENT_LENGTHrc_CD_LOCAL_HEADER_OFFSETrorXrhrirjrkrfrprqrrMAX_EXTRACT_VERSIONrrlrmrnrsrerrfr1rgrB)rr<rUZsize_cdZ offset_cdconcatZinferredrVrcentdirrBflagsrktdrrrr|0s                        zZipFile._RealGetContentscCsdd|jDS)NcSsg|] }|jqSrr).0rVrrr sz$ZipFile.namelist..rfrrrrnamelist~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)rrfrerBrr)rrrdaterrrprintdirs zZipFile.printdirc Cs^d}|jD]N}z*||jd}||r,q W5QRXWq tk rV|jYSXq dS)Niri)rfrArBr>r)rZ chunk_sizerfrrrtestzips  zZipFile.testzipcCs$|j|}|dkr td||S)Nz(There is no item named %r in the archive)rgrKeyError)rr*inforrrgetinfos  zZipFile.getinfocCs6|r t|ts tdt|j|r,||_nd|_dS)Npwd: expected bytes, got %s)rr TypeErrorrrr)rrrrr setpasswords zZipFile.setpasswordcCs|jSr)rtrrrrrcszZipFile.commentcCs^t|tstdt|jt|tkrNddl}|jdtdd|dt}||_ d|_ dS)Nzcomment: expected bytes, got %srz3Archive comment is too long; truncating to %d bytesr stacklevelT) rrrrrr0ZIP_MAX_COMMENTwarningswarnrtrr)rrcrrrrrcs   c Cs.||d|}|W5QRSQRXdSNrirAr>)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>rjrizopen() requires mode "r" or "w"rrjz'pwd is only supported for reading filesz2Attempt to use ZIP archive that was already closedrrrcsjSr)r rrrrr-zZipFile.open..zTruncated file headerz Bad magic number for file header z$compressed patched data (flag bit 5)@zstrong encryption (flag bit 6)rrrz/File name in directory %r and header %r differ.z6File %r is encrypted, password required for extractionT)(r~rrrrrr<r rrfrrgr_open_to_writer ryrror}r r>sizeFileHeaderr0rrFr/r _FH_SIGNATUREr_FH_FILENAME_LENGTH_FH_EXTRA_FIELD_LENGTHrkr_FH_GENERAL_PURPOSE_FLAG_BITSrrdrrrr) 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.rrrrrg?T)rqr~r r@rrrqrprkrfrr-rnrr<rDrer[ro _writecheckrrrrrY)rrrrrrrr(s8     zZipFile._open_to_writecCs*|dkrt}n t|}||||Sr)r{getcwdr_extract_member)rmemberrrrrrextractSs  zZipFile.extractcCsH|dkr|}|dkr"t}n t|}|D]}||||q0dSr)rr{rrr)rrmembersrr5rrr extractall`s  zZipFile.extractallcCs^|j}|s(d}t|dt|}||_||}dd||D}|dd|D}|S)Nz:<>|"?*_css|]}|dVqdS).N)rstriprrkrrr {sz1ZipFile._sanitize_windows_name..css|]}|r|VqdSrrrrrrr}s)!_windows_illegal_name_trans_tablerv 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) Nrwrrc3s|]}|kr|VqdSrrrZinvalid_path_partsrrrsz*ZipFile._extract_member..\)rrp)rr rrBr}r{rr|rrcurdirpardirr2rrrdirnameexistsmakedirsrrmkdirrAshutil 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: %rrrrjrkrlz&write() requires mode 'w', 'x', or 'a'z4Attempt to write ZIP archive that was already closed Files countZFilesizez Zipfile size would require ZIP64 extensions)rBrgrrr)r~r<rrfrqr0rfZIP_FILECOUNT_LIMITrrrror )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?rji ) r<r~r r rrurrqrprfrrgrr r-rDrer[rorrkrrrrfr1rgrBrrrArr)rrBrrfrrsrcdestrrrrsF      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")rBrerrwiAr)rrz?Can't write to ZIP archive while an open writing handle exists.rj)r))rrvrr rrrrfrrgrBrnr<r~r r0rrr rAr)rZzinfo_or_arcnamerVrfrrrrrrwritestrs:    zZipFile.writestrcCs |dSrrrrrr__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<r r~r}r)rrr r-rDre_write_end_recordrrrrrs 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)Nrrvr$rr!rrr&r r)rr,QrrrzCentral directory offsetzCentral directory sizer,rrrl)6rfrerrrrqr1ror3r8rFrr0rrfrr`rrrrirXrrrrhrjrprcrmrnDeprecationWarningrrkrBrstderrr<rr[rerrqr rJrKrGrHrQr^r]rtr)truncater)rrrrrr3rrrqroZ extra_datarrirXrBrkrZpos2Z centDirCountZ centDirSizeZ centDirOffsetrZ zip64endrecZ zip64locrecrUrrrr5s $$                               zZipFile._write_end_recordcCs&|jd8_|js"|js"|dSNr)ryrwrrrrrr}s zZipFile._fpclose)N)N)riN)F)NN)NNN)NNN)NN)#rrrr<rrrrrrr|rrrrrrrhrcsetterr>rArrrrrrrrrrrrr}rrrrr sR ZN      b +  * 2 )hc@s0eZdZdeddfddZd dd Zd d ZdS) r riTrcCstj|||||d||_dS)N)r)rr~)r r _optimize)rrr)rr~optimizerrrrs 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)r{rrsrrrrr2isfile _get_codenamersortedlistdirremovesplitextwritepyr)rpathnamebasenamerZlabeldirr*ZinitnamerrdirlistrBrrootextrrrrs            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_compilersrcompilePyCompileErrormsg)rrrerrrrr_compiles  z)PyZipFile._get_codename.._compilerz.pycr) optimizationrrrz"invalid value for 'optimize': {!r})rr)r) importlibutilcache_from_sourcerr{rrrrrrrformatr~r) rrrr Zfile_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 posixpathr|r)rtailrrrres rcCstt|j|Sr)r filterfalseset __contains__)ZminuendZ subtrahendrrr _differencesrcsDeZdZeddZfddZddZddZed d Z Z S) CompleteDirscCs.tjtt|}dd|D}tt||S)Ncss|]}|tjVqdSr)rr|)rrrrrrsz-CompleteDirs._implied_dirs..)rchain from_iterablerr_deduper)namesparentsZas_dirsrrr _implied_dirsszCompleteDirs._implied_dirscs tt|}|t||Sr)rSrrr_r)rrrTrrrszCompleteDirs.namelistcCs t|Sr)rrrrrr _name_setszCompleteDirs._name_setcCs,|}|d}||ko||k}|r(|S|SNrw)r )rr*rrZ dir_matchrrr resolve_dirszCompleteDirs.resolve_dircCsNt|tr|St|ts ||Sd|jkr.t}||}t|t||Sr)rrr r)__new__varsupdate)rrresrrrmakes    zCompleteDirs.make) rrr staticmethodrrr r"rr'rXrrrTrrs   rcs(eZdZfddZfddZZS) FastLookupc s:tt|jW5QRSQRXtt||_|jSr) contextlibsuppressr2Z_FastLookup__namesrSr)rrrTrrrs zFastLookup.namelistc s:tt|jW5QRSQRXtt||_|jSr)r*r+r2Z_FastLookup__lookuprSr)r rrTrrr s zFastLookup._name_set)rrrrr rXrrrTrr)s r)c@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)r)r'rat)rrr,rrrr s z Path.__init__cCst|jj|jSr) functoolspartialrrAr,rrrrrA sz Path.opencCst|jdSr!)rrr,rrrrrr* sz Path.namec Os6|$}tj|f||W5QRSQRXdSr)rAr< TextIOWrapperr>)rargskwargsstrmrrr read_text s zPath.read_textc Cs(|}|W5QRSQRXdSrr)rr2rrr 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,rr rrrrr. sz Path.existscCs.|stdt|j|j}t|j|S)NzCan't listdir a file)rr~rr6rrfilterr5)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,r6rr")raddnextrrrjoinpath= sz Path.joinpathcCs(t|jd}|r|d7}||Sr!)rrr,rr6)rZ parent_atrrrparentC sz Path.parentN)r)rrrr<rrhrAr*r3r4r5r6rr8rr:r;rr? __truediv__r@rrrrrs(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)requiredz-lz--list zShow listing of a zipfile)metavarhelpz-ez --extractr)rDz zExtract zipfile into target dir)nargsrErFz-cz--create+)zzzCreate zipfile from sourcesz-tz--testzTest if a zipfile is validriz.The following enclosed file is corrupted: {!r}z Done testingcsptj|r|||tnPtj|rl|r8|||tt|D]$}|tj||tj||qFdSr) r{rrrrrrrr2)rarzippathZnmaddToZiprrrKs s    zmain..addToZiprjr)argparseArgumentParseradd_mutually_exclusive_group add_argument parse_argstestr rrrr_rrrZcreatepopr{rrrrr) r0rLrBparsergrouprraZbadfilerZzip_namefilesrrIrrJrmainK s\                   rV__main__)N)N)Zbinasciir-importlib.utilr r<rr{rrrrFrrzrr*rr ImportErrorrr__all__ Exceptionrr rrrrrrrrrrrrrrr^r]rr\rLrMrNrOrPrQrRrbrrrrrrZ_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_CENTDIRrdStructr.r8r=r rYr9objectr rrrrrrrrrrrr=rrYr r rrdictfromkeysrrrr)rrVrrrrrsj             +=q& &AN/2 =