a
    "h(.                     @   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Zd dlmZ d dlmZ zd dlZd dlZW n ey   dZY n0 G dd dZdS )    N)support)print_warningc                   @   s  e Zd ZdZdZd}d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 Z5dfdg Z6dhdi Z7djdk Z8dldm e9e:D Z;dndo Z<dpdq Z=drds Z>dtdu Z?dvdw Z@dxdy ZAdzd{ ZBd|S )~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   A/opt/python-3.9.21/usr/lib/python3.9/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_policyzurllib.requests._url_tempfileszurllib.requests._openerc                 C   s   t tjjS r   )listurllibrequestZ_url_tempfilesr
   r   r   r   "get_urllib_requests__url_tempfilesK   s    z9saved_test_environment.get_urllib_requests__url_tempfilesc                 C   s   |D ]}t | qd S r   )r   unlink)r
   Z	tempfilesfilenamer   r   r   &restore_urllib_requests__url_tempfilesM   s    z=saved_test_environment.restore_urllib_requests__url_tempfilesc                 C   s   t jjS r   r   r   _openerr   r   r   r   get_urllib_requests__openerQ   s    z2saved_test_environment.get_urllib_requests__openerc                 C   s   |t j_d S r   r   )r
   openerr   r   r   restore_urllib_requests__openerS   s    z6saved_test_environment.restore_urllib_requests__openerc                 C   s   t  S r   )r   Zmaybe_get_event_loop_policyr   r   r   r   %get_asyncio_events__event_loop_policyV   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_policyX   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_argv[   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_argv]   s    
z'saved_test_environment.restore_sys_argvc                 C   s   t  S r   )osgetcwdr   r   r   r   get_cwda   s    zsaved_test_environment.get_cwdc                 C   s   t | d S r   )r*   chdir)r
   Z	saved_cwdr   r   r   restore_cwdc   s    z"saved_test_environment.restore_cwdc                 C   s   t jS r   r#   stdoutr   r   r   r   get_sys_stdoutf   s    z%saved_test_environment.get_sys_stdoutc                 C   s
   |t _d S r   r/   )r
   Zsaved_stdoutr   r   r   restore_sys_stdouth   s    z)saved_test_environment.restore_sys_stdoutc                 C   s   t jS r   r#   stderrr   r   r   r   get_sys_stderrk   s    z%saved_test_environment.get_sys_stderrc                 C   s
   |t _d S r   r3   )r
   Zsaved_stderrr   r   r   restore_sys_stderrm   s    z)saved_test_environment.restore_sys_stderrc                 C   s   t jS r   r#   stdinr   r   r   r   get_sys_stdinp   s    z$saved_test_environment.get_sys_stdinc                 C   s
   |t _d S r   r7   )r
   Zsaved_stdinr   r   r   restore_sys_stdinr   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_environu   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_environw   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_path|   s    z#saved_test_environment.get_sys_pathc                 C   s    |d t _|d t jd d < d S r&   )r#   rA   )r
   Z
saved_pathr   r   r   restore_sys_path~   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_hooks   s    z)saved_test_environment.get_sys_path_hooksc                 C   s    |d t _|d t jd d < d S r&   )r#   rD   )r
   Zsaved_hooksr   r   r   restore_sys_path_hooks   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   rK   )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&   )rP   rQ   )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
   rT   r   r   r   get_asyncore_socket_map   s    z.saved_test_environment.get_asyncore_socket_mapc                 C   s0   t jd}|d ur,|jdd |j| d S )NrT   T)Z
ignore_all)r#   rU   rV   Z	close_allrW   r?   )r
   Z	saved_maprT   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_FORMATSrX   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'   )r[   r\   r>   r?   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   )r[   _UNPACK_FORMATSrX   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 r^   )r[   rb   r>   r?   r_   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"   logging	_handlersrX   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"   re   _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#   rl   )r
   Zsaved_optionsr   r   r   restore_sys_warnoptions   s    
z.saved_test_environment.restore_sys_warnoptionsc                 C   s
   t j S r   )	threading	_danglingrX   r   r   r   r   get_threading__dangling   s    z.saved_test_environment.get_threading__danglingc                 C   s   t j  t j| d S r   )ro   rp   r>   r?   r_   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process_cleanuprp   rX   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   )rs   rt   rp   r>   r?   r_   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_VARSr<   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&   )ry   rz   r>   r?   r_   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"   ry   _INSTALL_SCHEMESrX   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&   )ry   r}   r>   r?   r_   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*   rA   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}||vrH|d |vrHtj|r2t | ntj|rHt | d S )Nr   )r   ZTESTFNr*   rA   isfiler   r   rmtree)r
   Zsaved_valuer   r   r   r   restore_files   s    z$saved_test_environment.restore_filesc                 C   s    g | ]}| d rtt|qS )LC_)
startswithgetattrr   )r   lcr   r   r   
<listcomp>   s   
z!saved_test_environment.<listcomp>c              
   C   sJ   g }| j D ]:}z||t|d f W q
 ttfyB   Y q
Y q
0 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
   r`   r   Zsettingr   r   r   restore_locale  s    z%saved_test_environment.restore_localec                 C   s   t jS r   rP   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_suffix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   )r   r   rV   restorer   r   r   r         z3saved_test_environment.__enter__.<locals>.<genexpr>)r<   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   
gc_collectchangedZenvironment_alteredr   popr	   r   r   r   printr#   r4   )
r
   exc_typeexc_valexc_tbr   r   rV   r   currentZoriginalr   r   r   __exit__  s     
zsaved_test_environment.__exit__N)r   F)C__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r!   r%   r)   r,   r.   r1   r2   r5   r6   r9   r:   r=   r@   rB   rC   rE   rF   rH   rJ   rM   rO   rR   rS   rY   rZ   r]   ra   rc   rd   rg   rh   rj   rk   rm   rn   rq   rr   rv   rw   r{   r|   r~   r   r   r   dirr   r   r   r   r   r   r   r   r   r   r   r   r   r      s|   r   )r    rL   r   re   r*   r[   r#   ry   ro   Zurllib.requestr   rP   testr   Ztest.libregrtest.utilsr   _multiprocessingZmultiprocessing.processrs   ImportErrorr   r   r   r   r   <module>   s"   
