a
    6Rh                     @   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mZ e j	dd fddZ
e j	dd Ze j	d	d
 Ze j	dd Ze j	dd Ze j	dd Zdd Ze j	dd Ze j	dd Ze j	dd ZdS )    N)FileLockc                 C   s   d S N )dirr   r   O/opt/python-3.9.24/usr/lib/python3.9/site-packages/setuptools/tests/contexts.py<lambda>       r   c              	   k   sV   t jf i |}t }z$| | |V  W | | t| n| | t| 0 d S r   )tempfilemkdtemposgetcwdshutilrmtree)cdkwargstemp_dirZorig_dirr   r   r   tempdir   s    r   c                  k   s   t dd | D }dd |  D }t|D ]}tj|d | | q,tj|  z.|V  W | D ]}tj|d qdtj| n&| D ]}tj|d qtj| 0 dS )zj
    In a context, patch the environment with replacements. Pass None values
    to clear the values.
    c                 s   s&   | ]}|t jv r|t j| fV  qd S r   )r   environ).0keyr   r   r   	<genexpr>   r   zenvironment.<locals>.<genexpr>c                 s   s   | ]\}}|d u r|V  qd S r   r   )r   r   valuer   r   r   r   !   r   N)dictitemslistr   r   popupdate)Zreplacementssavedremover   r   r   r   environment   s    r   c               	   c   s~   t j} t j}t  }t _t  }t _z.||fV  W |d |d | t _|t _n"|d |d | t _|t _0 dS )zk
    Redirect stdout/stderr to StringIO objects to prevent console output from
    distutils commands.
    r   N)sysstdoutstderrioStringIOseek)Z
old_stdoutZ
old_stderrZ
new_stdoutZ
new_stderrr   r   r   quiet0   s    



r&   c                  c   s$   t j} z| V  W | t _n| t _0 d S r   )siteENABLE_USER_SITE)r   r   r   r   save_user_site_settingD   s    r)   c               
   c   sd   dd l } |  }tjd d  }z&||fV  W |tjd d < | | n|tjd d < | | 0 d S )Nr   )pkg_resources__getstate__r    path__setstate__)r*   Zpr_statesys_pathr   r   r   save_pkg_resources_stateM   s    r/   c                  g   s"   z
d V  W n | y   Y n0 d S r   r   )Zexcsr   r   r   suppress_exceptions[   s    
r0   c                 C   s,   z|  d}W n ty"   Y dS 0 |dkS )zO
    Return True if running under xdist and multiple
    workers are used.
    	worker_idFZmaster)Zgetfixturevalue	Exception)requestr1   r   r   r   	multiprocc   s
    r4   c                 c   sh   |  }t| r|jn|}|| }t|d$ |jddd |V  W d   n1 sZ0    Y  dS )zCUses a file lock to guarantee only one worker can access a temp dirz.lockT)exist_okparentsN)Zgetbasetempr4   parentr   with_suffixmkdir)r3   Ztmp_path_factorynamebaseZ
shared_dirZ
locked_dirr   r   r   session_locked_tmp_diro   s    r<   c               
   c   sZ   t jdd t jdd t jdd f} zdV  W | \t _t _t _n| \t _t _t _0 dS )zNMake sure ``sys.path``, ``sys.meta_path`` and ``sys.path_hooks`` are preservedN)r    r,   	meta_path
path_hooks)prevr   r   r   
save_paths}   s    (r@   c                  c   s0   t j} zt j t _dV  W | t _n| t _0 dS )z.Make sure initial ``sys.modules`` is preservedN)r    modulescopy)Zprev_modulesr   r   r   save_sys_modules   s
    rC   )
contextlibr#   r   r   r'   r    r	   Zfilelockr   contextmanagerr   r   r&   r)   r/   r0   r4   r<   r@   rC   r   r   r   r   <module>   s4   







