JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrU if/@s dZdZdZddlmZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZz ddlZWnek rdZYnXz ddlZWnek rdZYnXeefZzeef7ZWnek rYnXdddd d d d d dddddddgZdZdZedZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%d Z&d!Z'd"Z(d#Z)d$Z*d%Z+d&Z,d'Z-d(Z.d)Z/dZ0d*Z1d+Z2e2Z3e!e"e#e$e'e(e)e%e&e*e+e,f Z4e!e"e)e,fZ5e*e+e,fZ6d,Z7d-d.d/d0hZ8e9e9e9e:e:e:d1Z;ejZ=d4d5Z?d6d7Z@d8d9ZAd:e3fd;d<ZBd=d>ZCdedfd?d@ZDdAdBZEGdCd d eFZGGdDd d eGZHGdEd d eGZIGdFd d eGZJGdGd d eGZKGdHddeGZLGdIdJdJeLZMGdKdLdLeLZNGdMdNdNeLZOGdOdPdPeLZPGdQdRdReLZQGdSdTdTZRGdUdVdVZSGdWdXdXeTZUGdYdZdZeTZVGd[d\d\ejWZXGd]d^d^eGZYGd_d`d`eYZZGdadbdbeYZ[GdcddddeYZ\GdedfdfeYZ]GdgdhdheYZ^dzdjdkZ_dldmZ`dndoZadpdqZbe`eaebdrZceTZdeedsZfGdtddeTZgGduddeTZhdvdZiehjZdwdxZjekdykrejdS){z0.9.0u"Lars Gustäbel (lars@gustaebel.de)u4Gustavo Niemeyer, Niels Gustäbel, Richard Townsend.)openNTarFileTarInfo is_tarfileTarError ReadErrorCompressionError StreamError ExtractError HeaderErrorENCODING USTAR_FORMAT GNU_FORMAT PAX_FORMATDEFAULT_FORMATrisustar sustar00d01234567LKSxgX)pathlinkpathsizemtimeuidgidunamegnamer%r&r+r,)Zatimectimer(r)r*r'ntutf-8cCs8|dkrtd|||}|d||t|tS)Nzmetadata cannot contain None) ValueErrorencodelenNUL)slengthencodingerrorsr8,/opt/alt/python38/lib64/python3.8/tarfile.pystns r:cCs*|d}|dkr|d|}|||S)Nr)finddecode)r4r6r7pr8r8r9ntss  r?cCs|ddkrbd}tt|dD]}|dK}|||d7}q |ddkrdt|d| }n@z"t|dd}t|p|d d}Wntk rtd YnX|S) Nr)r#rAasciistrict0invalid header)ranger2r?intstripr0InvalidHeaderError)r4nir8r8r9ntis   rNrBcCst|}d|kr$d|dkrDnntd|d|fdt}n|tkrd|d |krrd|dkrnnV|dkrtdg}ntdg}d||}t|dD]}|d|d@|dL}qntd |S) NrrBr#z%0*orDrCr@rAzoverflow in number field)rIbytesr3r bytearrayrHinsertr0)rLdigitsformatr4rMr8r8r9itns  2    rTcCs0dttd|}dttd|}||fS)NrCZ 148B8x356BZ 148b8x356b)sumstructZ unpack_from)bufZunsigned_chksumZ signed_chksumr8r8r9 calc_chksumss rXc Cs|pd}|dkrdS|dkr.t|||dSt||\}}t|D],}||}t||krf|d||qD|dkr||}t||kr|d||dS)Ni@runexpected end of data)shutil copyfileobjdivmodrHreadr2write) srcZdstr5 exceptionbufsizeblocks remainderbrWr8r8r9r[s$       r[cCs8ttjdd}|dk r(||d|}t|dddS)Nr6backslashreplace )end)getattrsysstdoutr1r=print)r4r6r8r8r9 _safe_printsrlc@s eZdZdS)rN__name__ __module__ __qualname__r8r8r8r9rsc@s eZdZdS)r Nrmr8r8r8r9r sc@s eZdZdS)rNrmr8r8r8r9rsc@s eZdZdS)rNrmr8r8r8r9rsc@s eZdZdS)r Nrmr8r8r8r9r sc@s eZdZdS)r Nrmr8r8r8r9r sc@s eZdZdS)EmptyHeaderErrorNrmr8r8r8r9rq srqc@s eZdZdS)TruncatedHeaderErrorNrmr8r8r8r9rr#srrc@s eZdZdS)EOFHeaderErrorNrmr8r8r8r9rs&srsc@s eZdZdS)rKNrmr8r8r8r9rK)srKc@s eZdZdS)SubsequentHeaderErrorNrmr8r8r8r9rt,srtc@s,eZdZddZddZddZddZd S) _LowLevelFilecCsFtjtjtjBtjBd|}ttdr2|tjO}t||d|_dS)NrwO_BINARYi) osO_RDONLYO_WRONLYO_CREATO_TRUNChasattrryrfd)selfnamemoder8r8r9__init__9s  z_LowLevelFile.__init__cCst|jdSN)rzcloserrr8r8r9rBsz_LowLevelFile.closecCst|j|Sr)rzr]rrr'r8r8r9r]Esz_LowLevelFile.readcCst|j|dSr)rzr^rrr4r8r8r9r^Hsz_LowLevelFile.writeN)rnrorprrr]r^r8r8r8r9ru3s ruc@sneZdZddZddZddZddZd d Zd d Zd dZ ddZ dddZ ddZ ddZ ddZdS)_Streamc Csd|_|dkrt||}d|_|dkr6t|}|}|pd|fg}d|_g|_d}|j}|D]L\}}||kr||j d||df|j d||||f||7}||}qX||jkr|j d||jdfdS)NrrFT) roffsetr'positionrhrr map_indexmapr)rrrr'Z blockinfoZlastposZrealposr8r8r9ras(    z_FileInFile.__init__cCsdSrr8rr8r8r9rzsz_FileInFile.flushcCsdSNTr8rr8r8r9readable}sz_FileInFile.readablecCsdS)NFr8rr8r8r9writablesz_FileInFile.writablecCs |jSr)rseekablerr8r8r9rsz_FileInFile.seekablecCs|jSr)rrr8r8r9rsz_FileInFile.tellcCs|tjkr tt|d|j|_nj|tjkr\|dkrFt|j|d|_qt|j||j|_n.|tjkrtt|j||jd|_ntd|jS)NrzInvalid argument) ioSEEK_SETminmaxr'rSEEK_CURSEEK_ENDr0)rrwhencer8r8r9rs   z_FileInFile.seekc Cs |dkr|j|j}nt||j|j}d}|dkr|j|j\}}}}||jkr`|krhqnqq6|jd7_|jt|jkr6d|_q6t|||j}|r|j||j||j|}t||krt d||7}n |t |7}||8}|j|7_q,|S)Nrrr#rY) r'rrrrr2rrr]rr3) rr'rWdatastartstoprr5rdr8r8r9r]s,     z_FileInFile.readcCs&|t|}||dt|<t|Sr)r]r2)rrdrWr8r8r9readintosz_FileInFile.readintocCs d|_dSr)rrr8r8r9rsz_FileInFile.close)N)N)rnrorprrrrrrrrrr]rrr8r8r8r9r[s  rcseZdZfddZZS) ExFileObjectcs&t|j|j|j|j}t|dSr)rr offset_datar'sparsesuperr)rtarfiletarinfor __class__r8r9rs  zExFileObject.__init__rnrorpr __classcell__r8r8rr9rsrc@s eZdZdS) FilterErrorNrmr8r8r8r9rsrcseZdZfddZZS)AbsolutePathErrorcs ||_td|jddS)Nzmember z has an absolute pathrrrrrrrr8r9rszAbsolutePathError.__init__rr8r8rr9rsrcseZdZfddZZS)OutsideDestinationErrorcs.||_||_t|jd|dddS)Nz would be extracted to , which is outside the destinationr_pathrrrrrr%rr8r9rs z OutsideDestinationError.__init__rr8r8rr9rsrcseZdZfddZZS)SpecialFileErrorcs||_t|jddS)Nz is a special filerrrr8r9rszSpecialFileError.__init__rr8r8rr9rsrcseZdZfddZZS)AbsoluteLinkErrorcs||_t|jddS)Nz is a link to an absolute pathrrrr8r9rszAbsoluteLinkError.__init__rr8r8rr9rsrcseZdZfddZZS)LinkOutsideDestinationErrorcs.||_||_t|jd|dddS)Nz would link to rrrrrr8r9rs z$LinkOutsideDestinationError.__init__rr8r8rr9rsrTcCsi}|j}tj|}|dtjfr@|jdtj}|d<tj|rTt|tjtj ||}tj ||g|krt |||j }|dk r|d@}|r| s|r|d@s|dM}|dO}n|s|rd}nt|||j kr||d<|r|jdk rd|d<|jdk r*d|d <|jdk r>d|d <|jdk rRd|d <|sf|rtj|jr~t||rtj |tj||j}ntj ||j}tj|}tj ||g|krt|||S) N/ri@irr)r*r+r,)rrzr%realpathrseplstripisabsrr commonpathrrisregislnkisdirissymrr)r*r+r,linknamerdirnamer)member dest_pathZfor_data new_attrsrZ target_pathrr8r8r9_get_filtered_attrss^             rcCs|Srr8)rrr8r8r9fully_trusted_filter/srcCs(t||d}|r$|jf|ddiS|S)NFdeeprrrrrr8r8r9 tar_filter2s r cCs(t||d}|r$|jf|ddiS|S)NTr Fr r r8r8r9 data_filter8s r )Z fully_trustedrrs([0-9]{1,20}) c@seZdZeddddddddd d d d d ddddddddZdhddZeddZejddZeddZ e jddZ ddZ e e e e e e e e de d d!d"Z d#d$Z eed%fd&d'Zd(d)Zd*d+Zd,d-Zed.d/Zd0d1Zed2d3Zed4d5Zed6d7Zed8d9Zed:d;Zedd?Zd@dAZdBdCZ dDdEZ!dFdGZ"dHdIZ#dJdKZ$dLdMZ%dNdOZ&dPdQZ'dRdSZ(dTdUZ)dVdWZ*dXdYZ+dZd[Z,d\d]Z-d^d_Z.d`daZ/dbdcZ0dddeZ1dfdgZ2dS)irzName of the archive member.zPermission bits.z6User ID of the user who originally stored this member.z7Group ID of the user who originally stored this member.zSize in bytes.zTime of last modification.zHeader checksum.zFile type. type is usually one of these constants: REGTYPE, AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, CONTTYPE, CHRTYPE, BLKTYPE, GNUTYPE_SPARSE.zcName of the target file name, which is only present in TarInfo objects of type LNKTYPE and SYMTYPE.z User name.z Group name.zDevice major number.zDevice minor number.zThe tar header starts here.zThe file's data starts here.zMA dictionary containing key-value pairs of an associated pax extended header.zSparse member information.N)rrr)r*r'r(chksumtyperr+r,devmajordevminorrr pax_headersrr_sparse_structs _link_targetrcCsj||_d|_d|_d|_d|_d|_d|_t|_d|_ d|_ d|_ d|_ d|_ d|_d|_d|_i|_dS)Nirr)rrr)r*r'r(rREGTYPErrr+r,rrrrrrrrr8r8r9rqs"zTarInfo.__init__cCs|jSrrrr8r8r9r%sz TarInfo.pathcCs ||_dSrrrr8r8r9r%scCs|jSrrrr8r8r9r&szTarInfo.linkpathcCs ||_dSrr)rrr8r8r9r&scCsd|jj|jt|fS)Nz<%s %r at %#x>)rrnridrr8r8r9__repr__szTarInfo.__repr__T) rr(rrr)r*r+r,r _KEEPc Cs| rt|} n t|} || k r(|| _|| k r6|| _|| k rD|| _|| k rR|| _|| k r`|| _|| k rn|| _|| k r||| _|| k r|| _ | Sr) copyZdeepcopyrr(rrr)r*r+r,) rrr(rrr)r*r+r,r rresultr8r8r9rs(  zTarInfo.replacecCs|jdkrd}n |jd@}|j||j|j|j|j|j|j|j|j |j |j |j d }|dt kr||dds||dd7<|S)N) rrr)r*r'r(rrrr+r,rrrrr)rrr)r*r'r(rrrr+r,rrDIRTYPEr)rrinfor8r8r9get_infos(  zTarInfo.get_infosurrogateescapecCsz|}|D]\}}|dkrtd|q|tkrD||||S|tkrZ||||S|tkrn|||StddS)Nz%s may not be Nonezinvalid format) r!itemsr0r create_ustar_headerrcreate_gnu_headerrcreate_pax_header)rrSr6r7r rvaluer8r8r9tobufs z TarInfo.tobufcCsnt|d<t|d||tkr(tdt|d||tkr^||d||\|d<|d<||t||S)Nmagicrzlinkname is too longrprefix) POSIX_MAGICr2r1 LENGTH_LINKr0 LENGTH_NAME_posix_split_name_create_headerr )rr r6r7r8r8r9r$s zTarInfo.create_ustar_headercCst|d<d}t|d||tkr<|||dt||7}t|d||tkrl|||dt||7}|||t ||S)Nr)rrr) GNU_MAGICr2r1r,_create_gnu_long_headerGNUTYPE_LONGLINKr-GNUTYPE_LONGNAMEr/r)rr r6r7rWr8r8r9r%szTarInfo.create_gnu_headerc Cs*t|d<|j}ddtfddtfddfD]j\}}}||kr>q*z||dd Wn$tk rv||||<Yq*YnXt|||kr*||||<q*d D]`\}}||krd ||<q||}d |krd |d krnn t|t rt |||<d ||<q|r| |t |} nd} | | |tddS)Nr)rr%rr&)r+r+ )r,r,r4rDrE))r)rB)r*rB)r' )r(r5rrBr#rr)r+rrr-r,r1UnicodeEncodeErrorr2 isinstancefloatstr_create_pax_generic_headerXHDTYPEr/r ) rr r6rrZhnamer5rRvalrWr8r8r9r&s8    *  zTarInfo.create_pax_headercCs||tdS)Nr/)r:XGLTYPE)clsrr8r8r9create_pax_global_header3sz TarInfo.create_pax_global_headercCs~|d}tdt|D]T}d|d|}d||d}t|||tkrt|||tkrqvqtd||fS)Nrr#zname is too long)splitrHr2rr1 LENGTH_PREFIXr-r0)rrr6r7Z componentsrMr*r8r8r9r.9s zTarInfo._posix_split_namec Cs|dttfk}|r@t|ddd|}t|ddd|}ntdd||}tdd||}|dt}|dkrxtdt|ddd ||t|d dd @d|t|d dd|t|d dd|t|ddd|t|ddd|d|t|ddd |||dtt|ddd||t|ddd||t|ddd|t|ddd|t|ddd||g}t dt d |} t | t dd} | ddt d| d| dd} | S)NrrrrBrrzTarInfo.type must not be Nonerrrrr)r*r'r5r(s rr)r+r4r,r*rz%dsriz%06orDi)getCHRTYPEBLKTYPErTr:rr0r+rVrrrrXrO) r rSr6r7Zhas_device_fieldsrrZfiletypepartsrWrr8r8r9r/Is:  &zTarInfo._create_headercCs.tt|t\}}|dkr*|t|t7}|S)Nr)r\r2rr3)Zpayloadrbrcr8r8r9_create_payloadsszTarInfo._create_payloadcCsR|||t}i}d|d<||d<t||d<t|d<||t||||S)Nz ././@LongLinkrrr'r))r1r3r2r0r/r rF)r>rrr6r7r r8r8r9r1}s zTarInfo._create_gnu_long_headerc Cs2d}|D]8\}}z|ddWq tk rBd}YqFYq Xq d}|rV|d7}|D]\}}|d}|r||d}n |d}t|t|d}d } } |tt| } | | krq| } q|tt| d d |d |d 7}q^i} d| d<|| d<t|| d<t| d<|| td d| |S)NFr/rETrs21 hdrcharset=BINARY r"rrrD = z././@PaxHeaderrrr'r)r) r#r1r6r2r9rOr+r/r rF) r>rrr6Zbinarykeywordr'ZrecordslrLr>r r8r8r9r:s<  ( z"TarInfo._create_pax_generic_headerc Csvt|dkrtdt|tkr(td|ttkr>tdt|dd}|t|krbt d|}t |dd|||_ t|dd |_ t|d d |_ t|d d |_t|d d |_t|d d|_||_|dd |_t |d d|||_t |dd|||_t |dd|||_t|dd|_t|dd|_t |dd||}|jtkr|j drt|_|jtkr8d}g}tdD]l} z0t|||d} t||d|d} Wntk rYqYnX|| | f|d7}qt|d} t|dd} || | f|_ |!rP|j "d|_ |rr|jt#krr|d|j |_ |S)Nrz empty headerztruncated headerzend of file headerz bad checksumrlt|ii i)iIiQiYirirr5iii)$r2rqrrrcountr3rsrNrXrKr?rrr)r*r'r(rrrr+r,rrAREGTYPErrGNUTYPE_SPARSErHr0rboolrrrstrip GNU_TYPES)r>rWr6r7robjr*rstructsrMrnumbytes isextendedorigsizer8r8r9frombufsZ         zTarInfo.frombufcCs8|jt}|||j|j}|jt|_||Sr) rr]rr_r6r7rr _proc_member)r>rrWrZr8r8r9 fromtarfiles zTarInfo.fromtarfilecCsT|jttfkr||S|jtkr,||S|jtttfkrF| |S| |SdSr) rr3r2 _proc_gnulongrV _proc_sparser;r=SOLARIS_XHDTYPE _proc_pax _proc_builtin)rrr8r8r9r`s    zTarInfo._proc_membercCsR|j|_|j}|s$|jtkr4|||j7}||_| |j |j |j |Sr) rrrrrSUPPORTED_TYPES_blockr'r_apply_pax_inforr6r7)rrrr8r8r9rf"s zTarInfo._proc_builtincCs|j||j}z||}Wntk r>tdYnX|j|_|jt krft ||j |j |_ n|jtkrt ||j |j |_|S)N missing or bad subsequent header)rr]rhr'rar rtrrr3r?r6r7rr2r)rrrWnextr8r8r9rb3s  zTarInfo._proc_gnulongc Cs|j\}}}|`|r|jt}d}tdD]n}z0t|||d}t||d|d} Wntk rzYqYnX|r| r||| f|d7}q,t|d}q||_ |j |_ |j | |j |_||_ |S)Nrr5rSi)rrr]rrHrNr0rrWrrrrhr'r) rrr[r]r^rWrrMrr\r8r8r9rcIs(      zTarInfo._proc_sparsecCs|j||j}|jtkr&|j}n |j}d}d}g}t||krj||dkrjt ||}spt dzt | d}Wntk rt dYnX|dkrt d||t|krt d|d|d} ||dd| } | d\} } } | r| dks|| dkr&t d||| | f| dkr`|dkr`| dkr\|j}nd }||7}q<|dkrxd }|D]X\}} } || d d |j}|tkr|| ||j|j}n|| d d |j}|||<q|z||}Wntk rtd YnXd |kr|||nFd |kr4|||n.|d dkrb|ddkrb|||||jttfkr| ||j|j|j!|_!d|kr|j"}|#s|jt$kr|||j7}||_!|S)NrrGr#rHrs hdrcharsetsBINARYr/rjGNU.sparse.mapGNU.sparse.sizezGNU.sparse.major1zGNU.sparse.minorrFr')%rr]rhr'rr=rrr2_header_length_prefix_rematchrKrIgroupr0rrg partitionrr6_decode_pax_fieldr7PAX_NAME_FIELDSrar rt_proc_gnusparse_01_proc_gnusparse_00rB_proc_gnusparse_10r;rdrirrrrg)rrrWrrr6 raw_headersrrr5Zheader_value_end_offsetZkeyword_and_valueZ raw_keywordZequalsZ raw_valuerJr'rkrr8r8r9rees|               zTarInfo._proc_paxc Csg}g}|D]\}}}|dkrTz|t|Wqtk rPtdYqXq |dkr z|t|Wq tk rtdYq Xq tt|||_dS)NsGNU.sparse.offsetrGsGNU.sparse.numbytes)rrIr=r0rKlistzipr)rrkrzZoffsetsr\_rJr'r8r8r9rxszTarInfo._proc_gnusparse_00cCs@dd|ddD}tt|ddd|ddd|_dS)NcSsg|] }t|qSr8)rI).0xr8r8r9 sz.TarInfo._proc_gnusparse_01..rn,r$r#)r@r{r|r)rrkrrr8r8r9rwszTarInfo._proc_gnusparse_01cCsd}g}|jt}|dd\}}t|}t||dkrtd|krT||jt7}|dd\}}|t|q,|j|_t t |ddd|ddd|_ dS)NrIr#r$) rr]rr@rIr2rrrr{r|r)rrkrrZfieldsrrWZnumberr8r8r9rys  zTarInfo._proc_gnusparse_10c Cs|D]\}}|dkr&t|d|q|dkr@t|dt|q|dkrZt|dt|q|tkr|tkrzt||}Wntk rd}YnX|dkr|d}t|||q||_dS)NzGNU.sparse.namer%ror'zGNU.sparse.realsizerr) r#setattrrI PAX_FIELDSPAX_NUMBER_FIELDSr0rXrr)rrr6r7rJr'r8r8r9ris"  zTarInfo._apply_pax_infocCs4z||dWStk r.|||YSXdS)NrE)r=UnicodeDecodeError)rr'r6Zfallback_encodingZfallback_errorsr8r8r9ruszTarInfo._decode_pax_fieldcCs"t|t\}}|r|d7}|tS)Nr#)r\r)rrTrbrcr8r8r9rh'szTarInfo._blockcCs |jtkSr)r REGULAR_TYPESrr8r8r9r0sz TarInfo.isregcCs|Sr)rrr8r8r9isfile4szTarInfo.isfilecCs |jtkSr)rrrr8r8r9r8sz TarInfo.isdircCs |jtkSr)rSYMTYPErr8r8r9r<sz TarInfo.issymcCs |jtkSr)rLNKTYPErr8r8r9r@sz TarInfo.islnkcCs |jtkSr)rrCrr8r8r9ischrDsz TarInfo.ischrcCs |jtkSr)rrDrr8r8r9isblkHsz TarInfo.isblkcCs |jtkSr)rFIFOTYPErr8r8r9isfifoLszTarInfo.isfifocCs |jdk Sr)rrr8r8r9issparsePszTarInfo.issparsecCs|jtttfkSr)rrCrDrrr8r8r9isdevSsz TarInfo.isdev)r)3rnrorpdict __slots__rpropertyr%setterr&rrrr!rr r(r$r%r& classmethodr?r. staticmethodr/rFr1r:r_rar`rfrbrcrerxrwryrirurhrrrrrrrrrrr8r8r8r9rNs       1  )   2 >  y c @seZdZdZdZdZdZeZe Z dZ e Z eZdZdeddZedddefd d Zedfd d ZedgddZedhddZediddZdddddZddZddZddZdd Zdjd!d"Zdkdd$d%d&Zdldd'd(d)Z dmd*d+Z!d,d-Z"dnddd/d0d1Z#doddd/d3d4Z$d5d6Z%d7d8Z&d9d:Z'd;d<Z(d=d>Z)dpd?d@Z*dAdBZ+dCdDZ,dEdFZ-dGdHZ.dIdJZ/dKdLZ0dMdNZ1dOdPZ2dQdRZ3dSdTZ4dqdUdVZ5dWdXZ6drdYdZZ7d[d\Z8d]d^Z9d_d`Z:dadbZ;dcddZr8r9not_compressed sz$TarFile.open..not_compressed)keyrwz%file could not be opened successfully:r#rr|rvzmode must be 'r' or 'w'Frzundiscernible mode) r0sortedrrhrrrrr@rrrr) r>rrrrakwargsrrfuncZ saved_posfilemodestreamrr8rr9rsP%            z TarFile.opencKs |dkrtd||||f|S)Nrr)r0)r>rrrrr8r8r9r>szTarFile.taropenrcKs|dkrtdzddlm}Wntk r<tdYnXz|||d||}Wn.tk r|dk r||dkr|tdYnXz|j|||f|}WnBtk r||dkrtdYn|YnXd |_ |S) Nrwrxrmode must be 'r', 'w' or 'x'r)GzipFilezgzip module is not availablerdrwrF) r0Zgziprrrrrrrr)r>rrr compresslevelrrrr8r8r9gzopenFs0zTarFile.gzopenc Ks|dkrtdzddlm}Wntk r<tdYnX||pF|||d}z|j|||f|}WnFttfk r||dkrt dYn|YnXd |_ |S) Nrrr)BZ2Filer)rrwznot a bzip2 fileF) r0rrrrrrEOFErrorrrr)r>rrrrrrrr8r8r9bz2opengs&zTarFile.bz2openc Ks|dkrtdzddlm}m}Wntk r@tdYnX||pJ|||d}z|j|||f|}WnF|tfk r||dkrt dYn|YnXd |_ |S) Nrrr)LZMAFilerr)presetrwznot an lzma fileF) r0rrrrrrrrrr) r>rrrrrrrrr8r8r9xzopens&zTarFile.xzopenrrrr)rrrrcCs|jr dSd|_z`|jdkrn|jttd|jtd7_t |jt \}}|dkrn|jtt |W5|js|jXdS)NTrr$r) rrrrrr^r3rrr\ RECORDSIZE)rrbrcr8r8r9rs z TarFile.closecCs"||}|dkrtd||S)Nzfilename %r not found) _getmemberKeyError)rrrr8r8r9 getmembers  zTarFile.getmembercCs||js||jSr)_checkr_loadrrr8r8r9 getmembersszTarFile.getmemberscCsdd|DS)NcSsg|] }|jqSr8r)r~rr8r8r9rsz$TarFile.getnames..)rrr8r8r9getnamesszTarFile.getnamesc Cs^|d|dk r|j}|dkr$|}tj|\}}|tjd}|d}|}||_ |dkr|j stt |}qt |}nt |}d}|j}t |r|j|jf} |j s|jdkr| |jkr||j| krt} |j| }nt} | dr||j| <nht |rt} nVt |r"t} nDt |r>t} t|}n(t |rPt} nt |rbt!} ndS||_||_"|j#|_$|j%|_&| tkr|j'|_(nd|_(|j)|_*| |_+||_,t-rzt-.|j$d|_/Wnt0k rYnXt1rzt12|j&d|_3Wnt0k rYnX| tt!fkrZt4tdrZt4tdrZt5|j6|_7t8|j6|_9|S)Nawxrrr#rmajorminor):rrrzr% splitdriverrrrrrlstatstatfstatfilenost_modeS_ISREGst_inost_devst_nlinkrrrS_ISDIRrS_ISFIFOrS_ISLNKrreadlinkS_ISCHRrCS_ISBLKrDrst_uidr)st_gidr*st_sizer'st_mtimer(rrpwdgetpwuidr+rgrpZgetgrgidr,rrst_rdevrrr) rrarcnamerZdrvrZstatresrZstmdinoderr8r8r9 gettarinfos                 zTarFile.gettarinfoT)rcCs*||dkr|}|D] }|r|jdkr6tdntt|jtd|jpT|j|jp^|jf| sv| rtdd|j |j fntd|j |jdkrtdntdt|jddt|j|rd nd |r|rtd |j|rtd |jtqdS) Nz ??????????z%s/%sz%10sz%d,%dz%10dz????-??-?? ??:??:??z%d-%02d-%02d %02d:%02d:%02drrrz-> zlink to )rrrlrrr+r)r,r*rrrrr'r(r localtimerrrrrrk)rverboserrr8r8r9r{=s8        z TarFile.listfilterc Cs6|d|dkr|}|jdk rFtj||jkrF|dd|dS|d||||}|dkrz|dd|dS|dk r||}|dkr|dd|dS|rt|d}| ||W5QRXn`| r(| ||r2t t |D]*}|j tj||tj||||dqn | |dS) Nrr$ztarfile: Skipped %rr#ztarfile: Unsupported type %rtarfile: Excluded %rrr)rrrzr%r_dbgrrraddfilerrlistdiraddr)rrr recursiverrfr8r8r9rcs8       z TarFile.addcCs|dt|}||j|j|j}|j||jt |7_|j }|dk rt ||j|j |dt |j t\}}|dkr|jtt||d7}|j|t7_|j|dS)Nr)rarr#)rrr(rSr6r7rr^rr2rr[r'r\rr3rr)rrrrWrarbrcr8r8r9rs   zTarFile.addfilecCsr|dkr0|j}|dkrtSt|tr,td|St|r<|Sz t|WStk rltd|ddYnXdS)NzrString names are not supported for TarFile.extraction_filter. Use a function such as tarfile.data_filter directly.zfilter z not found) extraction_filterrr7r9 TypeErrorcallable_NAMED_FILTERSrr0)rrr8r8r9_get_filter_functions  zTarFile._get_filter_function.) numeric_ownerrc Csg}||}|dkr|}|D]F}||||}|dkr:q|rL|||j||| |dq|jdddd|D]n}tj||j } z,|j || |d| || | || Wq|t k r} z|| W5d} ~ XYq|Xq|dS)N set_attrsrcSs|jSrr)rr8r8r9rz$TarFile.extractall..T)rreverse)r)r_get_extract_tarinforr _extract_onesortrzr%rrchownutimechmodr _handle_nonfatal_error) rr%rrrZ directoriesfilter_functionrrdirpathrr8r8r9 extractalls,   zTarFile.extractallrcCs4||}||||}|dk r0|||||dSr)rrr)rrr%rrrrrr8r8r9extracts zTarFile.extractc Cst|tr||}n|}|}z|||}WnZttfk r\}z||W5d}~XYn,tk r}z||W5d}~XYnX|dkr|dd|j dS| rt |}t j ||j|_|S)Nr$r)r7r9rrr_handle_fatal_errorr rrrrrrzr%rrr)rrrr%rZ unfilteredrr8r8r9r s"   zTarFile._get_extract_tarinfoc Cs|dz"|j|tj||j||dWnVtk rX}z||W5d}~XYn,tk r}z| |W5d}~XYnXdS)Nrwr) r_extract_memberrzr%rrrr r r)rrr%rrrr8r8r9r s  zTarFile._extract_onecCs"|jdkrn|dd|dS)Nr# tarfile: %s)rrrrr8r8r9r% s zTarFile._handle_nonfatal_errorcCsn|jdkrn\t|trP|jdkr6|dd|jqj|dd|j|jfn|ddt|j|fdS)Nrr#r ztarfile: %s %rztarfile: %s %s)rr7rfilenamerstrerrorrrnr r8r8r9r , s   zTarFile._handle_fatal_errorcCs|dt|tr ||}n|}|s6|jtkrB|||S|sR| rzt|j t rht dq~| ||SndSdS)Nrwz'cannot extract (sym)link as file object)rr7r9rrrrg fileobjectrrrrr extractfile_find_link_target)rrrr8r8r9r8 s      zTarFile.extractfilecCsT|d}|dtj}tj|}|r>tj|s>t||sN| rh| dd|j |j fn| d|j | r|||n|r|||nx|r|||nb|s|r|||nD|s| r|||n&|jtkr|||n ||||rP||||| sP||||||dS)Nrr#z%s -> %s)rXrrzrr%rrmakedirsrrrrrrmakefilermakedirrmakefiforrmakedevmakelinkrrg makeunknownrrr)rr targetpathrrZ upperdirsr8r8r9r W s4       zTarFile._extract_membercCs@z&|jdkrt|n t|dWntk r:YnXdS)Ni)rrzmkdirFileExistsErrorrrrr8r8r9r s   zTarFile.makedirc Cs|j}||j|j}t|db}|jdk rn|jD]"\}}||t|||t|q4||j| nt|||jt|W5QRXdS)Nr) rrrrrrr[rr'truncate)rrrsourceratargetrr'r8r8r9r s      zTarFile.makefilecCs"||||dd|jdS)Nr#z9tarfile: Unknown file type %r, extracted as regular file.)rrrrr8r8r9r s zTarFile.makeunknowncCs"ttdrt|ntddS)Nmkfifozfifo not supported by system)rrzr r rr8r8r9r s  zTarFile.makefifocCsjttdrttdstd|j}|dkr.d}|rB|tjO}n |tjO}t||t |j |j dS)Nmknodrz'special devices not supported by systemr) rrzr rrrS_IFBLKS_IFCHRr!rrr)rrrrr8r8r9r s  zTarFile.makedevc Cszb|r0tj|r t|t|j|n0tj|jrNt |j|n| | ||WnHt k rz| | ||Wnt k rtdYnXYnXdS)Nz%unable to resolve link inside archive)rrzr%lexistsunlinksymlinkrrrlinkr rsymlink_exceptionrr rr8r8r9r s"    zTarFile.makelinkcCsttdrtdkr|j}|j}|sztrB|jrBt|jd}Wntk rXYnXzt rv|j rvt |j d}Wntk rYnX|dkrd}|dkrd}z4| rttdrt |||nt|||Wntk rtdYnXdS)Ngeteuidrr$r;lchownzcould not change owner)rrzr)r*r)rr,Zgetgrnamrrr+getpwnamrr*rrr )rrrrgur8r8r9r s0  z TarFile.chowncCsB|jdkrdSzt||jWntk r<tdYnXdS)Nzcould not change mode)rrzrrr rr8r8r9r s  z TarFile.chmodcCsV|j}|dkrdSttds dSzt|||fWntk rPtdYnXdS)Nrz"could not change modification time)r(rrzrrr )rrrr(r8r8r9r s z TarFile.utimec Cs|d|jdk r$|j}d|_|S|j|jkrZ|j|jd|jdsZtdd}z|j |}Wqt k r}z6|j r| dd|j|f|jt 7_WYq^W5d}~XYqtk r6}zR|j r| dd|j|f|jt 7_WY q^n|jdkr&tt|W5d}~XYntk r^|jdkrZtdYnjtk r}z|jdkrtt|W5d}~XYn0tk r}ztt|W5d}~XYnXqq^|dk r|j|nd|_|S) NZrar#rYr$z0x%X: %srz empty fileT)rrrrrrr]rrrarsrrrrKr9rqrrrtrrr)rmrrr8r8r9rk sJ         z TarFile.nextc Cs|}d}|dk rHz||}Wntk r:d}YnX|d|}|rXtj|}t|D]D}|rz|j|jkr`d}q`|rtj|j}n|j}||kr`|Sq`|rt|dS)NFT) rindexr0rzr%normpathreversedrr) rrr normalizerZskippingr/r member_namer8r8r9rP s,      zTarFile._getmembercCs|}|dkrqqd|_dSr)rkrrr8r8r9rx sz TarFile._loadcCs:|jrtd|jj|dk r6|j|kr6td|jdS)Nz %s is closedzbad operation for mode %r)rrrrnr)rrr8r8r9r szTarFile._checkcCs`|r.dtdtj|j|jf}d}n |j}|}|j||dd}|dkr\t d||S)NrT)rr2zlinkname %r not found) rrrrzr%rrrrr)rrrlimitrr8r8r9r s  zTarFile._find_link_targetccs|jr|jEdHdSd}|jdk r:|}|d7}|V|t|jkrT|j|}n"|jsr|}|svd|_dSndS|d7}|Vq:dS)Nrr#T)rrrrkr2)rr/rr8r8r9__iter__ s$   zTarFile.__iter__cCs||jkrt|tjddS)Nfile)rrkristderr)rlevelmsgr8r8r9r s z TarFile._dbgcCs ||Sr)rrr8r8r9 __enter__ szTarFile.__enter__cCs,|dkr|n|js"|jd|_dSr)rrrr)rrr' tracebackr8r8r9__exit__ s   zTarFile.__exit__) NrwNNNNNNr"NNNN)rwN)rwNr)rwNr)rwNN)NNN)T)NT)N)rN)rT)TF)NF)N)=rnrorprrrrrrSr r6r7rrrrrrrrrrrrrrrrrrrr{rrrrrrrrr rr rrrrrrrrrrkrrrrr5rr;r=r8r8r8r9rXs oZ        c&3  -    1! 6 ( cCs2zt|}|WdStk r,YdSXdS)NTF)rrr)rrr8r8r9r s c Csddl}d}|j|d}|jdddddd |jd d td d |jdd}|jddddd|jdddddd|jdddddd|jdd dd!d|}|jr|jdkr|d"d#|j dk r4|j }t |rt |d$ }| t | tjd%W5QRX|jr0t d&|n|d"d'|n|jdk r|j}t |rxt |d(}|j|jd)W5QRXn|d"d'|nv|jdk rbt|jd"kr|jd}tj}n,t|jd*kr|j\}}n|d"|t |rNt |d(}|j||jd+W5QRX|jr`|d,kr8d-|} n d.||} t | n|d"d'|n|jdk r|jd} tj| \} } d/d/d0d0d1d1d1d1d2} | | krd3| | nd4}|j}t | |}|D]}||qW5QRX|jrt d5| dS)6Nrz3A simple command-line interface for tarfile module.) descriptionz-vz --verbose store_trueFzVerbose output)actiondefaulthelpz--filterz zFilter for extraction)metavarchoicesrBT)Zrequiredz-lz--list zShow listing of a tarfile)rCrBz-ez --extract+)rEz zExtract tarfile into target dir)nargsrCrBz-cz--create)zzzCreate tarfile from sourcesz-tz--testzTest if a tarfile is validr#z&--filter is only valid for extraction rwr6z{!r} is a tar archive.z{!r} is not a tar archive. r)rr$)r%rrz{!r} file is extracted.z+{!r} file is extracted into {!r} directory.rrr)rz.tgzz.xzz.txzz.bz2z.tbzz.tbz2z.tb2zw:rxz{!r} file created.)argparseArgumentParser add_argumentrZadd_mutually_exclusive_group parse_argsrrexitZtestrrrrkrir8rrSr{rr2rzcurdirZ format_helprZcreatepopr%splitextr)rHr>parserrsargsr_rZtfrMr:Ztar_namer}ZextZ compressionsZtar_modeZ tar_files file_namer8r8r9main s                       rS__main__)T)lversion __author__ __credits__builtinsrrrirzrrZrrrVrrewarningsrrrAttributeErrorNotImplementedErrorr(r NameError__all__r3rrr0r+r-r,rArrUrrrCrDrrZCONTTYPEr3r2rVr;r=rdr rrrrgrrYrrvr8rIrrr getfilesystemencodingr:r?rNrTrXr[rl Exceptionrr rrr r rqrrrsrKrtrurobjectrrBufferedReaderrrrrrrrrrr r rrcompilerqrrrrSrnr8r8r8r9 s:          sh  ?   _