
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
ct„jˆ)  ã               @   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d dlZd dlZd dl	Z	d dl
Z
d dlmZ d dlmZmZ dadd„ ZG dd„ de jdd#ƒƒZdd„ Zdd„ Zdd„ Zdd„ Zejejdœdd„Zdd„ Zd$dd„Zd%dd„Zd&dd„Zd'd!d"„ZdS )(é    N)Úsource_from_cache)Úmake_legacy_pycÚstrip_python_stderrc               C   sV   t d krRdtjkrda dS ytjtjdddgƒ W n tjk
rL   da Y nX da t S )NZ
PYTHONHOMETz-Ez-czimport sys; sys.exit(0)F)Ú$__cached_interp_requires_environmentÚosÚenvironÚ
subprocessZ
check_callÚsysÚ
executableZCalledProcessError© r   r   ú2/usr/lib64/python3.6/test/support/script_helper.pyÚ interpreter_requires_environment   s    


r   c               @   s   e Zd Zdd„ ZdS )Ú_PythonRunResultc             C   sˆ   d}| j | j }}t|ƒ|kr0d|| d …  }t|ƒ|krNd|| d …  }|jddƒjƒ }|jddƒjƒ }td| j|||f ƒ‚d S )	NéP   éd   s   (... truncated stdout ...)s   (... truncated stderr ...)ÚasciiÚreplacezRProcess return code is %d
command line: %r

stdout:
---
%s
---

stderr:
---
%s
---i@  )ÚoutÚerrÚlenÚdecodeÚrstripÚAssertionErrorÚrc)ÚselfÚcmd_lineÚmaxlenr   r   r   r   r   Úfail>   s    z_PythonRunResult.failN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   ;   s   r   r   r   r   c        
      O   s  t ƒ }d|kr|jdƒ}n| o$| }tjddg}|rB|jdƒ n| rX| rX|jdƒ |jdd ƒr‚i }tjdkrŒtjd |d< n
tjjƒ }d	|krœd
|d	< |j	|ƒ |j
| ƒ tj|tjtjtj|d�}|�* z|jƒ \}}W d |jƒ  tjƒ  X W d Q R X |j}	t|ƒ}t|	||ƒ|fS )NZ
__isolatedz-XZfaulthandlerz-Iz-EZ
__cleanenvZwin32Z
SYSTEMROOTÚTERMÚ )ÚstdinÚstdoutÚstderrÚenv)r   Úpopr	   r
   ÚappendÚplatformr   r   ÚcopyÚupdateÚextendr   ÚPopenÚPIPEZcommunicateÚkillÚ_cleanupÚ
returncoder   r   )
ÚargsÚenv_varsZenv_requiredÚisolatedr   r&   Úprocr   r   r   r   r   r   Úrun_python_until_end[   s:    





r6   c             O   s4   t ||Ž\}}|jr| s&|j r0|  r0|j|ƒ |S )N)r6   r   r   )Zexpected_successr2   r3   Úresr   r   r   r   Ú_assert_pythonŽ   s    
r8   c              O   s   t d| ž|ŽS )NT)T)r8   )r2   r3   r   r   r   Úassert_python_ok”   s    r9   c              O   s   t d| ž|ŽS )NF)F)r8   )r2   r3   r   r   r   Úassert_python_failure¡   s    r:   )r$   r%   c             O   sX   t jg}tƒ s|jdƒ |j|ƒ |jdttjƒƒ}d|d< t	j
|ft	j| |dœ|—ŽS )Nz-Er&   Zvt100r!   )r#   r$   r%   )r	   r
   r   r(   r,   Ú
setdefaultÚdictr   r   r   r-   r.   )r$   r%   r2   Úkwr   r&   r   r   r   Úspawn_python«   s    

r>   c             C   s2   | j jƒ  | jjƒ }| jjƒ  | jƒ  tjƒ  |S )N)r#   Úcloser$   ÚreadÚwaitr   r0   )ÚpÚdatar   r   r   Úkill_pythonÁ   s    


rD   Fc             C   sP   |}|s|t jd 7 }t jj| |ƒ}t|ddd�}|j|ƒ |jƒ  tjƒ  |S )NÚpyÚwzutf-8)Úencoding)	r   ÚextsepÚpathÚjoinÚopenÚwriter?   Ú	importlibÚinvalidate_caches)Z
script_dirÚscript_basenameÚsourceZomit_suffixZscript_filenameÚscript_nameZscript_filer   r   r   Úmake_scriptÌ   s    
rR   c       	      C   s¤   |t j d }t jj| |ƒ}tj|dƒ}|d kr~|jt jƒ}t|ƒdkrr|d dkrrt	t
|ƒƒ}t jj|ƒ}|}nt jj|ƒ}|j||ƒ |jƒ  |t jj||ƒfS )NÚziprF   é   Ú__pycache__éþÿÿÿ)r   rH   rI   rJ   ÚzipfileÚZipFileÚsplitÚsepr   r   r   ÚbasenamerL   r?   )	Úzip_dirÚzip_basenamerQ   Zname_in_zipÚzip_filenameÚzip_nameÚzip_fileÚpartsZ
legacy_pycr   r   r   Úmake_zip_scriptØ   s    rb   r"   c             C   s   t j| ƒ t| d|ƒ d S )NÚ__init__)r   ÚmkdirrR   )Zpkg_dirZinit_sourcer   r   r   Úmake_pkgí   s    
re   é   c                s0  g }t | ddƒ}|j|ƒ tjj|ƒ}	t | ||ƒ}
|j|
ƒ |rjtj|dd�}tj|
dd�}
|j||
fƒ ‡ fdd„td|d ƒD ƒ}tjj	|d
 tjj|
ƒƒ}|tj
 d }tjj	| |ƒ}tj|d	ƒ}x&|D ]}tjj	||	ƒ}|j||ƒ qÎW |j|
|ƒ |jƒ  x|D ]}tj|ƒ �q
W |tjj	||ƒfS )Nrc   r"   T)Údoraisec                s   g | ]}t jjˆ g| ƒ‘qS r   )r   rZ   rJ   )Ú.0Úi)Úpkg_namer   r   ú
<listcomp>ý   s    z make_zip_pkg.<locals>.<listcomp>rf   rS   rF   éÿÿÿÿ)rR   r(   r   rI   r[   Ú
py_compileÚcompiler,   ÚrangerJ   rH   rW   rX   rL   r?   Úunlink)r\   r]   rj   rO   rP   ZdepthZcompiledrp   Z	init_nameZinit_basenamerQ   Z	pkg_namesZscript_name_in_zipr^   r_   r`   ÚnameZinit_name_in_zipr   )rj   r   Úmake_zip_pkgñ   s.    



rr   )r   r   r   )F)N)r"   )rf   F) ÚcollectionsrM   r	   r   Zos.pathZtempfiler   rm   Ú
contextlibZshutilrW   Úimportlib.utilr   Ztest.supportr   r   r   r   Ú
namedtupler   r6   r8   r9   r:   r.   ZSTDOUTr>   rD   rR   rb   re   rr   r   r   r   r   Ú<module>   s4   $3



