a
    "RhG)                     @   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m	Z	 d dl
mZ dadd ZG dd de 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_pycc                   C   sT   t d u rPdtjv rda dS zttjdddg W n tjyJ   da Y n0 da t S )NZ
PYTHONHOMET-Ez-czimport sys; sys.exit(0)F)$__cached_interp_requires_environmentosenviron
subprocess
check_callsys
executableCalledProcessError r   r   B/opt/python-3.9.24/usr/lib/python3.9/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   }|dd }|dd }td| j|||f d S )Ni@  s   (... truncated stdout ...)s   (... truncated stderr ...)asciireplacezRProcess return code is %d
command line: %r

stdout:
---
%s
---

stderr:
---
%s
---)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   8   s   r   )r   r   r   c               	   O   sD  t  }|dd }d|v r&|d}n| o0| }tjddg}|rN|d n|s`|s`|d |dd ri }tjdkrtjd	 |d	< n
tj }d
|vrd|d
< |	| |
|  tj|tjtjtj||d}|D z | \}}	W |  t  n|  t  0 W d    n1 s$0    Y  |j}
t|
||	|fS )NZ__cwdZ
__isolatedz-Xfaulthandlerz-Ir   Z
__cleanenvwin32Z
SYSTEMROOTTERM )stdinstdoutstderrenvcwd)r   popr
   r   appendplatformr   r   copyupdateextendr   PopenPIPEcommunicatekill_cleanup
returncoder   )argsenv_varsZenv_requiredr)   isolatedr   r(   procr   r   r   r   r   r   run_python_until_endX   s@    






*r:   c                O   s4   t |i |\}}|jr| s&|js0| s0|| |S N)r:   r   r   )Zexpected_successr6   r7   resr   r   r   r   _assert_python   s    
r=   c                  O   s   t dg| R i |S )NTr=   r6   r7   r   r   r   assert_python_ok   s    r@   c                  O   s   t dg| R i |S )NFr>   r?   r   r   r   assert_python_failure   s    rA   )r&   r'   c                 O   sX   t jg}t s|d || |dttj}d|d< t	j
|ft	j| |d|S )Nr   r(   Zvt100r#   )r%   r&   r'   )r
   r   r   r+   r/   
setdefaultdictr   r   r   r0   r1   )r&   r'   r6   kwr   r(   r   r   r   spawn_python   s    

rE   c                 C   s2   | j   | j }| j  |   t  |S r;   )r%   closer&   readwaitr   r4   )pdatar   r   r   kill_python   s    


rK   Fc                 C   sh   |}|s|t jd 7 }t j| |}t|ddd}|| W d    n1 sR0    Y  t  |S )Npywzutf-8)encoding)r   extseppathjoinopenwrite	importlibinvalidate_caches)Z
script_dirscript_basenamesourceZomit_suffixZscript_filenamescript_nameZscript_filer   r   r   make_script   s    (rY   c           	      C   s   |t j d }t j| |}t|dr}|d u r|t j}t|dkrt|d dkrtt	t
|}t j|}|}nt j|}||| W d    n1 s0    Y  |t j||fS )NziprM      __pycache__)r   rO   rP   rQ   zipfileZipFilesplitsepr   r   r   basenamerS   )	zip_dirzip_basenamerX   Zname_in_zipzip_filenamezip_namezip_filepartsZ
legacy_pycr   r   r   make_zip_script   s    *ri   r$   c                 C   s   t |  t| d| d S )N__init__)r   mkdirrY   )Zpkg_dirZinit_sourcer   r   r   make_pkg   s    
rl      c                    sB  g }t | dd}|| tj|}	t | ||}
||
 |rjtj|dd}tj|
dd}
|||
f  fddtd|d D }tj	|d tj|
}|tj
 d	 }tj	| |}t|d
@}|D ]}tj	||	}||| q||
| W d    n1 s0    Y  |D ]}t| q|tj	||fS )Nrj   r$   T)doraisec                    s   g | ]}t j g| qS r   )r   ra   rQ   ).0ipkg_namer   r   
<listcomp>       z make_zip_pkg.<locals>.<listcomp>rm   rZ   rM   )rY   r+   r   rP   rb   
py_compilecompiler/   rangerQ   rO   r^   r_   rS   unlink)rc   rd   rr   rV   rW   depthZcompiledry   Z	init_nameZinit_basenamerX   Z	pkg_namesZscript_name_in_zipre   rf   rg   nameZinit_name_in_zipr   rq   r   make_zip_pkg   s,    

,r|   )F)N)r$   )rm   F)collectionsrT   r
   r   Zos.pathr   rv   r^   importlib.utilr   Ztest.supportr   r   r   
namedtupler   r:   r=   r@   rA   r1   STDOUTrE   rK   rY   ri   rl   r|   r   r   r   r   <module>   s2   $ 3



 