Lc@sdZddkZddkZddkZddkZddkZddkZddkZddkZyddk Z e i Z Wn"e j oe Z ei Z nXddddddd d d g Z defd YZd efd YZeZdd>dZdd>Zdd>dZdZdZdZdZeieZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&eie%Z'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3d Z4d!Z5d"Z6d#Z7dZ8d$Z9d%Z:d&Z;d'Z<eie;Z=dZ>dZ?dZ@dZAdZBdZCdZDdZEdZFdZGdZHdZId(ZJd)ZKeieJZLd*ZMd+ZNeieMZOdZPdZQdZRdZSdZTdZUdZVdZWdZXdZYd,ZZd-Z[d.Z\de]fd/YZ^d0fd1YZ_d2fd3YZ`d fd4YZad eafd5YZbe d6Zcedd7jo ecndS(8s Read and write ZIP files. iNt BadZipfileterrort ZIP_STOREDt ZIP_DEFLATEDt is_zipfiletZipInfotZipFilet PyZipFilet LargeZipFilecBseZRS((t__name__t __module__(((s/usr/lib64/python2.6/zipfile.pyRscBseZdZRS(su Raised when writing a zipfile, the zipfile requires ZIP64 extensions and those extensions are disabled. (R R t__doc__(((s/usr/lib64/python2.6/zipfile.pyRsiiiiis<4s4H2LHsPKiiiiiii s<4s4B4HL2L5H2LsPKi i i i iiiis <4s2B4HL2L2HsPKs<4sLQLsPKs <4sQ2H2L4QsPKcCsOy5t|d}t|}|i|otSWntj onXtS(s?Quickly see if file is a ZIP file by checking the magic number.trb(topent _EndRecDatatclosetTruetIOErrortFalse(tfilenametfpintendrec((s/usr/lib64/python2.6/zipfile.pyRs   c Cs0|i|td|it}tit|\}}}}|tjo|S|djp |djotdn|i|ttd|it}tit |\ }}} } } } } }}}|t jo|S||t <| |t <| |t <| |t<||t<||t<||t<|S(sM Read the ZIP64 end-of-archive records and use that to update endrec iiis3zipfiles that span multiple disks are not supported(tseektsizeEndCentDir64LocatortreadtstructtunpacktstructEndArchive64LocatortstringEndArchive64LocatorRtsizeEndCentDir64tstructEndArchive64tstringEndArchive64t_ECD_SIGNATUREt_ECD_DISK_NUMBERt_ECD_DISK_STARTt_ECD_ENTRIES_THIS_DISKt_ECD_ENTRIES_TOTALt _ECD_SIZEt _ECD_OFFSET(RtoffsetRtdatatsigtdisknotrelofftdiskstsztcreate_versiont read_versiontdisk_numtdisk_dirtdircountt dircount2tdirsizet diroffset((s/usr/lib64/python2.6/zipfile.pyt _EndRecData64s( 0        c Cs|idd|i}y|it dWntj od SX|i}|dd!tjo_|ddjoNtit |}t |}|i d|i |tt |t |St |d td}|i|d|i}|it}|djo|||t!}t tit |}||t}|tt|jo7|i ||i ||t |||||Snd S( sReturn data from the "End of Central Directory" record, or None. The data is a list of the nine items in the ZIP "End of central dir" record followed by a tenth item, the file seek offset of this record.iiiittiiNi(RttelltsizeEndCentDirRtNoneRtstringEndArchiveRRtstructEndArchivetlisttappendR6tmaxtrfindt_ECD_COMMENT_SIZEtlen(RtfilesizeR(RtmaxCommentStarttstarttrecDatatcomment((s/usr/lib64/python2.6/zipfile.pyRs6  %      cBsGeZdZdZdddZdZdZdZdZRS(s>Class with attributes describing each file in the ZIP archive.t orig_filenameRt date_timet compress_typeRHtextrat create_systemR.textract_versiontreservedt flag_bitstvolumet internal_attrt external_attrt header_offsettCRCt compress_sizet file_sizet _raw_timetNoNameiiicCs ||_|itd}|djo|d|!}ntidjo)ti|jo|itid}n||_||_t|_ d|_ d|_ t i djo d|_n d|_d|_d|_d|_d|_d|_d|_d|_dS(Nit/R8twin32ii(RItfindtchrtostseptreplaceRRJRRKRHRLtsystplatformRMR.RNRORPRQRRRS(tselfRRJt null_byte((s/usr/lib64/python2.6/zipfile.pyt__init__s*                c Cs|i}|ddd>|dd>B|dB}|dd>|d d>B|ddB}|id @od}}}n|i}|i}|i}|i}|tjp |tjold }|ti|dti |d ||}d }d }t d |i |_ t d |i |_ n|i \} } titt|i |i| |i|||||t| t| } | | |S(s'Return the per-file header as a string.iii iiiii iisg}x1to)|i}|pPn|i|q W|S(stReturn a list with all (following) lines. The sizehint parameter is ignored in this implementation. (RRR?(Rctsizehinttresulttline((s/usr/lib64/python2.6/zipfile.pyt readlines)s cCs|djodS|i|i}|idj o|d8}n|dj o|djo|itjo&t|i}t|||}q|it joIt|i|jo d}qt|i }t||i |}qn||i|ijo|i|i}n|djo|i i |}|it|7_|i |7_ |i o|i }d|_ |o/|idj odit|i|}n|ou|it joe|ii|}|ii|_ |io6t|i djo ||ii7}d|_q)n|i|7_q@n|djpt|i|jo|i}d|_n|i| }|i||_|S(NiR8i (RVRRR;RKRRCRRRRRRRtjointmapRt decompresstunconsumed_tailRtflush(RcRt bytesToReadtlrtbytestnewdata((s/usr/lib64/python2.6/zipfile.pyR4sL       #   N( R R R R;ReRRRRRRRR(((s/usr/lib64/python2.6/zipfile.pyRs       , cBseZdZdZdeedZdZdZ dZ dZ dZ dZ d Zd Zdd Zddd Zddd ZddddZdZdZdddZdZdZdZRS(sd Class with methods to open, read, write, close, list zip files. z = ZipFile(file, mode="r", compression=ZIP_STORED, allowZip64=False) file: Either the path to the file, or a file-like object. If it is a path, the file will be opened and closed by ZipFile. mode: The mode can be either read "r", write "w" or append "a". compression: ZIP_STORED (no compression) or ZIP_DEFLATED (requires zlib). allowZip64: if True ZipFile will create files with ZIP64 extensions when needed, otherwise it will raise an exception when this would be necessary. Rc CsH|djotdn|tjon/|tjotp tdq\n td||_t|_d|_h|_g|_ ||_ |i dd d|_ }d|_d |_t|tod|_||_hd d6d d6d d6}yt||||_Wqtj o;|djo$d}}t||||_qbqXn(d |_||_t|dd|_|djo|in|djon|djoQy$|i|ii|idWqDtj o|iiddqDXn.|ip|iid|_ntddS(s>Open the ZIP file with mode read "r", write "w" or append "a".Rtwtas(ZipFile() requires mode "r", "w", or "a"s.Compression requires the (missing) zlib modules(That compression method is not supporteditbR8R twbsr+biRisMode must be "r", "w" or "a"N(RRR(RyRRRt _allowZip64Rt _didModifytdebugt NameToInfotfilelistt compressionR`RR;RRHRst basestringt _filePassedRR tfpRtgetattrt _GetContentst_RealGetContentsRt start_dirRR(RctfileRRt allowZip64tkeytmodeDict((s/usr/lib64/python2.6/zipfile.pyRes\                          cCsOy|iWn:tj o.|ip|iid|_nnXdS(sORead the directory, making sure we close the file if the format is bad.N(RRRRRR;(Rc((s/usr/lib64/python2.6/zipfile.pyRs   cCs|i}t|}|p tdn|idjo |GHn|t}|t}|t|_|t||}|t t jo|t t 8}n|idjo||}dG|G|G|GHn|||_ |i|i d|i|}ti|}d}x||jo|it} | dd!tjo tdntit| } |idjo | GHn|i| t} t| } |i| t| _|i| t| _| t| _| dd!\ | _| _| _ | _!| _"| _#} } | _$| _%| _&| d d !\| _'| _(| _)| | _*| d ?d | d ?d @| d@| d?| d ?d@| d@df| _+| i,| i|| _| i-| _.|i/i0| | |i1| i.<|t| t| t| t}|idjo dG|GHqqWdS(s/Read in the table of contents for the ZIP file.sFile is not a zip fileiisgiven, inferred, offsetiis&Bad magic number for central directoryi iii iiii i?ttotalN(2RRRRR%R&t _ECD_COMMENTRHt _ECD_LOCATIONR RRRRRRt cStringIOtStringIOtsizeCentralDirtstringCentralDirRRtstructCentralDirt_CD_FILENAME_LENGTHRt_CD_EXTRA_FIELD_LENGTHRLt_CD_COMMENT_LENGTHt_CD_LOCAL_HEADER_OFFSETRTR.RMRNRORPRKRURVRWRQRRRSRXRJRRxRRR?R(RcRRtsize_cdt offset_cdtconcattinferredR(RtcentdirRtxtttd((s/usr/lib64/python2.6/zipfile.pyRs\              I & "cCs.g}x!|iD]}|i|iqW|S(s+Return a list of file names in the archive.(RR?R(RctlR(((s/usr/lib64/python2.6/zipfile.pytnamelists  cCs|iS(sJReturn a list of class ZipInfo instances for files in the archive.(R(Rc((s/usr/lib64/python2.6/zipfile.pytinfolistscCsJdd GHx:|iD]/}d|id }d|i||ifGHqWdS( s+Print a table of contents for the zip file.s%-46s %19s %12ss File Names Modified tSizes%d-%02d-%02d %02d:%02d:%02dis %-46s %s %12dN(s File Names Modified R(RRJRRW(Rctzinfotdate((s/usr/lib64/python2.6/zipfile.pytprintdirs   cCsid}x\|iD]Q}y1|i|id}x|i|oq1WWqtj o |iSXqWdS(s%Read all the files and check the CRC.iiRNi(RR RRR(Rct chunk_sizeRtf((s/usr/lib64/python2.6/zipfile.pyttestzip&s  cCs7|ii|}|djotd|n|S(s,Return the instance of ZipInfo given 'name'.s(There is no item named %r in the archiveN(RtgetR;tKeyError(RcRtinfo((s/usr/lib64/python2.6/zipfile.pytgetinfo3s  cCs ||_dS(s)Set default password for encrypted files.N(R(RcR((s/usr/lib64/python2.6/zipfile.pyt setpassword<scCs|i|d|iS(s)Return file bytes (as a string) for name.R(R R(RcRR((s/usr/lib64/python2.6/zipfile.pyR@scCsb|djo tdn|ip tdn|io |i}nt|id}t|to |}n|i|}|i|i d|i t }|dd!t jo t d ntit|}|i |t}|to|i |tn||ijot d |i|fn|id @}d} |o|p |i}n|ptd |nt|} |i d } t| | dd !} |id@o|id?d@} n|id?d@} t| d| jotd|qn| djot||} nt||| } d|jo| itn| S(s#Return file-like object for 'name'.RtUtrUs&open() requires mode "r", "U", or "rU"s3Attempt to read ZIP archive that was already closedR iis Bad magic number for file headers3File name in directory "%s" and header "%s" differ.is6File %s is encrypted, password required for extractioni iiii sBad password for file(RRsrUN(RyRRR RRsRRRRTRtsizeFileHeaderRkRRRRjt_FH_FILENAME_LENGTHt_FH_EXTRA_FIELD_LENGTHRIRPR;RRRRXRURRRR(RcRRRtzef_fileRtfheadertfnamet is_encryptedtzdRtht check_bytetzef((s/usr/lib64/python2.6/zipfile.pyR DsZ               cCsSt|tp|i|}n|djoti}n|i|||S(s#Extract a member from the archive to the current working directory, using its full name. Its file information is extracted as accurately as possible. `member' may be a filename or a ZipInfo object. You can specify a different directory using `path'. N(RsRRR;R^tgetcwdt_extract_member(RctmembertpathR((s/usr/lib64/python2.6/zipfile.pytextracts  cCsE|djo|i}nx!|D]}|i|||q$WdS(sExtract all members from the archive to the current working directory. `path' specifies a different directory to extract to. `members' is optional and must be a subset of the list returned by namelist(). N(R;RR(RcRtmembersRR((s/usr/lib64/python2.6/zipfile.pyt extractalls  cCsy|dtiitiifjo1ttii|ddjo|d }n|iddjo tii||id}ntii||i}tii|}tii |}|o%tii | oti |n|iddjo)tii |pti |n|S|i|d|}t|d}ti|||i|i|S(sbExtract the ZipInfo object 'member' to a physical file on the path targetpath. iiiRZRR(R^RR_taltsepRCt splitdriveRRtnormpathtdirnametexiststmakedirstisdirtmkdirR Rtshutilt copyfileobjR(RcR t targetpathRt upperdirstsourcettarget((s/usr/lib64/python2.6/zipfile.pyR s(##   cCs |i|ijo|iodG|iGHq1n|id jo tdn|ip tdn|itjot o tdn|it tfjo tdn|i t jo|i pt dqn|it jo|i pt d q nd S( s6Check for errors before writing a file to the archive.sDuplicate name:RRs write() requires mode "w" or "a"s4Attempt to write ZIP archive that was already closeds.Compression requires the (missing) zlib modules(That compression method is not supporteds'Filesize would require ZIP64 extensionss+Zipfile size would require ZIP64 extensionsN(RR(RRRRRyRRKRRRRWRfRRRT(RcR((s/usr/lib64/python2.6/zipfile.pyt _writechecks(        cCs|iptdnti|}ti|i}ti|i}|dd!}|djo |}nti i ti i |d}x,|dti tifjo|d}qW|o|d7}nt||}|dd@d>|_|djo|i|_n ||_|i|_d|_|ii|_|i|t|_|oVd|_d|_d|_|ii|||i|i <|ii!|i"dSt#|d } d|_} d|_} d|_} |ii!|i"|it$jot%i&t%i't%i(d } nd} x{| i)d}|pPn| t*|} t+|| d @} | o#| i,|}| t*|} n|ii!|q?| i-| o9| i.}| t*|} |ii!|| |_n | |_| |_| |_|ii}|ii/|idd|ii!t0i1d|i|i|i|ii/|d|ii|||i|i |dd>B|d B}|d d >|d d>B|dd B}g}|itjp|i tjo0|i |i|i |i d }d } n|i}|i } |i tjo|i |i d} n |i } |i } |o\t iddt|ddt||| } td|i} td|i} n|i} |i} y|i\}}t itt| |i| |i||i|||i| |t|t| t|id|i|i| }Wntj otitt| |i| |i|i |i|||i| |t|i!t| t|id|i|i| fIJnX|ii"||ii"||ii"| |ii"|iqNW|ii}|}||}|}|t#jp|tjp |tjot it$t%ddddd|||| }|ii"|t it&t'd|d}|ii"|t(|d}t(|d }t(|d }nt|it)jo2|i*djodt)}n|it) |_nt it+t,dd||||t|i }|ii"||ii"|i|ii-n|i.p|ii/nd|_dS(sJClose the file, and for mode "w" and "a" write the ending records.NRRiiii iiii iIlss<$     ! :;Zc I