,bc @s=dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z yddl Z e j Z Wn ek reZ ej Z nXddddddd d d g Zdefd YZd efd YZeZdd>dZdd>dZdd>dZdZdZdZdZejeZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)eje(Z*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6d Z7d!Z8d"Z9d#Z:dZ;d$Z<d%Z=d&Z>d'Z?eje>Z@dZAdZBdZCdZDdZEdZFdZGdZHdZIdZJdZKdZLd(ZMd)ZNejeMZOd*ZPd+ZQejePZRdZSdZTdZUdZVdZWdZXdZYdZZdZ[dZ\d,Z]d-Z^d.Z_d/Z`deafd0YZbd1fd2YZcid3d6d4d6d5d6d5d6d5d6d5d6d6d6d7d6d8d6d9d6d6d6d:d 6d;d"6d<d%6d=d>6d?d@6dAdB6ZddCe jefdDYZfd eafdEYZgd egfdFYZhedGZiejdHkr9eindS(Is Read and write ZIP files. iNt BadZipfileterrort ZIP_STOREDt ZIP_DEFLATEDt is_zipfiletZipInfotZipFilet PyZipFilet LargeZipFilecBseZRS((t__name__t __module__(((s/usr/lib/python2.7/zipfile.pyRscBseZdZRS(su Raised when writing a zipfile, the zipfile requires ZIP64 extensions and those extensions are disabled. (R R t__doc__(((s/usr/lib/python2.7/zipfile.pyRsiiiiis<4s4H2LHsPKiiiiiii s<4s4B4HL2L5H2LsPKi i i i iiiis <4s2B4HL2L2HsPKs<4sLQLsPKs <4sQ2H2L4QsPKcCs,yt|rtSWntk r'nXtS(N(t _EndRecDatatTruetIOErrortFalse(tfp((s/usr/lib/python2.7/zipfile.pyt_check_zipfiles   cCsgt}yIt|dr*td|}n$t|d}t|}WdQXWntk rbnX|S(sQuickly see if a file is a ZIP file by checking the magic number. The filename argument may be a file or file-like object too. treadRtrbN(RthasattrRtopenR(tfilenametresultR((s/usr/lib/python2.7/zipfile.pyRs c Csny|j|tdWntk r,|SX|jt}t|tkrR|Stjt|\}}}}|tkr|S|dks|dkrt dn|j|tt d|jt }t|t kr|Stjt |\ }}} } } } } }}}|t kr$|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(tseektsizeEndCentDir64LocatorRRtlentstructtunpacktstructEndArchive64LocatortstringEndArchive64LocatorRtsizeEndCentDir64tstructEndArchive64tstringEndArchive64t_ECD_SIGNATUREt_ECD_DISK_NUMBERt_ECD_DISK_STARTt_ECD_ENTRIES_THIS_DISKt_ECD_ENTRIES_TOTALt _ECD_SIZEt _ECD_OFFSET(tfpintoffsettendrectdatatsigtdisknotrelofftdiskstsztcreate_versiont read_versiontdisk_numtdisk_dirtdircountt dircount2tdirsizet diroffset((s/usr/lib/python2.7/zipfile.pyt _EndRecData64s6  0        c Cs|jdd|j}y|jt dWntk rEd SX|j}t|tkr|dd!tkr|ddkrtj t |}t |}|j d|j |tt |t |St|d td}|j|d|j}|jt}|dkr|||t!}t|tkrId St tj t |}|t}||t|t|!}|j ||j ||t |||||Sd 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.iiiistiiNi(RttelltsizeEndCentDirRtNoneRRtstringEndArchiveRRtstructEndArchivetlisttappendR:tmaxtrfindt_ECD_COMMENT_SIZE( R)tfilesizeR,R+tmaxCommentStarttstarttrecDatat commentSizetcomment((s/usr/lib/python2.7/zipfile.pyR s>         cBsJeZdZdZdddZddZdZdZdZ RS( s>Class with attributes describing each file in the ZIP archive.t orig_filenameRt date_timet compress_typeRKtextrat create_systemR2textract_versiontreservedt flag_bitstvolumet internal_attrt external_attrt header_offsettCRCt compress_sizet file_sizet _raw_timetNoNameiiicCs#||_|jtd}|dkr:|d|!}ntjdkrptj|krp|jtjd}n||_||_|ddkrtdnt |_ d|_ d|_ t jdkrd|_n d|_d|_d|_d|_d|_d|_d|_d|_dS( Nit/is+ZIP does not support timestamps before 1980R;twin32ii(RLtfindtchrtostseptreplaceRRMt ValueErrorRRNRKROtsystplatformRPR2RQRRRSRTRURV(tselfRRMt null_byte((s/usr/lib/python2.7/zipfile.pyt__init__s.               c Cs|j}|ddd>|dd>B|dB}|dd>|d d>B|ddB}|jd @rsd}}}n|j}|j}|j}|j}|dkr|tkp|tk}n|rd } |tj | dtj | d ||}n|tks|tkr_|s&t d nd }d }t d|j |_ t d|j |_n|j\} } tj tt|j |j| |j|||||t| t| } | | |S(s'Return the per-file header as a string.iii iiiii iist ZIP64_LIMITRtpacktcalcsizeRRCRQR2t_encodeFilenameFlagststructFileHeadertstringFileHeaderRRRNR( Rgtzip64tdttdosdatetdostimeRXRYRZROtfmtRRStheader((s/usr/lib/python2.7/zipfile.pyt FileHeaderIs: &&       # cCstt|jtr`y|jjd|jfSWqptk r\|jjd|jdBfSXn|j|jfSdS(Ntasciisutf-8i(t isinstanceRtunicodetencodeRStUnicodeEncodeError(Rg((s/usr/lib/python2.7/zipfile.pyRmps  !cCs(|jd@r|jjdS|jSdS(Nisutf-8(RSRtdecode(Rg((s/usr/lib/python2.7/zipfile.pyt_decodeFilenameys cCs|j}tj}xjt|dkr~|d|d \}}|dkrm|dkrq|d|dd!}no|dkr|d|dd !}nJ|d kr|d |dd !}n%|d krd}ntd|fd }|jdkr|||_|d7}n|jdkr8|||_|d7}n|jdkrm|j}|||_|d7}qmn||d}qWdS(NisRvRmR}R(((s/usr/lib/python2.7/zipfile.pyRs2* ' t _ZipDecryptercBsDeZdZdZeZdZdZdZdZRS(sClass to handle decryption of files stored within a ZIP archive. ZIP supports a password-based form of encryption. Even though known plaintext attacks have been found against it, it is still useful to be able to get data out of such a file. Usage: zd = _ZipDecrypter(mypwd) plain_char = zd(cypher_char) plain_text = map(zd, cypher_text) cCsd}dgd}xhtdD]Z}|}xAtdD]3}|d@r^|d?d@|A}q9|d?d@}q9W|||ZdZejdZde dZ ddZ ddZ d Z dd Zd Zd Zd ZRS(sZFile-like object for reading an archive member. Is returned by ZipFile.open(). iiis*^(?P[^\r\n]+)|(?P\n|\r\n?)cCsf||_||_||_|j|_|j|_|j|_|jtkrct j d|_ n\|jt krt j|j}|rtd|j|fqtd|jfnd|_d|_d|_d|k|_d|_|jdk r|jd8_n||_|j|_t|drY|j|_tdd @|_n d|_dS( Niscompression type %d (%s)scompression type %dR;itUi RXI(t_fileobjt _decryptert_close_fileobjRNt_compress_typeRYt_compress_sizet_compress_leftRtzlibt decompressobjt _decompressorRtcompressor_namestgettNotImplementedErrort _unconsumedt _readbuffert_offsett _universalR>tnewlinestmodeRtnameRRXt _expected_crctcrc32t _running_crc(RgtfileobjRtzipinfot decryptert close_fileobjtdescr((s/usr/lib/python2.7/zipfile.pyRis4             icCs|j ra|dkra|jjd|jd}|dkra|j|j|!}||_|Sn|js}tjj||Sd}x|dkst||kr|jd}|dkr|S|j j |}|j d}|dk rJ|j dkr g|_ n||j kr-|j j|n|jt|7_|dS|j d}|dkr|||t| }n|jt|7_||7}qW|S( srRead and return a line from the stream. If limit is specified, at most limit bytes will be read. is iR;itnewlinetchunkN(RRR_RtiotBufferedIOBasetreadlineRtpeektPATTERNtsearchtgroupR>RRB(RgtlimitRtlinet readaheadtmatchRR((s/usr/lib/python2.7/zipfile.pyR+s8   !     cCs|t|j|jkr{|j|}t||jkrc||j|j|_d|_q{|jt|8_n|j|j|jd!S(s6Returns buffered bytes without advancing the position.ii(RRRR(RgtnR((s/usr/lib/python2.7/zipfile.pyR]s cCstS(N(R (Rg((s/usr/lib/python2.7/zipfile.pytreadablejscCsd}|dkrd}nxztr|dkrB|j|}n2|t|krp|j|t|}n|St|dkr|S||7}qWdS(sRead and return up to n bytes. If the argument is omitted, None, or negative, data is read and returned until EOF is reached.. R;iiN(R>R tread1R(RgRtbufR,((s/usr/lib/python2.7/zipfile.pyRms    cCs^|jdkrdSt||jd@|_|rZ|j|jkrZtd|jndS(NIsBad CRC-32 for file %r(RR>RRRR(Rgtnewdatateof((s/usr/lib/python2.7/zipfile.pyt _update_crcs cCsg|dks|dkr$|j}nt|j|j}|jdkrW||t|jkrW||t|j}t||j}t ||j}|j j |}|jt|8_|r|j dk rdj t|j |}n|jtkrE|j|d|jdk|j|j||_d|_qW|j|7_nt|jdkr4||kr4|jtkr4|jj|jt|||j}|jj|_t|jdko|jdk}|r||jj7}n|j|d||j|j||_d|_n|j|j|j|!}|jt|7_|S(s7Read up to n bytes with at most one read() system call.iR;RN(R>tMAX_NRRRRRRCt MIN_READ_SIZEtminRRRtjointmapRRRRRt decompresstunconsumed_tailtflush(RgRtlen_readbuffertnbytesR,R((s/usr/lib/python2.7/zipfile.pyRs> ( ! $ cCs8z|jr|jjnWdtt|jXdS(N(RRtclosetsuperR(Rg((s/usr/lib/python2.7/zipfile.pyRs iN(R R R RRtretcompileRR>RRiRRRRRRR(((s/usr/lib/python2.7/zipfile.pyRs  ' 2   4cBseZdZdZdeedZdZdZ dZ dZ dZ dZ d Zd Zd Zed Zejd ZddZdddZdddZddddZdZdZdddZddZdZdZRS(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. trcCs|dkrtdn|tkr*n*|tkrKtsTtdqTn td||_t|_d|_i|_g|_ ||_ |j dd d|_ }d|_d |_t|trXd|_||_id d6d d6d d6}yt||||_Wqtk rT|dkrNd}}t||||_qUqXn'd |_||_t|dd|_y|dkr|jn|dkrt|_|jj|_n|dkr:y$|j|jj|jdWqFtk r6|jjddt|_|jj|_qFXn tdWn2|j}d|_|jsu|jnnXdS(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 supporteditbR;Rtwbsr+biRisMode must be "r", "w" or "a"N(RRR( R~RRRt _allowZip64Rt _didModifytdebugt NameToInfotfilelistt compressionRcRR>Rt_commentRxt basestringt _filePassedRRRRtgetattrt_RealGetContentsR R<t _start_diskRt start_dirRR(RgtfileRRt allowZip64tkeytmodeDictR((s/usr/lib/python2.7/zipfile.pyRisj                                 cCs|S(N((Rg((s/usr/lib/python2.7/zipfile.pyt __enter__scCs|jdS(N(R(Rgttypetvaluet traceback((s/usr/lib/python2.7/zipfile.pyt__exit__"sc Cs\|j}yt|}Wntk r8tdnX|sKtdn|jdkrb|GHn|t}|t}|t|_|t |||_ |t t kr|j t t8_ n|jdkr|j |}dG|G|G|j GHn||j |_|j|jd|j|}tj|}d}x||krW|jt}t|tkrwtdntjt|}|ttkrtdn|jdkr|GHn|j|t} t| } |j|t| _|j|t| _ |t!| _"|dd!\ | _#| _$| _%| _&| _'| _(} } | _)| _*| _+|d d !\| _,| _-| _.| | _/| d ?d | d ?d @| d@| d?| d ?d@| d@df| _0| j1| j"|j | _"| j2| _3|j4j5| | |j6| j3<|t|t|t|t}|jdkr;dG|GHq;q;WdS(s/Read in the table of contents for the ZIP file.sFile is not a zip fileiisgiven, inferred, offsetisTruncated central directorys&Bad magic number for central directoryi iii iiii i?ttotalN(7RR RRRR'R(t _ECD_COMMENTRt _ECD_LOCATIONRR"R!RRRRRt cStringIOtStringIOtsizeCentralDirRRRtstructCentralDirt _CD_SIGNATUREtstringCentralDirt_CD_FILENAME_LENGTHRt_CD_EXTRA_FIELD_LENGTHROt_CD_COMMENT_LENGTHRKt_CD_LOCAL_HEADER_OFFSETRWR2RPRQRRRSRNRXRYRZRTRURVR[RMRR}RRRBR( RgRR+tsize_cdt offset_cdtinferredR,RtcentdirRtxtttd((s/usr/lib/python2.7/zipfile.pyR%sd         I & "cCs.g}x!|jD]}|j|jqW|S(s+Return a list of file names in the archive.(RRBR(RgtlR,((s/usr/lib/python2.7/zipfile.pytnamelistkscCs|jS(sJReturn a list of class ZipInfo instances for files in the archive.(R(Rg((s/usr/lib/python2.7/zipfile.pytinfolistrscCsJdd GHx:|jD]/}d|jd }d|j||jfGHqWdS( 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(RRMRRZ(Rgtzinfotdate((s/usr/lib/python2.7/zipfile.pytprintdirws cCsnd}xa|jD]V}y8|j|jd}x|j|rFq4WWdQXWqtk re|jSXqWdS(s%Read all the files and check the CRC.iiRNi(RRRRR(Rgt chunk_sizeRtf((s/usr/lib/python2.7/zipfile.pyttestzip~s cCs5|jj|}|dkr1td|n|S(s,Return the instance of ZipInfo given 'name'.s(There is no item named %r in the archiveN(RRR>tKeyError(RgRtinfo((s/usr/lib/python2.7/zipfile.pytgetinfos  cCs ||_dS(s)Set default password for encrypted files.N(R(RgR((s/usr/lib/python2.7/zipfile.pyt setpasswordscCs|jS(s.The comment text associated with the ZIP file.(R(Rg((s/usr/lib/python2.7/zipfile.pyRKscCsXt|tkrBddl}|jdtdd|t }n||_t|_dS(Nis3Archive comment is too long; truncating to %d bytest stackleveli(RtZIP_MAX_COMMENTtwarningstwarnRR R(RgRKR&((s/usr/lib/python2.7/zipfile.pyRKs    cCs|j|d|jS(s)Return file bytes (as a string) for name.R(RR(RgRR((s/usr/lib/python2.7/zipfile.pyRscCsd|dkrtdn|js-tdn|jrH|j}t}nt|jd}t}yt|tr{|}n|j |}|j |j d|j t }t|t krtdntjt|}|ttkrtd n|j |t}|tr/|j |tn||jkrWtd |j|fn|jd @} d} | r&|s|j}n|std |nt|} |j d } t| | dd !} |jd@r|jd?d@} n|jd?d@} t| d| kr&td|q&nt |||| d|SWn|rY|j!nnXdS(s#Return file-like object for 'name'.RRtrUs&open() requires mode "r", "U", or "rU"s3Attempt to read ZIP archive that was already closedRisTruncated file headers 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 fileRN(RRR(("R~RRRRRR RxRR"RRWRtsizeFileHeaderRRRRRnt _FH_SIGNATURERot_FH_FILENAME_LENGTHt_FH_EXTRA_FIELD_LENGTHRLRSR>RRRR[RXRRR(RgRRRtzef_filet should_closeRtfheadertfnamet is_encryptedtzdtbytestht check_byte((s/usr/lib/python2.7/zipfile.pyRsd                cCsOt|ts!|j|}n|dkr<tj}n|j|||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(RxRR"R>Ratgetcwdt_extract_member(RgtmembertpathR((s/usr/lib/python2.7/zipfile.pytextracts  cCsC|dkr|j}nx!|D]}|j|||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:(RgR9tmembersRR((s/usr/lib/python2.7/zipfile.pyt extractall s  c Cs|jjdtjj}tjjrH|jtjjtjj}ntjj|d}tjjjd|jtjjD}tjjdkr2d}t |t rd|D}nt j |dt |}|j|}d|jtjjD}tjjjd |D}ntjj||}tjj|}tjj|}|rtjj| rtj|n|jd dkrtjj|stj|n|S|j|d |/}t|d } tj|| Wd QXWd QX|S(sbExtract the ZipInfo object 'member' to a physical file on the path targetpath. R]icss6|],}|dtjjtjjfkr|VqdS(R;N(RaR9tcurdirtpardir(t.0R((s/usr/lib/python2.7/zipfile.pys "ss\s:<>|"?*cSs%i|]}tdt|qS(t_(R(R?R((s/usr/lib/python2.7/zipfile.pys (s R@css|]}|jdVqdS(t.N(trstrip(R?R((s/usr/lib/python2.7/zipfile.pys -scss|]}|r|VqdS(N((R?R((s/usr/lib/python2.7/zipfile.pys .siRRN(RRcRaR9Rbtaltsept splitdriveRtsplitRxRytstringt maketransRt translatetnormpathtdirnametexiststmakedirstisdirtmkdirRRtshutilt copyfileobj( RgR8t targetpathRtarcnametillegalRt upperdirstsourcettarget((s/usr/lib/python2.7/zipfile.pyR7s4 !."cCs+|j|jkr;ddl}|jd|jddn|jdkrVtdn|jsktd n|jtkrt rtd n|jt tfkrtd n|j s'd}t |jtkrd }n0|jtkrd }n|jtkr d}n|r't|dq'ndS(s6Check for errors before writing a file to the archive.iNsDuplicate name: %rR$iRRs 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 Files counttFilesizes Zipfile sizes would require ZIP64 extensions(RR(RRR&R'RR~RRNRRRRR>RRtZIP_FILECOUNT_LIMITRZRjRWR(RgRR&trequires_zip64((s/usr/lib/python2.7/zipfile.pyt _writecheckCs2          cCs|jstdntj|}tj|j}tj|j}|dd!}|d krm|}ntj j tj j |d}x*|dtj tjfkr|d}qW|r|d7}nt||}|dd@d>|_|rt|_n$|d kr |j|_n ||_|j|_d|_|jj|_|j|t|_|rd|_d|_d|_|jdO_|jj|||j |j!<|jj"|j#t$d St%|d  } d|_} d|_} |j&o|jd t'k} |jj"|j#| |jt(krat)j*t)j+t)j,d } nd } d}xx| j-d}|sPn|t.|}t/|| d@} | r| j0|}| t.|} n|jj"|qpWWd QX| r,| j1}| t.|} |jj"|| |_n ||_| |_||_| r|j&r|t'krrtdn| t'krtdqn|jj}|jj2|jd|jj"|j#| |jj2|d|jj|||j |j!R9RIRDRbRCRRVRRNRtst_sizeRZRSR<RWRZR RRYRXRRBRRtwriteRvRRRRjRRt compressobjtZ_DEFAULT_COMPRESSIONtDEFLATEDRRRtcompressRR(RgRRRRNtstRMtmtimeRMRRRXRYRptcmprRZRtposition((s/usr/lib/python2.7/zipfile.pyRb_s     "                      cCsBt|ts}td|dtjtjd }|j|_|jddkrqd|_|jdO_qd|_n|}|jst d n|dk r||_nt ||_ |jj |_|j|t|_t|d @|_|jtkrRtjtjtjd }|j||j}t ||_n |j |_|j tkpy|jtk}|r|j rtd n|jj|j ||jj||j!d @r|rdnd}|jjt"j#||j|j|j n|jj|j$j%|||j&|jRRZR<RWRZR RRRXRRRcRdReRfRRYRjRRRbRvRSRRkRRBR(Rgtzinfo_or_arcnameR3RNRtcoRpRt((s/usr/lib/python2.7/zipfile.pytwritestrsL              cCs|jdS(s2Call the "close()" method in case the user forgot.N(R(Rg((s/usr/lib/python2.7/zipfile.pyt__del__scCs|jdkrdSz|jdkr|jr|jj}x|jD]}|j}|ddd>|dd>B|d B}|d d >|d d>B|dd B}g}|jtks|j tkr|j |j|j |j d }d }n|j}|j }|j |j } | tkr9|j | d} n|j } |rtjddt|ddt||| } td|j} td|j} n|j} |j} y|j\} }tjtt| |j| |j||j|||j||t| t| t|jd|j|j| }Wntk rtj tt| |j| |j|j!|j|||j||t|j"t| t|jd|j|j| fIJnX|jj#||jj#| |jj#| |jj#|jqGW|jj}t|j}||}||j }d}|t$kr^d}n*|tkrsd}n|tkrd}n|rB|j%st&|dntjt't(ddddd|||| }|jj#|tjt)t*d|d}|jj#|t+|d}t+|d }t+|d }ntjt,t-dd||||t|j. }|jj#||jj#|j.|jj/nWd|j}d|_|j0s|j1nXdS(sJClose the file, and for mode "w" and "a" write the ending records.NRRiii iiiii iIlsRRR<RRMRZRjRYRBRWRRORRkRRCRQR2RmRR RPRRRNRXRKRURVtDeprecationWarningRetstderrRSRRbRXRRR R!RRRR@R?RRRR(Rgtpos1RRqRrRsRORZRYRWt extra_dataRQR2RRSRtpos2t centDirCountt centDirSizet centDirOffsetRYt zip64endrect zip64locrecR+R((s/usr/lib/python2.7/zipfile.pyRs &&               !                 N(R R R R>RRRRiRRRRRRRR"R#tpropertyRKtsetterRRR:R<R7RZRbRmRnR(((s/usr/lib/python2.7/zipfile.pyRs0 I   F     O . \ 3 cBs#eZdZddZdZRS(sDClass to create ZIP archives with Python library files and packages.R;c Cstjj|\}}tjj|r|tjj|d}tjj|r|rjd||f}n|}|jrdG|GdG|GHn|j|dd!|\}}|jrdG|GHn|j||tj |}|j dx|D]} tjj|| } tjj | \} } tjj| rptjjtjj| dr|j | |qq| dkr|j| dd!|\}}|jrdG|GHn|j||qqWq|jrd G|GHnxtj |D]} tjj|| } tjj | \} } | dkr|j| dd!|\}}|jrbdG|GHn|j||qqWn`|ddkrt d n|j|dd!|\}}|jrd G|GHn|j||d S( s,Add all files from "pathname" to the ZIP archive. If pathname is a package directory, search the directory and all package subdirectories recursively for all *.py and enter the modules into the archive. If pathname is a plain directory, listdir *.py and enter all modules. Else, pathname must be a Python *.py file and the module will be put into the archive. Added modules are always module.pyo or module.pyc. This method will compile the module.py into module.pyc if necessary. s __init__.pys%s/%ssAdding package intasiitAddings.pysAdding files from directorys.Files added with writepy() must end with ".py"s Adding fileN(RaR9RERMRtisfileRt _get_codenameRbtlistdirtremovetsplitexttwritepyR~( RgtpathnametbasenametdirRtinitnameR0RRtdirlistRR9troottext((s/usr/lib/python2.7/zipfile.pyRdsZ      !           c Cs8|d}|d}|d}tjj|r]tj|jtj|jkr]|}ntjj| stj|jtj|jkrddl}|jrdG|GHny|j||dt Wn|j k r}|j GHnX|}n|}tjj |d} |r.d|| f} n|| fS( sReturn (filename, archivename) for the path. Given a module name path, return the correct file path and archive name, compiling if necessary. For example, given /python/lib/string, return (/python/lib/string.pyc, string). s.pys.pycs.pyoiNt Compilingis%s/%s( RaR9R~R[R`t py_compileRRR>R tPyCompileErrortmsgRE( RgRRtfile_pytfile_pyctfile_pyoR0Rterrt archivename((s/usr/lib/python2.7/zipfile.pyRs*   $ $     (R R R RR(((s/usr/lib/python2.7/zipfile.pyRas Ac sddl}|jd}|dkr7tjd}n| sN|ddkrc|GHtjdn|ddkrt|d kr|GHtjdnt|dd }|jWdQXn|ddkrAt|d kr|GHtjdnt|dd }|j }WdQX|r9d j |GHnd GHnT|ddkrt|d krx|GHtjdnt|dd }|j |d WdQXn|ddkrt|d kr|GHtjdnfdt|dddt }x|d D]s}t jj|}|sTt jjt jj|}n|dt jt jfkrxd}n|||qWWdQXndS(NisE Usage: zipfile.py -l zipfile.zip # Show listing of a zipfile zipfile.py -t zipfile.zip # Test if a zipfile is valid zipfile.py -e zipfile.zip target # Extract zipfile into target dir zipfile.py -c zipfile.zip src ... # Create zipfile from sources iis-ls-cs-es-tiRs.The following enclosed file is corrupted: {!r}s Done testingicstjj|r(|j||tnvtjj|r|rS|j||nxHtj|D]4}|tjj||tjj||qcWndS(N(RaR9R~RbRRMRR(tzfR9tzippathtnm(taddToZip(s/usr/lib/python2.7/zipfile.pyRsRRR;(s-ls-cs-es-t(ttextwraptdedentR>RetargvtexitRRRRtformatR<R RaR9RRJR=R>(targsRtUSAGERtbadfileR9R((Rs/usr/lib/python2.7/zipfile.pytmainsT    ! t__main__(kR RRaR^ReROtbinasciiRR[RRRFRRt ImportErrorR>t__all__t ExceptionRRRRjRXR%RRR@R?RlR=R"R#R$R%R&R'R(RERRRR RR t_CD_CREATE_VERSIONt_CD_CREATE_SYSTEMt_CD_EXTRACT_VERSIONt_CD_EXTRACT_SYSTEMt _CD_FLAG_BITSt_CD_COMPRESS_TYPEt_CD_TIMEt_CD_DATEt_CD_CRCt_CD_COMPRESSED_SIZEt_CD_UNCOMPRESSED_SIZER R R t_CD_DISK_NUMBER_STARTt_CD_INTERNAL_FILE_ATTRIBUTESt_CD_EXTERNAL_FILE_ATTRIBUTESRRnRoR)R*t_FH_EXTRACT_VERSIONt_FH_EXTRACT_SYSTEMt_FH_GENERAL_PURPOSE_FLAG_BITSt_FH_COMPRESSION_METHODt_FH_LAST_MOD_TIMEt_FH_LAST_MOD_DATEt_FH_CRCt_FH_COMPRESSED_SIZEt_FH_UNCOMPRESSED_SIZER+R,RRRR R!Rt_CD64_SIGNATUREt_CD64_DIRECTORY_RECSIZEt_CD64_CREATE_VERSIONt_CD64_EXTRACT_VERSIONt_CD64_DISK_NUMBERt_CD64_DISK_NUMBER_STARTt_CD64_NUMBER_ENTRIES_THIS_DISKt_CD64_NUMBER_ENTRIES_TOTALt_CD64_DIRECTORY_SIZEt_CD64_OFFSET_START_CENTDIRRRR:R tobjectRRRRRRRRR (((s/usr/lib/python2.7/zipfile.pyts<$           + =< c B