U
    f                     @   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   8lib/python3.8/site-packages/setuptools/tests/contexts.py<lambda>       r   c              	   k   s@   t jf |}t }z| | |V  W 5 | | t| X d S r   )tempfileZmkdtemposgetcwdshutilZrmtree)ZcdkwargsZ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 5 | D ]}tj|d qftj| X dS )zj
    In a context, patch the environment with replacements. Pass None values
    to clear the values.
    c                 s   s&   | ]}|t jkr|t j| fV  qd S r   )r
   environ).0keyr   r   r   	<genexpr>   s     
 zenvironment.<locals>.<genexpr>c                 s   s   | ]\}}|d kr|V  qd S r   r   )r   r   valuer   r   r   r   !   s      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 5 |d |d | t _|t _X 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 5 | t _X d S r   )siteENABLE_USER_SITE)r   r   r   r   save_user_site_settingD   s    
r%   c               
   c   sL   dd l } |  }tjd d  }z||fV  W 5 |tjd d < | | X d S )Nr   )pkg_resources__getstate__r   path__setstate__)r&   Zpr_stateZsys_pathr   r   r   save_pkg_resources_stateM   s    r*   c                  g   s$   z
d V  W n | k
r   Y nX d S r   r   )Zexcsr   r   r   suppress_exceptions[   s    
r+   c                 C   s.   z|  d}W n tk
r$   Y dS X |dkS )zO
    Return True if running under xdist and multiple
    workers are used.
    	worker_idFZmaster)Zgetfixturevalue	Exception)requestr,   r   r   r   	multiprocc   s
    r/   c              	   c   sT   |  }t| r|jn|}|| }t|d |jddd |V  W 5 Q R X dS )zCUses a file lock to guarantee only one worker can access a temp dirz.lockT)exist_okparentsN)Zgetbasetempr/   parentr   Zwith_suffixmkdir)r.   Ztmp_path_factorynamebaseZ
shared_dirZ
locked_dirr   r   r   session_locked_tmp_diro   s    r6   c               
   c   sJ   t jdd t jdd t jdd f} z
dV  W 5 | \t _t _t _X 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   s*   t j} zt j t _dV  W 5 | t _X dS )z.Make sure initial ``sys.modules`` is preservedN)r   modulescopy)Zprev_modulesr   r   r   save_sys_modules   s
    
r=   )r	   r
   r   r   
contextlibr#   r   Zfilelockr   contextmanagerr   r   r"   r%   r*   r+   r/   r6   r:   r=   r   r   r   r   <module>   s4   







