JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbra XC?h @sdZdZdZddlmZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZz ddlZWneydZYn0z ddlZWneydZYn0eefZzeef7ZWneyYn0gdZdZdZed Zd Zd Zd Zd Zd Z dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2e2Z3e!e"e#e$e'e(e)e%e&e*e+e,f Z4e!e"e)e,fZ5e*e+e,fZ6dZ7hdZ8e9e9e9e:e:e:d Z;ejZ=d#d$Z?d%d&Z@d'd(ZAd)e3fd*d+ZBd,d-ZCdedfd.d/ZDd0d1ZEGd2d3d3eFZGGd4d5d5eGZHGd6d7d7eGZIGd8d9d9eGZJGd:d;d;eGZKGdd?d?eLZMGd@dAdAeLZNGdBdCdCeLZOGdDdEdEeLZPGdFdGdGeLZQGdHdIdIZRGdJdKdKZSGdLdMdMeTZUGdNdOdOeTZVGdPdQdQejWZXGdRdSdSeGZYGdTdUdUeYZZGdVdWdWeYZ[GdXdYdYeYZ\GdZd[d[eYZ]Gd\d]d]eYZ^Gd^d_d_eYZ_eYeeHfZ`dtdadbZadcddZbdedfZcdgdhZdebeceddiZeeTZfegdjZhGdkdldleTZiGdmdndneTZjdodpZkejjZdqdrZlemdskreldS)uz0.9.0u"Lars Gustäbel (lars@gustaebel.de)u4Gustavo Niemeyer, Niels Gustäbel, Richard Townsend.)openN)TarFileTarInfo is_tarfileTarError ReadErrorCompressionError StreamError ExtractError HeaderErrorENCODING USTAR_FORMAT GNU_FORMAT PAX_FORMATDEFAULT_FORMATrisustar sustar00d01234567LKSxgX)pathlinkpathsizemtimeuidgidunamegname>r+r%r,r&)Zatimectimer(r)r*r'ntutf-8cCs8|durtd|||}|d||t|tS)Nzmetadata cannot contain None) ValueErrorencodelenNUL)slengthencodingerrorsr8,/opt/alt/python39/lib64/python3.9/tarfile.pystns r:cCs*|d}|dkr|d|}|||S)Nr)finddecode)r4r6r7pr8r8r9ntss  r?cCs|ddvrbd}tt|dD]}|dK}|||d7}q |ddkrdt|d| }n>z"t|dd}t|p|d d}Wntytd Yn0|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|dur.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}|dur(||d|}t|dddS)Nr6backslashreplace )end)getattrsysstdoutr1r=print)r4r6r8r8r9 _safe_printsrlc@s eZdZdS)rN__name__ __module__ __qualname__r8r8r8r9rsrc@s eZdZdS)r Nrmr8r8r8r9r sr c@s eZdZdS)rNrmr8r8r8r9rsrc@s eZdZdS)rNrmr8r8r8r9rsrc@s eZdZdS)r Nrmr8r8r8r9r sr c@s eZdZdS)r Nrmr8r8r8r9r sr c@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|_|durt||}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 |dur|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__rr8r8rr9rsrcseZdZfddZZS)LinkFallbackErrorcs2||_||_td|jdd|ddS)Nzlink z would be extracted as a zcopy of z, which was rejectedrrrr8r9rs  zLinkFallbackError.__init__rr8r8rr9rsrTcCs"i}|j}tjj|tjjd}|dtjfrH|jdtj}|d<tj|r\t |tjjtj ||tjjd}tj ||g|krt |||j }|dur|d@}|r|s|r|d@s|dM}|dO}n|s|rd}nt|||j kr||d<|r|jdur*d|d <|jdur>d|d <|jdurRd|d <|jdurfd|d <|sz|rtj|jrt|tj|j}||jkr||d <|rtj |tj||j}ntj ||j}tjj|tjjd}tj ||g|krt|||S)N)rE/ri@irr)r*r+r,linkname)rrzr%realpath ALLOW_MISSINGrseplstripisabsrr commonpathrrisregislnkisdirissymrr)r*r+r,rrnormpathdirnamer)member dest_pathZfor_data new_attrsrZ target_pathrZ normalizedr8r8r9_get_filtered_attrssl             r cCs|Srr8)rrr8r8r9fully_trusted_filter@sr cCs,t||d}|r(|jfi|ddiS|S)NFdeepr rrrr r8r8r9 tar_filterCs rcCs,t||d}|r(|jfi|ddiS|S)NTr Fr rr8r8r9 data_filterIs 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,rrrrrrrrr8r8r9rs"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|} || ur(|| _|| ur6|| _|| urD|| _|| urR|| _|| ur`|| _|| urn|| _|| ur||| _|| ur|| _ | Sr) copyZdeepcopyrr(rrr)r*r+r,) rrr(rrr)r*r+r,r rresultr8r8r9rs(  zTarInfo.replacecCs|jdurd}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]\}}|durtd|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_LONGLINKr0GNUTYPE_LONGNAMEr2r)rr#r6r7rWr8r8r9r(szTarInfo.create_gnu_headerc CsLt|d<|j}ddtfddtfddfD]h\}}}||vr>q*z||dd Wn"tyt||||<Yq*Yn0t|||kr*||||<q*d D]\}}d }||} t| t } | rt | n| } d | krd |dksnd ||<d}n| r| ||<d}|r||vrt | ||<q|r4| |t |} nd} | ||tddS)Nr,rr%rr&)r+r+ )r,r,r7rDrE))r)rB)r*rB)r' )r(r8FrrBr#Trr)r.rrr0r/r1UnicodeEncodeErrorr2 isinstancefloatroundstr_create_pax_generic_headerXHDTYPEr2r ) rr#r6rrZhnamer5rRZ needs_paxvalZ val_is_floatZval_intrWr8r8r9r)s>       zTarInfo.create_pax_headercCs||tdS)Nr/)r>XGLTYPE)clsrr8r8r9create_pax_global_headerMsz TarInfo.create_pax_global_headercCs~|d}tdt|D]T}d|d|}d||d}t|||tkrt|||tkrqvqtd||fS)Nrr#zname is too long)splitrHr2rr1 LENGTH_PREFIXr0r0)rrr6r7Z componentsrMr-r8r8r9r1Ss zTarInfo._posix_split_namec Cs|dttfv}|r@t|ddd|}t|ddd|}ntdd||}tdd||}|dt}|durxtdt|ddd ||t|d dd @d|t|d dd|t|d dd|t|ddd|t|ddd|d|t|ddd |||dtt|ddd||t|ddd||||t|ddd||g}t dt d |} t | t dd} | ddt d| d| dd} | S)NrrrrBrrzTarInfo.type must not be Nonerrrr!r)r*r'r8r(s rr,r+r7r,r-rz%dsriz%06orDi)getCHRTYPEBLKTYPErTr:rr0r.rVrrrrXrO) r#rSr6r7Zhas_device_fieldsrrZfiletypepartsrWrr8r8r9r2cs:  &zTarInfo._create_headercCs.tt|t\}}|dkr*|t|t7}|S)Nr)r\r2rr3)Zpayloadrbrcr8r8r9_create_payloadszTarInfo._create_payloadcCsR|||t}i}d|d<||d<t||d<t|d<||t||||S)Nz ././@LongLinkrrr'r,)r1r3r2r3r2r rJ)rBrrr6r7r#r8r8r9r4s zTarInfo._create_gnu_long_headerc Cs0d}|D]6\}}z|ddWq ty@d}YqDYq 0q d}|rT|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&r1r9r2r=rOr.r2r rJ) rBrrr6Zbinarykeywordr*ZrecordslrLr>r#r8r8r9r>s<   ( z"TarInfo._create_pax_generic_headerc Cstt|dkrtdt|tkr(td|ttkr>tdt|dd}|t|vrbt 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|_|jtkr6d}g}tdD]j} z0t|||d} t||d|d} WntyYqYn0|| | f|d7}qt|d} t|dd} || | f|_ |!rN|j "d|_ |rp|jt#vrp|d|j |_ |S)Nrz empty headerztruncated headerzend of file headerz bad checksumrlt|ii i)iIiQiYirirr8iii)$r2rqrrrcountr3rsrNrXrKr?rrr)r*r'r(rrrr+r,rrAREGTYPErr"GNUTYPE_SPARSErHr0rboolrrrstrip GNU_TYPES)rBrWr6r7robjr-rstructsrMrnumbytes isextendedorigsizer8r8r9frombufsZ         zTarInfo.frombufcCs8|jt}|||j|j}|jt|_||Sr) rr]rrcr6r7rr _proc_member)rBrrWr^r8r8r9 fromtarfiles zTarInfo.fromtarfilecCsT|jttfvr||S|jtkr,||S|jtttfvrF| |S| |SdSr) rr6r5 _proc_gnulongrZ _proc_sparser?rASOLARIS_XHDTYPE _proc_pax _proc_builtin)rrr8r8r9rd/s    zTarInfo._proc_membercCsR|j|_|j}|s$|jtvr4|||j7}||_| |j |j |j |Sr) rrrrrSUPPORTED_TYPES_blockr'r_apply_pax_inforr6r7)rrrr8r8r9rj<s zTarInfo._proc_builtincCs|j||j}z||}Wnty<tdYn0|j|_|jt krdt ||j |j |_ n|jtkrt ||j |j |_|S)N missing or bad subsequent header)rr]rlr'rer rtrrr6r?r6r7rr5r)rrrWnextr8r8r9rfMs   zTarInfo._proc_gnulongc Cs|j\}}}|`|r|jt}d}tdD]l}z0t|||d}t||d|d} WntyxYqYn0|r| r||| f|d7}q,t|d}q||_ |j |_ |j | |j |_||_ |S)Nrr8rWi)rrr]rrHrNr0rr[rrrrlr'r) rrr_rarbrWrrMrr`r8r8r9rgcs(       zTarInfo._proc_sparsecCs|j||j}|jtkr&|j}n |j}d}d}g}t||krh||dkrht ||}spt dzt | d}Wntyt dYn0|dkrt d||t|krt d|d|d} ||dd| } | d\} } } | r| dks|| dkr$t d||| | f| dkr^|dur^| dkrZ|j}nd }||7}q<|durvd }|D]X\}} } || d d |j}|tvr|| ||j|j}n|| d d |j}|||<qzz||}Wntytd Yn0d |vr|||nFd |vr0|||n.|d dkr^|ddkr^|||||jttfvr| ||j|j|j!|_!d|vr|j"}|#s|jt$vr|||j7}||_!|S)NrrGr#rLrs hdrcharsetsBINARYr/rnGNU.sparse.mapGNU.sparse.sizezGNU.sparse.major1zGNU.sparse.minorrFr')%rr]rlr'rrArrr2_header_length_prefix_rematchrKrIgroupr0rrg partitionrr6_decode_pax_fieldr7PAX_NAME_FIELDSrer rt_proc_gnusparse_01_proc_gnusparse_00rF_proc_gnusparse_10r?rhrmrrrrk)rrrWrrr6 raw_headersrvr5Zheader_value_end_offsetZkeyword_and_valueZ raw_keywordZequalsZ raw_valuerNr*rorr8r8r9ris|                zTarInfo._proc_paxc Csg}g}|D]\}}}|dkrRz|t|WqtyNtdYq0q |dkr z|t|Wq tytdYq 0q tt|||_dS)NsGNU.sparse.offsetrGsGNU.sparse.numbytes)rrIr=r0rKlistzipr)rror~Zoffsetsr`_rNr*r8r8r9r|s  zTarInfo._proc_gnusparse_00cCs@dd|ddD}tt|ddd|ddd|_dS)NcSsg|] }t|qSr8)rI).0xr8r8r9 rz.TarInfo._proc_gnusparse_01..rr,r$r#)rDrrr)rrorrr8r8r9r{ szTarInfo._proc_gnusparse_01cCsd}g}|jt}|dd\}}t|}t||dkrtd|vrT||jt7}|dd\}}|t|q,|j|_t t |ddd|ddd|_ dS)NrMr#r$) rr]rrDrIr2rrrrrr)rrorrfieldsrrWZnumberr8r8r9r}s  zTarInfo._proc_gnusparse_10c Cs|D]\}}|dkr&t|d|q|dkr@t|dt|q|dkrZt|dt|q|tvr|tvrzt||}Wntyd}Yn0|dkr|d}t|||q||_dS)NzGNU.sparse.namer%rsr'zGNU.sparse.realsizerr) r&setattrrI PAX_FIELDSPAX_NUMBER_FIELDSr0r\rr)rrr6r7rNr*r8r8r9rm"s"   zTarInfo._apply_pax_infocCs2z||dWSty,|||YS0dS)NrE)r=UnicodeDecodeError)rr*r6Zfallback_encodingZfallback_errorsr8r8r9ry9s zTarInfo._decode_pax_fieldcCs"t|t\}}|r|d7}|tS)Nr#)r\r)rrXrbrcr8r8r9rlAszTarInfo._blockcCs |jtvSr)r REGULAR_TYPESrr8r8r9rJsz TarInfo.isregcCs|Sr)rrr8r8r9isfileNszTarInfo.isfilecCs |jtkSr)rr"rr8r8r9rRsz TarInfo.isdircCs |jtkSr)rSYMTYPErr8r8r9rVsz TarInfo.issymcCs |jtkSr)rLNKTYPErr8r8r9rZsz TarInfo.islnkcCs |jtkSr)rrGrr8r8r9ischr^sz TarInfo.ischrcCs |jtkSr)rrHrr8r8r9isblkbsz TarInfo.isblkcCs |jtkSr)rFIFOTYPErr8r8r9isfifofszTarInfo.isfifocCs |jduSr)rrr8r8r9issparsejszTarInfo.issparsecCs|jtttfvSr)rrGrHrrr8r8r9isdevmsz TarInfo.isdev)r)3rnrorpdict __slots__rpropertyr%setterr&rrrr$rr r+r'r(r) classmethodrCr1 staticmethodr2rJr4r>rcrerdrjrfrgrir|r{r}rmryrlrrrrrrrrrrr8r8r8r9r_s       :  )   2 >  y rc @seZdZdZdZdZdZeZe Z dZ e Z eZdZdjddZedddefd d Zedkd d ZedlddZedmddZednddZdddddZddZddZddZdd Zdod!d"Zdpdd$d%d&Zdqdd'd(d)Z drd*d+Z!d,d-Z"dsddd/d0d1Z#d2d3Z$dtddd/d5d6Z%d7d8Z&dud9d:Z'd;d<Z(d=d>Z)d?d@Z*dvdddAdBdCZ+dDdEZ,dFdGZ-dHdIZ.dJdKZ/dLdMZ0dNdOZ1dPdQZ2dRdSZ3dTdUZ4dVdWZ5dXdYZ6dwdZd[Z7d\d]Z8dxd^d_Z9d`daZ:dbdcZ;dddeZdS)yrrFr#Nrwr%c Csddddd}||vrtd||_|||_|sh|jdkrTtj|sTd|_d|_t||j}d |_n@|durt|d rt |j t t fr|j }t|d r|j|_d |_|rtj |nd|_ ||_|dur||_|dur||_|dur||_|dur||_|dur ||_| |_| dur0|jtkr0| |_ni|_| durF| |_| durV| |_| |_d |_g|_d |_|j|_i|_z|jd krd|_ |!|_ |jdkr2|j"|jz|j#|}|j$|WnXt%y|j"|jYq2Yn2t&y,}zt't |WYd}~n d}~00q|jdvr|d |_|jr||j(|j)}|j*||jt+|7_Wn&|js|j,d |_Yn0dS)Nrbzr+bwbZxbrwarxr!mode must be 'r', 'a', 'w' or 'x'rrxFrrTrwrrxr)-r0r_moderzr%exists bltn_openrrr:rr=rOabspathrrSr dereference ignore_zerosr6r7rrdebug errorlevel copybufsizermembers_loadedrrinodes firstmemberrorrerrsr rrCrr^r2r)rrrrrSrrrr6r7rrrrZmodeserWr8r8r9rs             &   zTarFile.__init__c s|s|std|dvrfdd}tj|dD]l}tj|}|durV|} z||d|fi|WSttfy|dur|| Yq2Yq20q2tdnd|vr|dd \} }| pd} |pd }|jvrtj|}n td |||| |fi|Sd |vr|d d \} }| p4d} |p>d }| d vrRtdt || |||} z|| | fi|} Wn| Yn0d| _ | S|dvrj |||fi|StddS)Nznothing to open)rwr:*csj|dkS)Ntaropen) OPEN_METH)rrBr8r9not_compressed'sz$TarFile.open..not_compressed)keyrwz%file could not be opened successfully:r#rr|rvzmode must be 'r' or 'w'Frzundiscernible mode) r0sortedrrhrrrrrDrrrr) rBrrrrakwargsrrfuncZ saved_posfilemodestreamrr8rr9rsP%            z TarFile.opencKs$|dvrtd||||fi|S)Nrr)r0)rBrrrrr8r8r9rXszTarFile.taropenrcKs|dvrtdzddlm}Wnty:tdYn0z|||d||}Wn,ty~|durx|dkrxtdYn0z|j|||fi|}Wn@ty||dkrtdYn|Yn0d |_ |S) Nrwrxrmode must be 'r', 'w' or 'x'r)GzipFilezgzip module is not availablerdrwrF) r0Zgziprrrrrrrr)rBrrr compresslevelrrrr8r8r9gzopen`s0   zTarFile.gzopenc Ks|dvrtdzddlm}Wnty:tdYn0||pD|||d}z|j|||fi|}WnDttfy||dkrt dYn|Yn0d |_ |S) Nrrr)BZ2Filer)rrwznot a bzip2 fileF) r0rrrrrrEOFErrorrrr)rBrrrrrrrr8r8r9bz2opens& zTarFile.bz2openc Ks|dvrtdzddlm}m}Wnty>tdYn0||pH|||d}z|j|||fi|}WnD|tfy||dkrt dYn|Yn0d |_ |S) Nrrr)LZMAFilerr)presetrwznot an lzma fileF) r0rrrrrrrrrr) rBrrrrrrrrr8r8r9xzopens& zTarFile.xzopenrrrr)rrrrcCs|jr dSd|_zp|jdvrn|jttd|jtd7_t|jt\}}|dkrn|jtt|W|j s|j n|j s|j 0dS)NTrr$r) rrrr^r3rrr\ RECORDSIZErr)rrbrcr8r8r9rs  z TarFile.closecCs(||d}|dur$td||S)Nrzfilename %r not found) _getmemberr\KeyError)rrrr8r8r9 getmembers zTarFile.getmembercCs||js||jSr)_checkr_loadrrr8r8r9 getmembersszTarFile.getmemberscCsdd|DS)NcSsg|] }|jqSr8r)rrr8r8r9rrz$TarFile.getnames..)rrr8r8r9getnamesszTarFile.getnamesc CsZ|d|dur|j}|dur$|}tj|\}}|tjd}|d}|}||_ |dur|j stt |}qt |}nt |}d}|j}t |r|j|jf} |j s|jdkr| |jvr||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|_/Wnt0yYn0t1rzt12|j&d|_3Wnt0yYn0| tt!fvrVt4tdrVt4tdrVt5|j6|_7t8|j6|_9|S)Nawxrrr#rmajorminor):rrrzr% splitdriverrrrrrlstatstatfstatfilenost_modeS_ISREGst_inost_devst_nlinkrrrS_ISDIRr"S_ISFIFOrS_ISLNKrreadlinkS_ISCHRrGS_ISBLKrHrst_uidr)st_gidr*st_sizer'st_mtimer(rrpwdgetpwuidr+rgrpZgetgrgidr,rrst_rdevrrr) rrarcnamerZdrvrZstatresrZstmdinoderr8r8r9 gettarinfos                 zTarFile.gettarinfoT)rcCs*||dur|}|D] }|r|jdur6tdntt|jtd|jpT|j|jp^|jf| sv| rtdd|j |j fntd|j |jdurtdntdt|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)rverboserrr8r8r9rWs8        z TarFile.listfiltercCsL|d|dur|}|jdurFtj||jkrF|dd|dS|d||||}|durz|dd|dS|dur||}|dur|dd|dS|rt|d}| ||Wdn1s0Ynb| r>| ||rHt t |D],}|j tj||tj||||dqn | |dS) Nrr$ztarfile: Skipped %rr#ztarfile: Unsupported type %rtarfile: Excluded %rrr)rrrzr%r_dbgrrraddfilerrlistdiraddr)rrr recursiverrfr8r8r9r}s6    ,   z TarFile.addcCs|dt|}||j|j|j}|j||jt |7_|j }|durt ||j|j |dt |j t\}}|dkr|jtt||d7}|j|t7_|j|dS)Nr)rarr#)rrr+rSr6r7rr^rr2rr[r'r\rr3rr)rrrrWrarbrcr8r8r9rs   zTarFile.addfilecCsp|dur0|j}|durtSt|tr,td|St|r<|Sz t|WStyjtd|ddYn0dS)NzrString names are not supported for TarFile.extraction_filter. Use a function such as tarfile.data_filter directly.zfilter z not found) extraction_filterr r:r= TypeErrorcallable_NAMED_FILTERSrr0)rrr8r8r9_get_filter_functions   zTarFile._get_filter_function.) numeric_ownerrc Csg}||}|dur|}|D]L}||||\}} |dur>q|rP|| |j||| ||dq|jdddd|D]0} zz|| |}WnBty} z*|| t| WYd} ~ WqWYd} ~ n d} ~ 00|dur|| dWqt j ||j } zt | } Wn&ty8||dYWqYn0t| jsX||dWq|j|| |d ||| ||| Wqty} z|| WYd} ~ qd} ~ 00qdS) N) set_attrsrfilter_functioncSs|jSrr)rr8r8r9rz$TarFile.extractall..T)rreversezexcluded by filterZmissingznot a directory)r)r_get_extract_tarinforr _extract_onesort_FILTER_ERRORS_log_no_directory_fixupreprrzr%rrrFileNotFoundErrorrrrchownutimechmodr _handle_nonfatal_error)rr%rrrZ directoriesrrr unfilteredexcdirpathrrr8r8r9 extractallsV   $    zTarFile.extractallcCs|dd|j|fdS)Nr$z(tarfile: Not fixing up directory %r (%s))rr)rrreasonr8r8r9r szTarFile._log_no_directory_fixuprc Cs8||}||||\}}|dur4|||||dSr)rrr) rrr%rrrrrrr8r8r9extract$ s  zTarFile.extractc Cst|tr||}n|}d}z|||}Wn^ttfy^}z||WYd}~n6d}~0ty}z||WYd}~n d}~00|dur|dd|j dS| rt |}t j ||j|_||fS)Nr$r)NN)r:r=rrr_handle_fatal_errorr r rrrrrzr%rrr)rrrr%rfilteredrr8r8r9r8 s"    zTarFile._get_extract_tarinfoc Cs|dz&|j|tj||j||||dWnZty^}z||WYd}~n6d}~0ty}z| |WYd}~n d}~00dS)Nrw)rrrextraction_root) r_extract_memberrzr%rrrrr r )rrr%rrrrr8r8r9rV s  zTarFile._extract_onecCs"|jdkrn|dd|dS)Nr# tarfile: %s)rrrrr8r8r9r j s zTarFile._handle_nonfatal_errorcCsn|jdkrn\t|trP|jdur6|dd|jqj|dd|j|jfn|ddt|j|fdS)Nrr#rztarfile: %s %rztarfile: %s %s)rr:rfilenamerstrerrorrrnrr8r8r9rq s   zTarFile._handle_fatal_errorcCs|dt|tr ||}n|}|s6|jtvrB|||S|sR| rzt|j t rht dq~| ||SndSdS)Nrwz'cannot extract (sym)link as file object)rr:r=rrrrk fileobjectrrrrr extractfile_find_link_target)rrrr8r8r9r} s      zTarFile.extractfilerrcCsZ|d}|dtj}tj|}|r>tj|s>t||sN| rh| dd|j |j fn| d|j | r|||n|r|||n~|r|||nh|s|r|||nJ|s| r|j||||dn&|jtvr|||n ||||rV||||| sV||||||dS)Nrr#z%s -> %sr)r\rrzrr%rrmakedirsrrrrrrmakefilermakedirrmakefiforrmakedevmakelink_with_filterrrk makeunknownr r r )rr targetpathrrrrZ upperdirsr8r8r9r s<       zTarFile._extract_membercCs>z&|jdurt|n t|dWnty8Yn0dS)Ni)rrzmkdirFileExistsErrorrrr'r8r8r9r" s    zTarFile.makedircCs|j}||j|j}t|dl}|jdurn|jD]"\}}||t|||t|q4||j| nt|||jt|Wdn1s0YdS)Nr) rrrrrrr[rr'truncate)rrr'sourceratargetrr'r8r8r9r! s      zTarFile.makefilecCs"||||dd|jdS)Nr#z9tarfile: Unknown file type %r, extracted as regular file.)r!rrr*r8r8r9r& s zTarFile.makeunknowncCs"ttdrt|ntddS)Nmkfifozfifo not supported by system)rrzr.r r*r8r8r9r# s  zTarFile.makefifocCsjttdrttdstd|j}|dur.d}|rB|tjO}n |tjO}t||t |j |j dS)Nmknodr$z'special devices not supported by systemr) rrzr rrrS_IFBLKS_IFCHRr/r$rr)rrr'rr8r8r9r$ s  zTarFile.makedevcCs|||ddSr)r%r*r8r8r9makelink szTarFile.makelinkc Cs(d}zX|r8tj|r$t|t|j|WdStj|jrZt |j|WdSWnt yrd}Yn0z| |}Wn"t y|rt dnYn0|dur|}nT|durt dz|||}Wn4ty}zt||j|WYd}~n d}~00|dur$|j||||ddS)NFTz%unable to resolve link inside archivez[makelink_with_filter: if filter_function is not None, extraction_root must also not be Noner)rrzr%lexistsunlinksymlinkrrrlinksymlink_exceptionrrr rrrr) rrr'rrZkeyerror_to_extracterrorrrcauser8r8r9r% sF       $ zTarFile.makelink_with_filtercCsttdrtdkr|j}|j}|sztrB|jrBt|jd}WntyVYn0zt rt|j rtt |j d}WntyYn0|durd}|durd}z4| rttdrt |||nt|||WntytdYn0dS)Ngeteuidrr$r;lchownzcould not change owner)rrzr9r*r)rr,Zgetgrnamrrr+getpwnamrr:r rr )rrr'rgur8r8r9r J s0     z TarFile.chowncCs@|jdurdSzt||jWnty:tdYn0dS)Nzcould not change mode)rrzr rr r*r8r8r9r k s   z TarFile.chmodcCsT|j}|durdSttds dSzt|||fWntyNtdYn0dS)Nr z"could not change modification time)r(rrzr rr )rrr'r(r8r8r9r u s  z TarFile.utimec Csl|d|jdur$|j}d|_|S|j|jkrZ|j|jd|jdsZtdd}z|j |}WqJt y}zD|j r| dd|j|f|jt 7_WYd}~q^WYd}~qJd}~0tyD}z`|j r| dd|j|f|jt 7_WYd}~q^n|jdkr.tt|WYd}~qJd}~0tyj|jdkrftdYnty}z$|jdkrtt|WYd}~nd}~0ty}ztt|WYd}~nvd}~0tyB}zTz.ddl}t||jrtd|n|Wnty,|Yn0WYd}~n d}~00qJq^|durb|j|nd |_|S) NZrar#rYr$z0x%X: %srz empty filez zlib error: T)rrrrrrr]rrrersrrrrKr=rqrrrt Exceptionrr:rrrrr)rmrrrr8r8r9ro sZ   " "       z TarFile.nextc Cs|}d}|durFz||}Wnty8d}Yn0|d|}|rVtj|}t|D]D}|rx|j|jkr^d}q^|rtj|j}n|j}||kr^|Sq^|rt|dS)NFT) rindexr0rzr%rreversedrr) rrr normalizerZskippingr@r member_namer8r8r9r s,       zTarFile._getmembercCs|}|durqqd|_dSr)rorrr8r8r9r sz TarFile._loadcCs:|jrtd|jj|dur6|j|vr6td|jdS)Nz %s is closedzbad operation for mode %r)rrrrnr)rrr8r8r9r szTarFile._checkcCs`|r.dtdtj|j|jf}d}n |j}|}|j||dd}|dur\t d||S)NrT)rrBzlinkname %r not found) rrrrzr%rrrrr)rrrlimitrr8r8r9r s  zTarFile._find_link_targetccs|jr|jEdHdSd}|jdur:|}|d7}|V|t|jkrT|j|}n"|jsr|}|svd|_dSndS|d7}|Vq:dS)Nrr#T)rrrror2)rr@rr8r8r9__iter__ s$   zTarFile.__iter__cCs||jkrt|tjddS)Nfile)rrkristderr)rlevelmsgr8r8r9r/ s z TarFile._dbgcCs ||Sr)rrr8r8r9 __enter__5 szTarFile.__enter__cCs,|dur|n|js"|jd|_dSr)rrrr)rrr* tracebackr8r8r9__exit__9 s   zTarFile.__exit__) NrwNNNNNNr%NNNN)rwN)rwNr)rwNr)rwNN)NNN)T)NT)N)rN)rT)N)TF)NF)N)?rnrorprrrrrrSr r6r7rrrrrrrrrrrrrrrrrrrrrrrrrrrrr rrrr"r!r&r#r$r2r%r r r rorrrrrErrKrMr8r8r8r9rrs oZ        c&3  E     82! ? ( rcCsFz,t|drt|d}nt|}|WdSty@YdS0dS)Nr])rTF)rrrr)rrr8r8r9rG s   rc Cs`ddl}d}|j|d}|jdddddd |jd d td d |jdd}|jddddd|jdddddd|jdddddd|jdd dd!d|}|jr|jdur|d"d#|j durJ|j }t |r4t |d$*}| t | tjd%Wdn1s0Y|jrFt d&|n|d"d'|n|jdur|j}t |rt |d(}|j|jd)Wdn1s0Yn|d"d'|n|jdurt|jd"kr|jd}tj}n,t|jd*kr|j\}}n|d"|t |rt |d( }|j||jd+Wdn1sR0Y|jr|d,krzd-|} n d.||} t | n|d"d'|n|jdur\|jd} tj| \} } d/d/d0d0d1d1d1d1d2} | | vrd3| | nd4}|j}t | |&}|D]}||qWdn1s<0Y|jr\t d5| dS)6Nrz3A simple command-line interface for tarfile module.) descriptionz-vz --verbose store_trueFzVerbose output)actiondefaulthelpz--filterz zFilter for extraction)metavarchoicesrRT)Zrequiredz-lz--list zShow listing of a tarfile)rSrRz-ez --extract+)rUz zExtract tarfile into target dir)nargsrSrRz-cz--create)zzzCreate tarfile from sourcesz-tz--testzTest if a tarfile is validr#z&--filter is only valid for extraction rwrFz{!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_argsrrexittestrrrrkrirHrrSrrr2rzcurdirZ format_helprZcreatepopr%splitextr)rXrNparserrwargsr_rZtfr^rJZtar_namerZextZ compressionsZtar_modeZ tar_files file_namer8r8r9mainZ s           2  0    0      .rd__main__)T)nversion __author__ __credits__builtinsrrrirzrrZrrrVrrewarningsrrrAttributeErrorNotImplementedErrorr7r NameError__all__r3rrr3r.r0r/rErrYrrrGrHr"rZCONTTYPEr6r5rZr?rArhr rrrrkrr]rrzr;rIrrr getfilesystemencodingr:r?rNrTrXr[rlr>rr rrr r rqrrrsrKrtrurobjectrrBufferedReaderrrrrrrrrrr r rrrrcompilerurrrrdrnr8r8r8r9 s           sh   D  ^_