a
    zeo                     @   s   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZg dZdZej	
drVdZne ZG dd deZe jdd	 Zd
d ZdddZdddZdd ZdddZedkre  dS )    N)ZipAppErrorcreate_archiveget_interpreterz8# -*- coding: utf-8 -*-
import {module}
{module}.{fn}()
winutf-8c                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r
   r
   /usr/lib/python3.9/zipapp.pyr   !   s   r   c                 c   sL   t | ttjfrBt| |}|V  W d    qH1 s60    Y  n| V  d S N)
isinstancestrosPathLikeopen)archivemodefr
   r
   r   _maybe_open%   s    &r   c                 C   s$   |r d| t d }| | d S )N   #!   
)encodeshebang_encodingwrite)r   interpreterZshebangr
   r
   r   _write_file_prefix.   s    r   c              	   C   s   t | dx}|d}|dkr*d}|  t |d0}t|| || t|| W d    n1 sj0    Y  W d    n1 s0    Y  |rt|trt	
|t	|jtjB  d S )Nrb   r       wb)r   readreadliner   r   shutilcopyfileobjr   r   r   chmodstatst_modeS_IEXEC)r   Znew_archiver   srcZfirst_2dstr
   r
   r   _copy_archive5   s    


Hr+   Fc              	   C   s   d}t | drt | drd}nt| } |  r4d}|rHt| || d S |  sXtd| d  }|rt|rttd|s|stdd }|r|d	\}	}
}td
d |		dD }tdd |	dD }|
d	kr|r|std| t
j|	|d}|d u r| d}nt |ds"t|}t|d}t|| |rDtjntj}tj|d|dh}| dD ]4}|| }|d u s||rf|||  qf|r|d|d W d    n1 s0    Y  W d    n1 s0    Y  |rt |ds|| jtjB  d S )NFr!   r"   TzSource does not existz__main__.pyz8Cannot specify entry point if the source has __main__.pyzArchive has no entry point:c                 s   s   | ]}|  V  qd S r   isidentifier.0partr
   r
   r   	<genexpr>{   r   z!create_archive.<locals>.<genexpr>.c                 s   s   | ]}|  V  qd S r   r-   r/   r
   r
   r   r2   |   r   zInvalid entry point: )modulefnz.pyzr   r    w)compression*r   )hasattrpathlibPathis_filer+   existsr   	partitionallsplitMAIN_TEMPLATEformatwith_suffixr   r   zipfileZIP_DEFLATEDZ
ZIP_STOREDZipFilerglobrelative_tor   as_posixZwritestrr   r%   r&   r'   r(   )sourcetargetr   mainfilter
compressedZsource_is_fileZhas_mainZmain_pymodsepr5   Zmod_okZfn_okfdr7   zchildZarcnamer
   r
   r   r   L   sX    




Rr   c                 C   s\   t | d>}|ddkr:|  tW  d    S W d    n1 sN0    Y  d S )Nr   r   r   )r   r!   r"   stripdecoder   )r   r   r
   r
   r   r      s    r   c                 C   s<  dd l }| }|jddd dd |jddd dd |jd	d
d dd |jddddd |jddddd |jddd || } | jrtj| jst	dt
| j}td|pd td tj| jr| jd u stj| jrtj| j| jrt	d| jrt	dt| j| j| j| j| jd d S )Nr   z--outputz-ozAThe name of the output archive. Required if SOURCE is an archive.)defaulthelpz--pythonz-pzEThe name of the Python interpreter to use (default: no shebang line).z--mainz-mzLThe main function of the application (default: use an existing __main__.py).z
--compressz-c
store_truezQCompress files with the deflate method. Files are stored uncompressed by default.)actionrW   z--infoFz)Display the interpreter from the archive.)rV   rY   rW   rJ   z'Source directory (or existing archive).)rW   z%Can only get info for an archive filezInterpreter: {}z<none>z-In-place editing of archives is not supportedz,Cannot change the main function when copying)r   rL   rN   )argparseArgumentParseradd_argument
parse_argsinfor   pathisfilerJ   
SystemExitr   printrB   sysexitoutputr=   samefilerL   r   Zpythoncompress)argsrZ   parserr   r
   r
   r   rL      sL    








rL   __main__)N)NNNNF)N)
contextlibr   r:   r#   r&   rc   rD   __all__rA   platform
startswithr   getfilesystemencoding
ValueErrorr   contextmanagerr   r   r+   r   r   rL   r   r
   r
   r
   r   <module>   s.   


  
J
1