U
    +|jC  ã                   @   s°   d dl mZ d dlZd dlZd dlZd dlZd dlZddlmZm	Z	m
Z
 ddlmZ ddlmZmZmZmZmZ e e¡Zd ¡ Ze d¡Zd	Zd
d„ ZeZG dd„ deƒZdS )é    )ÚBytesIONé   )Ú	sysconfigÚdetect_encodingÚZipFile)Úfinder)ÚFileOperatorÚget_export_entryÚconvert_pathÚget_executableÚin_venvañ  
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
 <assemblyIdentity version="1.0.0.0"
 processorArchitecture="X86"
 name="%s"
 type="win32"/>

 <!-- Identify the application security requirements. -->
 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
 <security>
 <requestedPrivileges>
 <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
 </requestedPrivileges>
 </security>
 </trustInfo>
</assembly>s   ^#!.*pythonw?[0-9.]*([ 	].*)?$zÍ# -*- coding: utf-8 -*-
import re
import sys
from %(module)s import %(import_name)s
if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(%(func)s())
c                 C   sX   d| krT|   d¡rB|  dd¡\}}d|krT|  d¡sTd||f } n|   d¡sTd|  } | S )Nú z/usr/bin/env r   ú"z%s "%s"z"%s")Ú
startswithÚsplit)Ú
executableÚenvÚ_executable© r   úcC:\Users\snmko\Desktop\web_content\django_cbt\venv\Lib\site-packages\pip/_vendor/distlib/scripts.pyÚenquote_executable3   s    

r   c                   @   sÚ   e Zd ZdZeZdZd'dd„Zdd„ Ze	j
 d	¡rBd
d„ Zdd„ Zdd„ Zd(dd„Zdd„ ZeZdd„ Zdd„ Zd)dd„Zdd„ Zedd„ ƒZejdd„ ƒZejd ksºejd	krÂejd krÂd!d"„ Zd*d#d$„Zd+d%d&„ZdS ),ÚScriptMakerz_
    A class to copy or create scripts from source scripts or callable
    specifications.
    NTFc                 C   s‚   || _ || _|| _d| _d| _tjdkp:tjdko:tjdk| _t	dƒ| _
|pRt|ƒ| _tjdkprtjdkortjdk| _tj| _d S )NFÚposixÚjava)Ú úX.YÚnt)Ú
source_dirÚ
target_dirÚadd_launchersÚforceÚclobberÚosÚnameÚ_nameÚset_modeÚsetÚvariantsr   Ú_fileopÚ_is_ntÚsysÚversion_info)Úselfr   r   r   Údry_runÚfileopr   r   r   Ú__init__N   s    ÿ

ÿzScriptMaker.__init__c                 C   s@   |  dd¡r<| jr<tj |¡\}}| dd¡}tj ||¡}|S )NÚguiFÚpythonÚpythonw)Úgetr)   r"   Úpathr   ÚreplaceÚjoin)r,   r   ÚoptionsÚdnÚfnr   r   r   Ú_get_alternate_executable_   s
    z%ScriptMaker._get_alternate_executabler   c              
   C   s\   z0t |ƒ�}| d¡dkW  5 Q R £ W S Q R X W n& ttfk
rV   t d|¡ Y dS X dS )zl
            Determine if the specified executable is a script
            (contains a #! line)
            é   z#!zFailed to open %sFN)ÚopenÚreadÚOSErrorÚIOErrorÚloggerÚwarning)r,   r   Úfpr   r   r   Ú	_is_shellg   s    
&zScriptMaker._is_shellc                 C   sD   |   |¡r*dd l}|jj d¡dkr<|S n| ¡  d¡r<|S d| S )Nr   zos.nameÚLinuxz
jython.exez/usr/bin/env %s)rC   r   ÚlangÚSystemÚgetPropertyÚlowerÚendswith)r,   r   r   r   r   r   Ú_fix_jython_executables   s    
z"ScriptMaker._fix_jython_executablec                 C   s‚   t jdkrd}n8t|ƒt|ƒ d }tjdkr4d}nd}d|koF||k}|r^d| | d	 }n d
}|d| | d 7 }|d7 }|S )a  
        Build a shebang line. In the simple case (on Windows, or a shebang line
        which is not too long or contains spaces) use a simple formulation for
        the shebang. Otherwise, use /bin/sh as the executable, with a contrived
        shebang which allows the script to run either under Python or sh, using
        suitable quoting. Thanks to Harald Nordgren for his input.

        See also: http://www.in-ulm.de/~mascheck/various/shebang/#length
                  https://hg.mozilla.org/mozilla-central/file/tip/mach
        r   Té   Údarwini   é   ó    s   #!ó   
s
   #!/bin/sh
s	   '''exec' s    "$0" "$@"
s   ' ''')r"   r#   Úlenr*   Úplatform)r,   r   Úpost_interpÚsimple_shebangÚshebang_lengthÚmax_shebang_lengthÚresultr   r   r   Ú_build_shebang   s    

ÿzScriptMaker._build_shebangó    c                 C   sT  d}| j r| j }d}n^t ¡ s&tƒ }nNtƒ rLtj t d¡dt 	d¡ ¡}n(tj t 	d¡dt 	d¡t 	d¡f ¡}|r„|  
||¡}tj d	¡rš|  |¡}|r¦t|ƒ}| d
¡}tjdkrÒd|krÒd|krÒ|d7 }|  ||¡}z| d
¡ W n" tk
�r   td| ƒ‚Y nX |d
k�rPz| |¡ W n& tk
�rN   td||f ƒ‚Y nX |S )NTFÚscriptszpython%sÚEXEÚBINDIRz
python%s%sÚVERSIONr   úutf-8Úcliz	-X:Framesz-X:FullFramess
    -X:Framesz,The shebang (%r) is not decodable from utf-8z?The shebang (%r) is not decodable from the script encoding (%r))r   r   Úis_python_buildr   r   r"   r4   r6   Úget_pathÚget_config_varr:   r*   rQ   r   rJ   r   ÚencoderW   ÚdecodeÚUnicodeDecodeErrorÚ
ValueError)r,   ÚencodingrR   r7   Úenquoter   Úshebangr   r   r   Ú_get_shebangž   sX    ÿ
ÿþ

ÿÿ

ÿÿ
zScriptMaker._get_shebangc                 C   s$   | j t|j|j d¡d |jd� S )NÚ.r   )ÚmoduleÚimport_nameÚfunc)Úscript_templateÚdictÚprefixÚsuffixr   )r,   Úentryr   r   r   Ú_get_script_textÞ   s    
þzScriptMaker._get_script_textc                 C   s   t j |¡}| j| S ©N)r"   r4   ÚbasenameÚmanifest)r,   ÚexenameÚbaser   r   r   Úget_manifestå   s    zScriptMaker.get_manifestc                 C   sô  | j o
| j}tj d¡}| |¡s*||7 }|s8|| }nZ|dkrL|  d¡}n
|  d¡}tƒ }	t|	dƒ�}
|
 	d|¡ W 5 Q R X |	 
¡ }|| | }|D �]V}tj | j|¡}|�rxtj |¡\}}| d¡rÐ|}d| }z| j ||¡ W nŠ tk
�rt   t d¡ d	| }tj |¡�r&t |¡ t ||¡ | j ||¡ t d
¡ zt |¡ W n tk
�rn   Y nX Y nX nl| j�rœ| d| ¡�sœd||f }tj |¡�rÀ| j�sÀt d|¡ q–| j ||¡ | j�rä| j |g¡ | |¡ q–d S )Nr]   ÚpyÚtÚwz__main__.pyz.pyz%s.exez:Failed to write executable - trying to use .deleteme logicz%s.deletemez0Able to replace executable using .deleteme logicrj   z%s.%szSkipping existing file %s)r   r)   r"   Úlineseprb   rI   Ú_get_launcherr   r   ÚwritestrÚgetvaluer4   r6   r   Úsplitextr   r(   Úwrite_binary_fileÚ	Exceptionr@   rA   ÚexistsÚremoveÚrenameÚdebugr!   r%   Úset_executable_modeÚappend)r,   Únamesrh   Úscript_bytesÚ	filenamesÚextÚuse_launcherr}   ÚlauncherÚstreamÚzfÚzip_datar#   ÚoutnameÚnÚeÚdfnamer   r   r   Ú_write_scripté   sX    







zScriptMaker._write_scriptc                 C   sì   d}|r0|  dg ¡}|r0dd |¡ }| d¡}| jd||d�}|  |¡ d¡}|j}tƒ }	d| jkrp|	 |¡ d| jkr’|	 d	|| j	d
 f ¡ d| jkr¼|	 d|| j	d
 | j	d f ¡ |rÒ|  dd¡rÒd}
nd}
|  
|	||||
¡ d S )NrX   Úinterpreter_argsz %sr   r]   ©r7   r   ÚXz%s%sr   r   z%s-%s.%sr   r0   FÚpywrz   )r3   r6   rb   ri   rs   r#   r&   r'   Úaddr+   r—   )r,   rr   rŒ   r7   rR   Úargsrh   Úscriptr#   Úscriptnamesr�   r   r   r   Ú_make_script  s,    




ÿzScriptMaker._make_scriptc                 C   s˜  d}t j | jt|ƒ¡}t j | jt j |¡¡}| jsT| j 	||¡sTt
 d|¡ d S zt|dƒ}W n  tk
r‚   | jsz‚ d }Y nLX | ¡ }|s¦t
 d|  ¡ |¡ d S t | dd¡¡}|rÎd}| d¡pÌd	}|�s|rà| ¡  | j ||¡ | j�r| j |g¡ | |¡ n„t
 d
|| j¡ | jj�s†t|jƒ\}	}
| d¡ |  |	|¡}d|k�r^d}nd}t j |¡}|  |g||  ¡ ||¡ |�r”| ¡  d S )NFznot copying %s (up-to-date)Úrbz"%s: %s is an empty file (skipping)s   
rO   Tr   rX   zcopying and adjusting %s -> %sr   s   pythonwr›   rz   )!r"   r4   r6   r   r
   r   ru   r    r(   Únewerr@   r‡   r<   r?   r-   ÚreadlinerA   Úget_command_nameÚFIRST_LINE_REÚmatchr5   ÚgroupÚcloseÚ	copy_filer%   rˆ   r‰   Úinfor   Úseekri   r—   r=   )r,   rž   rŒ   Úadjustr“   ÚfÚ
first_liner¦   rR   rf   Úlinesrh   r�   r”   r   r   r   Ú_copy_script5  sX    
 ÿÿ


zScriptMaker._copy_scriptc                 C   s   | j jS rt   ©r(   r-   )r,   r   r   r   r-   i  s    zScriptMaker.dry_runc                 C   s   || j _d S rt   r±   )r,   Úvaluer   r   r   r-   m  s    r   c                 C   s`   t  d¡dkrd}nd}d||f }t dd¡d }t|ƒ |¡}|sZd	||f }t|ƒ‚|jS )
NÚPé   Ú64Ú32z%s%s.exerj   r   r   z(Unable to find resource %s in package %s)ÚstructÚcalcsizeÚ__name__Úrsplitr   Úfindre   Úbytes)r,   ÚkindÚbitsr#   Údistlib_packageÚresourceÚmsgr   r   r   r~   u  s    ÿzScriptMaker._get_launcherc                 C   s6   g }t |ƒ}|dkr"|  ||¡ n| j|||d� |S )aÓ  
        Make a script.

        :param specification: The specification, which is either a valid export
                              entry specification (to make a script from a
                              callable) or a filename (to make a script by
                              copying from a source location).
        :param options: A dictionary of options controlling script generation.
        :return: A list of all absolute pathnames written to.
        Nr™   )r	   r°   r    )r,   Úspecificationr7   rŒ   rr   r   r   r   Úmake‡  s    zScriptMaker.makec                 C   s$   g }|D ]}|  |  ||¡¡ q|S )zÂ
        Take a list of specifications and make scripts from them,
        :param specifications: A list of specifications.
        :return: A list of all absolute pathnames written to,
        )ÚextendrÃ   )r,   Úspecificationsr7   rŒ   rÂ   r   r   r   Úmake_multipleš  s    zScriptMaker.make_multiple)TFN)rX   N)N)N)N) r¹   Ú
__module__Ú__qualname__Ú__doc__ÚSCRIPT_TEMPLATErn   r   r/   r:   r*   rQ   r   rC   rJ   rW   ri   rs   Ú_DEFAULT_MANIFESTrv   ry   r—   r    r°   Úpropertyr-   Úsetterr"   r#   r$   r~   rÃ   rÆ   r   r   r   r   r   E   s6       ÿ

@4
4


r   )Úior   Úloggingr"   Úrer·   r*   Úcompatr   r   r   Ú	resourcesr   Úutilr   r	   r
   r   r   Ú	getLoggerr¹   r@   ÚstriprË   Úcompiler¥   rÊ   r   Ú_enquote_executableÚobjectr   r   r   r   r   Ú<module>   s   


