o
     JAfo                     @   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r+d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r`e  dS 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.10/zipapp.pyr   !   s    r   c                 c   sR    t | ttjfr$t| |}|V  W d    d S 1 sw   Y  d S | 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 d S )N   #!   
)encodeshebang_encodingwrite)r   interpreterZshebangr
   r
   r   _write_file_prefix.   s
   r   c              	   C   s   	 t | d<}|d}|dkrd}|  t |d}t|| || t|| W d    n1 s6w   Y  W d    n1 sEw   Y  |r`t|trbt	
|t	|jtjB  d S d S 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    


r+   Fc              	   C   s  	 d}t | drt | drd}nt| } |  rd}|r%t| || d S |  s-td| d  }|r;|r;td|sC|sCtdd }|r||d	\}	}
}td
d |		dD }tdd |	dD }|
d	kro|ro|sutd| t
j|	|d}|d u r| d}n
t |dst|}t|dU}t|| |rtjntj}tj|d|d0}| dD ]}|| }|d u s||r|||  q|r|d|d W d    n1 sw   Y  W d    n1 sw   Y  |rt |ds
|| jtjB  d S d S 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       | ]}|  V  qd S r   isidentifier.0partr
   r
   r   	<genexpr>{       z!create_archive.<locals>.<genexpr>.c                 s   r-   r   r.   r0   r
   r
   r   r3   |   r4   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sepr7   Zmod_okZfn_okfdr9   zchildarcnamer
   r
   r   r   L   sf   





r   c                 C   s^   t | d }|ddkr|  tW  d    S W d    d S 1 s(w   Y  d S )Nr   r   r   )r   r!   r"   stripdecoder   )r   r   r
   r
   r   r      s   "r   c                 C   s4  	 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rctj| jsPt	dt
| j}td|p[d td tj| jr| jd u stj| jrtj| j| jrt	d| jrt	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.)actionrZ   z--infoFz)Display the interpreter from the archive.)rY   r\   rZ   rL   z'Source directory (or existing archive).)rZ   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   rN   rP   )argparseArgumentParseradd_argument
parse_argsinfor   pathisfilerL   
SystemExitr   printrD   sysexitoutputr?   samefilerN   r   Zpythoncompress)argsr]   parserr   r
   r
   r   rN      sN   









rN   __main__r   )NNNNF)
contextlibr   r<   r#   r&   rf   rF   __all__rC   platform
startswithr   getfilesystemencoding
ValueErrorr   contextmanagerr   r   r+   r   r   rN   r   r
   r
   r
   r   <module>   s2    



J
1
