File: //lib64/python3.6/__pycache__/zipapp.cpython-36.pyc
3
  \�  �               @   s�   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZdddgZdZej	j
d�rXdZnej� ZG dd� de
�Ze jd	d
� �Zdd� Zdd
d�Zddd�Zdd� Zddd�Zedkr�e�  dS )�    N�ZipAppError�create_archive�get_interpreterz8# -*- coding: utf-8 -*-
import {module}
{module}.{fn}()
�winzutf-8c               @   s   e Zd ZdS )r   N)�__name__�
__module__�__qualname__� r	   r	   �/usr/lib64/python3.6/zipapp.pyr   !   s   c          	   c   sF   t | tj�rt| �} t | t�r<t| |��}|V  W d Q R X n| V  d S )N)�
isinstance�pathlib�Path�str�open)�archive�mode�fr	   r	   r
   �_maybe_open%   s    
r   c             C   s$   |r d|j t� d }| j|� dS )zWrite a shebang line.s   #!�   
N)�encode�shebang_encoding�write)r   �interpreterZshebangr	   r	   r
   �_write_file_prefix0   s    r   c             C   s�   t | d��Z}|jd�}|dkr*d}|j�  t |d��&}t||� |j|� tj||� W dQ R X W dQ R X |r�t|t�r�t	j
|t	j|�jtj
B � dS )z8Copy an application archive, modifying the shebang line.�rb�   s   #!�    �wbN)r   �read�readliner   r   �shutilZcopyfileobjr   r   �os�chmod�stat�st_mode�S_IEXEC)r   Znew_archiver   �srcZfirst_2�dstr	   r	   r
   �
_copy_archive7   s    
 r(   c             C   s�  d}t | d�rt | d�rd}ntj| �} | j� r4d}|rHt| ||� dS | j� sXtd��| d j� }|rt|rttd��|pz|s�td	��d}|r�|jd
�\}}}	tdd� |j	d
�D ��}
tdd� |	j	d
�D ��}|d
ko�|
o�|s�td| ��t
j||	d�}|dk�r| jd�}nt |d��s"tj|�}t
|d��~}t||� tj|d��\}
tj| �}x2|jd�D ]$}t|j|��}|
jt|�|� �q\W |�r�|
jd|jd�� W dQ R X W dQ R X |�r�t |d� �r�|j|j� jtjB � dS )ab  Create an application archive from SOURCE.
    The SOURCE can be the name of a directory, or a filename or a file-like
    object referring to an existing archive.
    The content of SOURCE is packed into an application archive in TARGET,
    which can be a filename or a file-like object.  If SOURCE is a directory,
    TARGET can be omitted and will default to the name of SOURCE with .pyz
    appended.
    The created application archive will have a shebang line specifying
    that it should run with INTERPRETER (there will be no shebang line if
    INTERPRETER is None), and a __main__.py which runs MAIN (if MAIN is
    not specified, an existing __main__.py will be used).  It is an error
    to specify MAIN for anything other than a directory source with no
    __main__.py, and it is an error to omit MAIN if the directory has no
    __main__.py.
    Fr   r   TNzSource does not existz__main__.pyz8Cannot specify entry point if the source has __main__.pyzArchive has no entry point�:c             s   s   | ]}|j � V  qd S )N)�isidentifier)�.0�partr	   r	   r
   �	<genexpr>|   s    z!create_archive.<locals>.<genexpr>�.c             s   s   | ]}|j � V  qd S )N)r*   )r+   r,   r	   r	   r
   r-   }   s    zInvalid entry point: )�module�fnz.pyzr   r   �w�*zutf-8)�hasattrr   r
   �is_filer(   �existsr   �	partition�all�split�
MAIN_TEMPLATE�formatZwith_suffixr   r   �zipfileZZipFileZrglobr   Zrelative_tor   Zwritestrr   r"