
    !hi$                         d Z ddlZddlZddlZddlZddlmZmZ 	 ddl	m
Z
  G d d      Zd Zed	k(  r e        yy# e$ r d Z
Y %w xY w)
z,
Viewer for PyInstaller-generated archives.
    N)CArchiveReaderZlibArchiveReader)autocompletec                      y N )parsers    UC:\des-py\Monitor\venv\Lib\site-packages\PyInstaller/utils/cliutils/archive_viewer.pyr   r      s        c                   F    e Zd Zd Zd Zd Zd Zd Zd ZddZ	dd	Z
d
 Zy)ArchiveViewerc                 r    || _         || _        || _        || _        g | _        | j                  rd| _        y y )NF)filenameinteractive_moderecursive_mode
brief_modestack)selfr   r   r   r   s        r
   __init__zArchiveViewer.__init__   s?      0,$
 $)D! r   c                    | j                  | j                        }t        j                  j	                  | j                        }| j
                  j                  ||f       | j                  s| j                         S | j                  ||       	 	 t        d      j                  d d      }|s| j!                          0|d   j#                         }|dk(  ry |dk(  r| j%                          nj|dk(  r | j&                  |dd    nR|dk(  r | j(                  |dd    n:|d	k(  r%| j
                  d
   \  }}| j                  ||       n| j!                          # t        $ r t        t        j                         Y y w xY w)Nz?    filer   QUOXS)_open_toplevel_archiver   ospathbasenamer   appendr   _non_interactive_processing_show_archive_contentsinputsplitEOFErrorprintsysstderr_print_usageupper_move_up_the_stack_open_embedded_archive_extract_file)r   archivearchive_nametokenscommands        r
   mainzArchiveViewer.main+   sh   --dmm<ww''6

<12 $$3355 	##L': t**43 !!# Qioo'G#~C'')C+++VABZ8C"""F12J/C(,

2%g++L'B!!#9   3::&s   E #F ?F c                     d}| j                   r| j                   j                         \  }}|dz  }|dkD  rt        d       | j                  ||       | j                  s]t        |t              rZ|j                  j                         D ]=  \  }^ }}|dk(  s	 |j                  |      }| j                   j                  |f       ? | j                   ry y # t        $ r+}t        d|d| t        j                         Y d }~]d }~ww xY w)Nr   r    z Could not open embedded archive : r   )r   popr*   r&   r   
isinstancer   tocitemsopen_embedded_archive	Exceptionr+   r,   r$   )	r   archive_countr3   r2   name_typecodeembedded_archivees	            r
   r%   z)ArchiveViewer._non_interactive_processingW   s   jj$(JJNN$4!L'QMq b	''g>&& '>2,3KK,=,=,? D(D.Ax3e/6/L/LT/R, 

))41A*BCD jj"  ) e!$DTHBqc"RY\YcYcddes   C	D"!DDc                    t        dt        j                         t        dt        j                         t        dt        j                         t        dt        j                         t        dt        j                         y )NzU: go up one levelr   z/O <name>: open embedded archive with given namez&X <name>: extract file with given namez-S: list the contents of current archive againzQ: quit)r*   r+   r,   )r   s    r
   r-   zArchiveViewer._print_usageo   sL    "4?cjjQ6SZZH=CJJOicjj)r   c                     t        | j                        dkD  r?| j                  j                          | j                  d   \  }}| j                  ||       y t	        dt
        j                         y )Nr   r   zAlready in the top archive!r   )lenr   r<   r&   r*   r+   r,   )r   r3   r2   s      r
   r/   z ArchiveViewer._move_up_the_stackv   sQ    tzz?QJJNN$(JJrN!L'''g>/cjjAr   c                     t         j                  j                  |      s4t        d| dt        j
                         t	        j                  d       |dd  j                         dk(  rt        |      S t        |      S )NzArchive z does not exist!r   r   z.pyz)
r!   r"   isfiler*   r+   r,   exitlowerr   r   )r   r   s     r
   r    z$ArchiveViewer._open_toplevel_archive~   sb    ww~~h'HXJ&67cjjIHHQKBC= F*$X..h''r   Nc                    |st        d      }|j                         }|sy | j                  d   \  }}t        |d      st	        dt
        j                         y 	 |j                  |      }| j                  j                  ||f       | j                  ||       y # t        $ r+}t	        d|d| t
        j                         Y d }~y d }~ww xY w)NzOpen name? r   r@   z+Archive does not support embedded archives!r   r:   r;   )r'   stripr   hasattrr*   r+   r,   r@   rA   r$   r&   )r   r3   rD   parent_archiver2   rG   s         r
   r0   z$ArchiveViewer._open_embedded_archive   s     /L#))+  !JJrN>~'>??cjjQ	$::<HG 	

<12##L':  	4\4DBqcJQTQ[Q[\	s   B 	C&!CCc           	      T   |st        d      }|j                         }| j                  d   \  }}	 t        |t              r|j                  |      }nHt        |t              r |j                  |d      }|#t        d      t        dt        |       d      t        d      }|st        t        |             y t        |d      5 }|j!                  |       d d d        y # t        $ r.}t        d|d	|d
| t        j                         Y d }~y d }~ww xY w# 1 sw Y   y xY w)NzExtract name? r   T)rawzEntry has no associated data!zExtraction from archive type z not implemented!z!Failed to extract data for entry z from r;   r   zOutput filename? wb)r'   rQ   r   r=   r   extractr   
ValueErrorNotImplementedErrortyperA   r*   r+   r,   repropenwrite)r   rC   r3   r2   datarG   r   fps           r
   r1   zArchiveViewer._extract_file   s   )*Dzz| !%

2g	'>2t,G%67t6<$%DEE),I$w-Xi*jkk ,-$t*h%    	5dXVLCSSUVWUXY`c`j`jk	 s$   A*C$ 	D$	D-$DDD'c                 ^   t        |t              r|j                  r.t        d|d       |j                  D ]  }t        d|         t        d|d       | j                  r.|j
                  j                         D ]  }t        d|         y t        d       |j
                  j                         D ](  \  }\  }}}}}	t        d| d| d| d| d|	d|       * y t        |t              rt        d|d       | j                  r.|j
                  j                         D ]  }t        d|         y t        d       |j
                  j                         D ]   \  }\  }	}}t        d|	 d| d| d|       " y t        d d	       t        d
t        |       d       y )NzOptions in z (PKG/CArchive): zContents of zE position, length, uncompressed_length, is_compressed, typecode, namez, z (PYZ):z! typecode, position, length, namez
 (unknown)z2FIXME: implement content listing for archive type !)
r=   r   optionsr*   r   r>   keysr?   r   rZ   )
r   r3   r2   optionrC   positionlengthuncompressed_lengthis_compressedrE   s
             r
   r&   z$ArchiveViewer._show_archive_contents   s   g~.L#33CDE%oo (FAfX,'(L 00@AB#KK,,. &DAdV*%& ]^^e^i^i^o^o^q tZDZ8V-@-QYAhZr&4G3H=/Y[\d[ggijniqrst!23L 089#KK,,. &DAdV*%& 9::A++:K:K:M J6D68XvAhZr(2fXRxHIJ Lj12FtG}oUVWXr   r   )__name__
__module____qualname__r   r6   r%   r-   r/   r    r0   r1   r&   r   r   r
   r   r      s3    
**$XD0*B(;6>Yr   r   c                  T   t        j                         } | j                  dddddd       | j                  dd	ddd
d       | j                  dddddd       t        j                  j                  |        | j                  ddd       t        |        | j                         }t        j                  j                  | |       	 t        |j                  |j                   |j                  |j                        }|j                          y # t        $ r t!        d      w xY w)Nz-lz--listF
store_truelisting_modez:List the archive contents and exit (default: %(default)s).)defaultactiondesthelpz-rz--recursive	recursivezHRecursively print an archive log (default: %(default)s). Implies --list.z-bz--briefbriefzOWhen displaying archive contents, show only file names. (default: %(default)s).r   pyi_archivezPyInstaller archive to process.)metavarrs   )r   r   r   r   zAborted by user.)argparseArgumentParseradd_argumentPyInstallerlog__add_optionsr   
parse_args__process_optionsr   r   ro   rt   ru   r6   KeyboardInterrupt
SystemExit)r	   argsviewers      r
   runr      s5   $$&F
I   W   ^   OO!!&)
.   DOO%%fd3	-]]!%!2!22>>zz	
 	 -+,,-s   	AD D'__main__)__doc__rx   r!   r+   PyInstaller.logr{   PyInstaller.archive.readersr   r   argcompleter   ImportErrorr   r   rj   r   r   r
   <module>r      sc     	 
  I(|Y |Y~.-b zE m  s   = AA