a
    zeN                     @   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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)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.9/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                       sD   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                    s8   t | j t   | jr4| j }tj	| qd S r   )
r0   chdirr2   r   r   r3   poptestsupportrmtree)r   Ztmpdirr   r   r   r   <   s
    

zTempdirManager.tearDownc                 C   s   t  }| j| |S r   )tempfilemkdtempr3   r!   )r   dr   r   r   r:   E   s    zTempdirManager.mkdtempxxxc                 C   sJ   t |ttfrtjj| }t|d}z|| W |  n
|  0 d S )Nw)	r   listtupler0   pathjoinopenwriteclose)r   r@   Zcontentfr   r   r   
write_fileN   s    
zTempdirManager.write_filefooc                 K   s2   |   }tj||}t| t|d}||fS )N)attrs)r:   r0   r@   rA   mkdirr	   )r   Zpkg_namekwZtmp_dirZpkg_dirdistr   r   r   create_dist\   s
    


zTempdirManager.create_dist)r<   )rG   )	r    r,   r-   r   r   r:   rF   rL   r.   r   r   r   r   r/   1   s
   		
r/   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   kwargsrJ   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-   rR   rS   r   r   r   r   rM   n   s   rM   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   rT   r   r   r0   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   )
rV   rN   r0   rU   getr?   keysr   rT   r   )r   keyvaluer   r   r   r      s    

zEnvironGuard.tearDown)r    r,   r-   r   r   r.   r   r   r   r   rT   y   s   rT   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|rH|  S qHd S )Nsrcdirz
xxmodule.cZModulesz..)	sysconfigget_config_varr0   r@   rA   dirname__file__exists)ra   Z
candidatesr@   r   r   r   r[      s    

r[   c                 C   s~   t jdkrtjd| _n`tdrztd}|d u r@dg| _n:tj	dkrRg | _n(|
d\}}}dd	 |t jD | _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(          z#fixup_build_ext.<locals>.<listcomp>)r0   namesys
executableendswithdebugrb   rc   Zlibrary_dirsplatform	partitionsplitpathsep)cmdZ	runsharedrl   ZequalsrZ   r   r   r   fixup_build_ext   s    




rv   )r0   rm   r]   r9   r\   rb   r^   r   Ztest.supportr6   Z	distutilsr   Zdistutils.logr   r   r   r   r   Zdistutils.corer	   objectr
   r/   rM   rT   r`   r[   rv   r   r   r   r   <module>   s"   !=