U
    g$,                     @   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Zd dl	Z	d dl
mZ d dlmZ zd dlZd dlZW n ek
r   dZY nX G dd dZdS )    N)support)print_warningc                   @   s  e Zd ZdZdZduddddZdZdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`da Z3dbdc Z4ddde e5e6D Z7dfdg Z8dhdi Z9djdk Z:dldm Z;dndo Z<dpdq Z=drds Z>dtS )vsaved_test_environmenta  Save bits of the test environment and restore them at block exit.

        with saved_test_environment(testname, verbose, quiet):
            #stuff

    Unless quiet is True, a warning is printed to stderr if any of
    the saved items was changed by the test.  The attribute 'changed'
    is initially False, but is set to True if a change is detected.

    If verbose is more than 1, the before and after state of changed
    items is also printed.
    Fr   )pgoc                C   s   || _ || _|| _|| _d S N)testnameverbosequietr   )selfr   r   r	   r    r   //usr/lib/python3.8/test/libregrtest/save_env.py__init__+   s    zsaved_test_environment.__init__)zsys.argvcwdz	sys.stdinz
sys.stdoutz
sys.stderrz
os.environzsys.pathzsys.path_hooks
__import__zwarnings.filterszasyncore.socket_mapzlogging._handlerszlogging._handlerListzsys.gettracezsys.warnoptionsz!multiprocessing.process._danglingzthreading._danglingzsysconfig._CONFIG_VARSzsysconfig._INSTALL_SCHEMESfileslocalezwarnings.showwarningZshutil_archive_formatsZshutil_unpack_formatsz!asyncio.events._event_loop_policyc                 C   s   t  S r   )r   Zmaybe_get_event_loop_policyr
   r   r   r   %get_asyncio_events__event_loop_policyI   s    z<saved_test_environment.get_asyncio_events__event_loop_policyc                 C   s   t | d S r   )asyncioZset_event_loop_policy)r
   Zpolicyr   r   r   )restore_asyncio_events__event_loop_policyK   s    z@saved_test_environment.restore_asyncio_events__event_loop_policyc                 C   s   t tjtjtjd d  fS r   )idsysargvr   r   r   r   get_sys_argvN   s    z#saved_test_environment.get_sys_argvc                 C   s    |d t _|d t jd d < d S N      )r   r   )r
   Z
saved_argvr   r   r   restore_sys_argvP   s    
z'saved_test_environment.restore_sys_argvc                 C   s   t  S r   )osgetcwdr   r   r   r   get_cwdT   s    zsaved_test_environment.get_cwdc                 C   s   t | d S r   )r   chdir)r
   Z	saved_cwdr   r   r   restore_cwdV   s    z"saved_test_environment.restore_cwdc                 C   s   t jS r   r   stdoutr   r   r   r   get_sys_stdoutY   s    z%saved_test_environment.get_sys_stdoutc                 C   s
   |t _d S r   r#   )r
   Zsaved_stdoutr   r   r   restore_sys_stdout[   s    z)saved_test_environment.restore_sys_stdoutc                 C   s   t jS r   r   stderrr   r   r   r   get_sys_stderr^   s    z%saved_test_environment.get_sys_stderrc                 C   s
   |t _d S r   r'   )r
   Zsaved_stderrr   r   r   restore_sys_stderr`   s    z)saved_test_environment.restore_sys_stderrc                 C   s   t jS r   r   stdinr   r   r   r   get_sys_stdinc   s    z$saved_test_environment.get_sys_stdinc                 C   s
   |t _d S r   r+   )r
   Zsaved_stdinr   r   r   restore_sys_stdine   s    z(saved_test_environment.restore_sys_stdinc                 C   s   t tjtjttjfS r   )r   r   environdictr   r   r   r   get_os_environh   s    z%saved_test_environment.get_os_environc                 C   s(   |d t _t j  t j|d  d S r   )r   r/   clearupdate)r
   Zsaved_environr   r   r   restore_os_environj   s    

z)saved_test_environment.restore_os_environc                 C   s   t tjtjtjd d  fS r   )r   r   pathr   r   r   r   get_sys_patho   s    z#saved_test_environment.get_sys_pathc                 C   s    |d t _|d t jd d < d S r   )r   r5   )r
   Z
saved_pathr   r   r   restore_sys_pathq   s    
z'saved_test_environment.restore_sys_pathc                 C   s   t tjtjtjd d  fS r   )r   r   
path_hooksr   r   r   r   get_sys_path_hooksu   s    z)saved_test_environment.get_sys_path_hooksc                 C   s    |d t _|d t jd d < d S r   )r   r8   )r
   Zsaved_hooksr   r   r   restore_sys_path_hooksw   s    
z-saved_test_environment.restore_sys_path_hooksc                 C   s   t  S r   )r   gettracer   r   r   r   get_sys_gettrace{   s    z'saved_test_environment.get_sys_gettracec                 C   s   t | d S r   )r   settrace)r
   Z	trace_fxnr   r   r   restore_sys_gettrace}   s    z+saved_test_environment.restore_sys_gettracec                 C   s   t jS r   builtinsr   r   r   r   r   get___import__   s    z%saved_test_environment.get___import__c                 C   s
   |t _d S r   r?   )r
   import_r   r   r   restore___import__   s    z)saved_test_environment.restore___import__c                 C   s   t tjtjtjd d  fS r   )r   warningsfiltersr   r   r   r   get_warnings_filters   s    z+saved_test_environment.get_warnings_filtersc                 C   s    |d t _|d t jd d < d S r   )rD   rE   )r
   Zsaved_filtersr   r   r   restore_warnings_filters   s    
z/saved_test_environment.restore_warnings_filtersc                 C   s   t jd}|r|j pi S )Nasyncore)r   modulesget
socket_mapcopy)r
   rH   r   r   r   get_asyncore_socket_map   s    z.saved_test_environment.get_asyncore_socket_mapc                 C   s0   t jd}|d k	r,|jdd |j| d S )NrH   T)Z
ignore_all)r   rI   rJ   Z	close_allrK   r3   )r
   Z	saved_maprH   r   r   r   restore_asyncore_socket_map   s    z2saved_test_environment.restore_asyncore_socket_mapc                 C   s   t jt j fS r   )shutil_ARCHIVE_FORMATSrL   r   r   r   r   get_shutil_archive_formats   s    z1saved_test_environment.get_shutil_archive_formatsc                 C   s(   |d t _t j  t j|d  d S Nr   r   )rO   rP   r2   r3   r
   savedr   r   r   restore_shutil_archive_formats   s    

z5saved_test_environment.restore_shutil_archive_formatsc                 C   s   t jt j fS r   )rO   _UNPACK_FORMATSrL   r   r   r   r   get_shutil_unpack_formats   s    z0saved_test_environment.get_shutil_unpack_formatsc                 C   s(   |d t _t j  t j|d  d S rR   )rO   rV   r2   r3   rS   r   r   r   restore_shutil_unpack_formats   s    

z4saved_test_environment.restore_shutil_unpack_formatsc                 C   s   t tjtjtj fS r   )r   loggingZ	_handlersrL   r   r   r   r   get_logging__handlers   s    z,saved_test_environment.get_logging__handlersc                 C   s   d S r   r   )r
   Zsaved_handlersr   r   r   restore_logging__handlers   s    z0saved_test_environment.restore_logging__handlersc                 C   s   t tjtjtjd d  fS r   )r   rY   Z_handlerListr   r   r   r   get_logging__handlerList   s    z/saved_test_environment.get_logging__handlerListc                 C   s   d S r   r   )r
   Zsaved_handlerListr   r   r   restore_logging__handlerList   s    z3saved_test_environment.restore_logging__handlerListc                 C   s   t tjtjtjd d  fS r   )r   r   warnoptionsr   r   r   r   get_sys_warnoptions   s    z*saved_test_environment.get_sys_warnoptionsc                 C   s    |d t _|d t jd d < d S r   )r   r^   )r
   Zsaved_optionsr   r   r   restore_sys_warnoptions   s    
z.saved_test_environment.restore_sys_warnoptionsc                 C   s
   t j S r   )	threading	_danglingrL   r   r   r   r   get_threading__dangling   s    z.saved_test_environment.get_threading__danglingc                 C   s   t j  t j| d S r   )ra   rb   r2   r3   rS   r   r   r   restore_threading__dangling   s    
z2saved_test_environment.restore_threading__danglingc                 C   s   t sd S t j  t jj S r   )multiprocessingprocessZ_cleanuprb   rL   r   r   r   r   %get_multiprocessing_process__dangling   s    
z<saved_test_environment.get_multiprocessing_process__danglingc                 C   s&   t sd S t jj  t jj| d S r   )re   rf   rb   r2   r3   rS   r   r   r   )restore_multiprocessing_process__dangling   s    z@saved_test_environment.restore_multiprocessing_process__danglingc                 C   s"   t d tt jt jtt jfS )Nprefix)	sysconfigZget_config_varr   _CONFIG_VARSr0   r   r   r   r   get_sysconfig__CONFIG_VARS   s    
z1saved_test_environment.get_sysconfig__CONFIG_VARSc                 C   s(   |d t _t j  t j|d  d S r   )rj   rk   r2   r3   rS   r   r   r   restore_sysconfig__CONFIG_VARS   s    

z5saved_test_environment.restore_sysconfig__CONFIG_VARSc                 C   s   t tjtjtj fS r   )r   rj   _INSTALL_SCHEMESrL   r   r   r   r   get_sysconfig__INSTALL_SCHEMES   s    z5saved_test_environment.get_sysconfig__INSTALL_SCHEMESc                 C   s(   |d t _t j  t j|d  d S r   )rj   rn   r2   r3   rS   r   r   r   "restore_sysconfig__INSTALL_SCHEMES   s    

z9saved_test_environment.restore_sysconfig__INSTALL_SCHEMESc                 C   s   t dd t D S )Nc                 s   s&   | ]}|t j|rd nd V  qdS )/ N)r   r5   isdir).0fnr   r   r   	<genexpr>   s   z3saved_test_environment.get_files.<locals>.<genexpr>)sortedr   listdirr   r   r   r   	get_files   s    z saved_test_environment.get_filesc                 C   sL   t j}||krH|d |krHtj|r2t | ntj|rHt | d S )Nrq   )r   ZTESTFNr   r5   isfileunlinkrs   Zrmtree)r
   Zsaved_valueru   r   r   r   restore_files   s    z$saved_test_environment.restore_filesc                 C   s    g | ]}| d rtt|qS )ZLC_)
startswithgetattrr   )rt   lcr   r   r   
<listcomp>   s    
z!saved_test_environment.<listcomp>c              
   C   sL   g }| j D ]<}z||t|d f W q
 ttfk
rD   Y q
Y q
X q
|S r   )_lcappendr   	setlocale	TypeError
ValueError)r
   Zpairingsr   r   r   r   
get_locale   s    
z!saved_test_environment.get_localec                 C   s   |D ]\}}t || qd S r   )r   r   )r
   rT   r   Zsettingr   r   r   restore_locale   s    z%saved_test_environment.restore_localec                 C   s   t jS r   rD   showwarningr   r   r   r   get_warnings_showwarning   s    z/saved_test_environment.get_warnings_showwarningc                 C   s
   |t _d S r   r   )r
   fxnr   r   r   restore_warnings_showwarning   s    z3saved_test_environment.restore_warnings_showwarningc                 c   sD   | j D ]8}|dd}d| }d| }|t| |t| |fV  qd S )N._Zget_Zrestore_)	resourcesreplacer~   )r
   nameZmethod_suffixZget_nameZrestore_namer   r   r   resource_info  s
    
z$saved_test_environment.resource_infoc                 C   s   t dd |  D | _| S )Nc                 s   s   | ]\}}}|| fV  qd S r   r   )rt   r   rJ   restorer   r   r   rv   	  s     z3saved_test_environment.__enter__.<locals>.<genexpr>)r0   r   saved_valuesr   r   r   r   	__enter__  s    
z saved_test_environment.__enter__c           
      C   s   | j }| ` t  |  jtjO  _|  D ]n\}}}| }||}	||	kr*d| _||	 | js*| js*t	| d| j
  td|	 d| dtjdd q*dS )NTz was modified by z
  Before: z
  After:   )fileflushF)r   r   Z
gc_collectchangedZenvironment_alteredr   popr	   r   r   r   printr   r(   )
r
   exc_typeZexc_valZexc_tbr   r   rJ   r   ZcurrentZoriginalr   r   r   __exit__  s"    
 zsaved_test_environment.__exit__N)r   F)?__name__
__module____qualname____doc__r   r   r   r   r   r   r   r    r"   r%   r&   r)   r*   r-   r.   r1   r4   r6   r7   r9   r:   r<   r>   rA   rC   rF   rG   rM   rN   rQ   rU   rW   rX   rZ   r[   r\   r]   r_   r`   rc   rd   rg   rh   rl   rm   ro   rp   ry   r|   dirr   r   r   r   r   r   r   r   r   r   r   r   r   r      st   r   )r   r@   r   rY   r   rO   r   rj   ra   rD   Ztestr   Ztest.libregrtest.utilsr   Z_multiprocessingZmultiprocessing.processre   ImportErrorr   r   r   r   r   <module>   s    
