o
    JXh,                     @   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 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"d# ZdS )(    N)source_from_cache)support)make_legacy_pycc                   C   sX   	 t d u r*dtjv rda dS zttjdddg W n tjy'   da Y t S w 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   D/opt/python-3.10.19/usr/lib/python3.10/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rd|| d   }t||kr(d|| d   }|dd }|dd }td| j|||f )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   :   s    r   )r   r   r   c               	   O   sB  t  }|dd }d|v r|d}n| o| }tjddg}|r'|d n	|s0|s0|d |dd rEi }tjdkrDtjd	 |d	< ntj }d
|vrRd|d
< |	| |
|  tj|tjtjtj||d}|" z| \}}	W |  t  n	|  t  w W d    n1 sw   Y  |j}
t|
||	|fS )NZ__cwdZ
__isolated-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_endZ   sD   






r<   c                O   s4   t |i |\}}|jr| s|js| s|| |S N)r<   r   r   )Zexpected_successr8   r9   resr   r   r   r   _assert_python   s   
r?   c                  O      	 t dg| R i |S )NTr?   r8   r9   r   r   r   assert_python_ok   s   
rC   c                  O   r@   )NFrA   rB   r   r   r   assert_python_failure   s   rD   )r(   r)   c                 O   sZ   	 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-   r1   
setdefaultdictr   r   r	   r2   r3   )r(   r)   r8   kwr   r*   r   r   r   spawn_python   s   

rH   c                 C   s4   	 | j   | j }| j  |   t  |S r=   )r'   closer(   readwaitr	   r6   )pdatar   r   r   kill_python   s   


rN   Fc                 C   sh   |}|s|t jd 7 }t j| |}t|ddd}|| W d    n1 s)w   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   r\   c           	      C   s   |t j d }t j| |}t|d9}|d u r@|t j}t|dkr:|d dkr:t	t
|}t j|}|}nt j|}||| W d    n1 sPw   Y  |t j||fS )NziprP      __pycache__)r   rR   rS   rT   zipfileZipFilesplitsepr   r   r   basenamerV   )	zip_dirzip_basenamer[   Zname_in_zipzip_filenamezip_namezip_filepartsZ
legacy_pycr   r   r   make_zip_script   s   rl   r&   c                 C   s   t |  t| d| d S )N__init__)r   mkdirr\   )Zpkg_dirZinit_sourcer   r   r   make_pkg   s   
ro      c                    s>  g }t | dd}|| tj|}	t | ||}
||
 |r5t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	||	}||| qg||
| W d    n1 sw   Y  |D ]}t| q|tj	||fS )Nrm   r&   T)doraisec                    s   g | ]}t j g| qS r   )r   rd   rT   ).0ipkg_namer   r   
<listcomp>  s    z make_zip_pkg.<locals>.<listcomp>rp   r]   rP   )r\   r-   r   rS   re   
py_compilecompiler1   rangerT   rR   ra   rb   rV   unlink)rf   rg   ru   rY   rZ   depthZcompiledr{   Z	init_nameZinit_basenamer[   Z	pkg_namesZscript_name_in_ziprh   ri   rj   nameZinit_name_in_zipr   rt   r   make_zip_pkg   s.   

r~   c                 C   s   t jrDdd }dtj|  }t  t||dd tjdddd	| d
g}t	|}t|| d|j
 dd |j
rBt| dd S td	| d
 d S )Nc                 S   s   d|  dS )Nz===== z ======r   )textr   r   r   title  s   zrun_test_script.<locals>.titlezscript T)flushr   r"   r#   z-uz-vz completed: exit code z failed)r   verboser   rS   re   printr   r   r	   runr7   r   rC   )Zscriptr   r}   r8   r;   r   r   r   run_test_script  s   
r   )Fr=   )r&   )rp   F)collectionsrW   r   r   Zos.pathr	   rx   ra   importlib.utilr   testr   Ztest.support.import_helperr   r   r   
namedtupler   r<   r?   rC   rD   r3   STDOUTrH   rN   r\   rl   ro   r~   r   r   r   r   r   <module>   s8   $ 4



