o
    JAfZ                     @   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mZ d dlm	Z	 d dl
mZ d dlmZmZmZmZmZ d dlmZ G dd deZG d	d
 d
eZG dd dZG dd deZdd Zdd Zdd ZdS )    N)deepcopy)	os_helper)log)DEBUGINFOWARNERRORFATAL)Distributionc                       s@   e Zd Z fddZ fddZdd Zdd Zd	d
 Z  ZS )LoggingSilencerc                    s6   t    ttj| _tjj| _| jtj_g | _	d S N)
supersetUpr   set_thresholdr	   	thresholdLog_log_old_loglogsself	__class__ ./usr/lib/python3.10/distutils/tests/support.pyr      s
   



zLoggingSilencer.setUpc                    s$   t | j | jt j_t   d S r   )r   r   r   r   r   r   r   tearDownr   r   r   r   r      s   
zLoggingSilencer.tearDownc                 C   sT   |t ttttfvrtdt| t|tstdt	|j
 | j|||f d S )Nz%s wrong log levelzmsg should be str, not '%.200s')r   r   r   r   r	   
ValueErrorstr
isinstance	TypeErrortype__name__r   append)r   levelmsgargsr   r   r   r   !   s   
zLoggingSilencer._logc                    s    fdd| j D S )Nc                    s"   g | ]\}}}| v r|| qS r   r   ).0r#   r$   r%   levelsr   r   
<listcomp>*   s    z,LoggingSilencer.get_logs.<locals>.<listcomp>r   )r   r(   r   r'   r   get_logs)   s   
zLoggingSilencer.get_logsc                 C   s
   g | _ d S r   r*   r   r   r   r   
clear_logs-   s   
zLoggingSilencer.clear_logs)	r!   
__module____qualname__r   r   r   r+   r,   __classcell__r   r   r   r   r      s    
r   c                       sF   e Zd Z	  fddZ fddZdd Zddd	ZdddZ  ZS )TempdirManagerc                    s   t    t | _g | _d S r   )r   r   osgetcwdold_cwdtempdirsr   r   r   r   r   7   s   


zTempdirManager.setUpc                    s>   t | j t   | jr| j }t| | jsd S d S r   )	r1   chdirr3   r   r   r4   popr   rmtree)r   Ztmpdirr   r   r   r   <   s   


zTempdirManager.tearDownc                 C   s   	 t  }| j| |S r   )tempfilemkdtempr4   r"   )r   dr   r   r   r9   E   s   zTempdirManager.mkdtempxxxc                 C   sJ   	 t |ttfrtjj| }t|d}z|| W |  d S |  w )Nw)	r   listtupler1   pathjoinopenwriteclose)r   r?   Zcontentfr   r   r   
write_fileN   s   
zTempdirManager.write_filefooc                 K   s4   	 |   }tj||}t| t|d}||fS )N)Zattrs)r9   r1   r?   r@   mkdirr
   )r   Zpkg_namekwZtmp_dirZpkg_dirdistr   r   r   create_dist\   s   	

zTempdirManager.create_dist)r;   )rF   )	r!   r-   r.   r   r   r9   rE   rJ   r/   r   r   r   r   r0   1   s    	
	r0   c                   @   s   e Zd Z	 dd Zdd ZdS )DummyCommandc                 K   s"   |  D ]
\}}t| || qd S r   )itemssetattr)r   kwargsrH   valr   r   r   __init__q   s   zDummyCommand.__init__c                 C   s   d S r   r   r   r   r   r   ensure_finalizedu   s   zDummyCommand.ensure_finalizedN)r!   r-   r.   rP   rQ   r   r   r   r   rK   n   s    rK   c                       s(   e Zd Z fddZ fddZ  ZS )EnvironGuardc                    s   t t|   ttj| _d S r   )r   rR   r   r   r1   environold_environr   r   r   r   r   {   s   zEnvironGuard.setUpc                    sf   | j  D ]\}}tj||kr|tj|< qttj D ]}|| j vr)tj|= qtt| 	  d S r   )
rT   rL   r1   rS   getr>   keysr   rR   r   )r   keyvaluer   r   r   r      s   

zEnvironGuard.tearDown)r!   r-   r.   r   r   r/   r   r   r   r   rR   y   s    rR   c                 C   s*   	 t  }|d u rtdt||  d S )Nz>cannot find xxmodule.c (test must run in the python build dir))_get_xxmodule_pathunittestZSkipTestshutilcopy)Z	directoryfilenamer   r   r   copy_xxmodule_c   s
   
r^   c               
   C   sf   t d} tjtjtdtj| ddtj| dddddg}|D ]}tj|r0|  S q$d S )Nsrcdirz
xxmodule.cZModulesz..)	sysconfigget_config_varr1   r?   r@   dirname__file__exists)r_   Z
candidatesr?   r   r   r   rY      s   

rY   c                 C   s   	 t jdkrtjd| _d S tdrCtd}|d u r#dg| _d S tj	dkr-g | _d S |
d\}}}dd	 |t jD | _d S d S )
Nntz_d.exeZPy_ENABLE_SHAREDZ	RUNSHARED.darwin=c                 S   s   g | ]}|r|qS r   r   )r&   r:   r   r   r   r)      s    z#fixup_build_ext.<locals>.<listcomp>)r1   namesys
executableendswithdebugr`   ra   Zlibrary_dirsplatform	partitionsplitpathsep)cmdZ	runsharedri   ZequalsrX   r   r   r   fixup_build_ext   s   




rs   )r1   rj   r[   r8   rZ   r`   r\   r   Ztest.supportr   Z	distutilsr   Zdistutils.logr   r   r   r   r	   Zdistutils.corer
   objectr   r0   rK   rR   r^   rY   rs   r   r   r   r   <module>   s&    !=