o
    JXh2                     @   sn   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 d dl	m
Z
 G dd deZG dd dZdS )	    N)support)	os_helper)print_warningc                   @   s   e Zd ZdS )SkipTestEnvironmentN)__name__
__module____qualname__ r	   r	   C/opt/python-3.10.19/usr/lib/python3.10/test/libregrtest/save_env.pyr      s    r   c                   @   s  e Zd ZdZdd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[ Z/d\d] Z0d^d_ Z1d`da Z2dbdc Z3ddde Z4dfdg Z5dhdi Z6djdk Z7dldm Z8dndo Z9dpdq e:e;D Z<drds Z=dtdu Z>dvdw Z?dxdy Z@dzd{ ZAd|d} ZBd~d ZCdS )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 support.environment_altered
    attribute 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.
    r   F)pgoc                C   s   || _ || _|| _|| _d S N)testnameverbosequietr   )selfr   r   r   r   r	   r	   r
   __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 j| S r   )sysmodulesr   namer	   r	   r
   
get_moduleD      
z!saved_test_environment.get_modulec                 C   s    z|  |W S  ty   tw r   )r   KeyErrorr   r   r	   r	   r
   try_get_moduleH   s
   z%saved_test_environment.try_get_modulec                 C   s   |  d}t|jS Nzurllib.request)r   listZ_url_tempfilesr   urllib_requestr	   r	   r
   "get_urllib_requests__url_tempfilesO      

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_tempfilesR   s   z=saved_test_environment.restore_urllib_requests__url_tempfilesc                 C      |  d}|jS r   )r   _openerr!   r	   r	   r
   get_urllib_requests__openerV      
z2saved_test_environment.get_urllib_requests__openerc                 C      |  d}||_d S r   )r   r)   )r   openerr"   r	   r	   r
   restore_urllib_requests__openerY   r$   z6saved_test_environment.restore_urllib_requests__openerc                 C   s   |  d t S Nasyncio)r   r   Zmaybe_get_event_loop_policyr   r	   r	   r
   %get_asyncio_events__event_loop_policy]   s   
z<saved_test_environment.get_asyncio_events__event_loop_policyc                 C   s   |  d}|| d S r/   )r   Zset_event_loop_policy)r   Zpolicyr0   r	   r	   r
   )restore_asyncio_events__event_loop_policy`   s   
z@saved_test_environment.restore_asyncio_events__event_loop_policyc                 C      t tjtjtjd d  fS r   )idr   argvr1   r	   r	   r
   get_sys_argvd      z#saved_test_environment.get_sys_argvc                 C       |d t _|d t jd d < d S N      )r   r6   )r   Z
saved_argvr	   r	   r
   restore_sys_argvf      
z'saved_test_environment.restore_sys_argvc                 C      t  S r   )osgetcwdr1   r	   r	   r
   get_cwdj      zsaved_test_environment.get_cwdc                 C      t | d S r   )r@   chdir)r   Z	saved_cwdr	   r	   r
   restore_cwdl      z"saved_test_environment.restore_cwdc                 C      t jS r   r   stdoutr1   r	   r	   r
   get_sys_stdouto      z%saved_test_environment.get_sys_stdoutc                 C   
   |t _d S r   rI   )r   Zsaved_stdoutr	   r	   r
   restore_sys_stdoutq      
z)saved_test_environment.restore_sys_stdoutc                 C   rH   r   r   stderrr1   r	   r	   r
   get_sys_stderrt   rL   z%saved_test_environment.get_sys_stderrc                 C   rM   r   rP   )r   Zsaved_stderrr	   r	   r
   restore_sys_stderrv   rO   z)saved_test_environment.restore_sys_stderrc                 C   rH   r   r   stdinr1   r	   r	   r
   get_sys_stdiny   rL   z$saved_test_environment.get_sys_stdinc                 C   rM   r   rT   )r   Zsaved_stdinr	   r	   r
   restore_sys_stdin{   rO   z(saved_test_environment.restore_sys_stdinc                 C   s   t tjtjttjfS r   )r5   r@   environdictr1   r	   r	   r
   get_os_environ~   s   z%saved_test_environment.get_os_environc                 C   s(   |d t _t j  t j|d  d S r:   )r@   rX   clearupdate)r   Zsaved_environr	   r	   r
   restore_os_environ   s   

z)saved_test_environment.restore_os_environc                 C   r4   r   )r5   r   pathr1   r	   r	   r
   get_sys_path   r8   z#saved_test_environment.get_sys_pathc                 C   r9   r:   )r   r^   )r   Z
saved_pathr	   r	   r
   restore_sys_path   r>   z'saved_test_environment.restore_sys_pathc                 C   r4   r   )r5   r   
path_hooksr1   r	   r	   r
   get_sys_path_hooks   r8   z)saved_test_environment.get_sys_path_hooksc                 C   r9   r:   )r   ra   )r   Zsaved_hooksr	   r	   r
   restore_sys_path_hooks   r>   z-saved_test_environment.restore_sys_path_hooksc                 C   r?   r   )r   gettracer1   r	   r	   r
   get_sys_gettrace   rC   z'saved_test_environment.get_sys_gettracec                 C   rD   r   )r   settrace)r   Z	trace_fxnr	   r	   r
   restore_sys_gettrace   rG   z+saved_test_environment.restore_sys_gettracec                 C   rH   r   builtinsr   r1   r	   r	   r
   get___import__   rL   z%saved_test_environment.get___import__c                 C   rM   r   rh   )r   import_r	   r	   r
   restore___import__   rO   z)saved_test_environment.restore___import__c                 C   &   |  d}t|j|j|jd d  fS Nwarnings)r   r5   filtersr   ro   r	   r	   r
   get_warnings_filters   s   
z+saved_test_environment.get_warnings_filtersc                 C   s*   |  d}|d |_|d |jd d < d S )Nro   r;   r<   )r   rp   )r   Zsaved_filtersro   r	   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   r   get
socket_mapcopy)r   rt   r	   r	   r
   get_asyncore_socket_map   s   z.saved_test_environment.get_asyncore_socket_mapc                 C   s4   t jd}|d ur|jdd |j| d S d S )Nrt   T)Z
ignore_all)r   r   ru   Z	close_allrv   r\   )r   Z	saved_maprt   r	   r	   r
   restore_asyncore_socket_map   s
   z2saved_test_environment.restore_asyncore_socket_mapc                 C      |  d}|j|j fS Nshutil)r   _ARCHIVE_FORMATSrw   r   r|   r	   r	   r
   get_shutil_archive_formats   s   
z1saved_test_environment.get_shutil_archive_formatsc                 C   2   |  d}|d |_|j  |j|d  d S Nr|   r   r;   )r   r}   r[   r\   r   savedr|   r	   r	   r
   restore_shutil_archive_formats      


z5saved_test_environment.restore_shutil_archive_formatsc                 C   rz   r{   )r   _UNPACK_FORMATSrw   r~   r	   r	   r
   get_shutil_unpack_formats      
z0saved_test_environment.get_shutil_unpack_formatsc                 C   r   r   )r   r   r[   r\   r   r	   r	   r
   restore_shutil_unpack_formats   r   z4saved_test_environment.restore_shutil_unpack_formatsc                 C   "   |  d}t|j|j|j fS Nlogging)r   r5   	_handlersrw   r   r   r	   r	   r
   get_logging__handlers   s   
z,saved_test_environment.get_logging__handlersc                 C      d S r   r	   )r   Zsaved_handlersr	   r	   r
   restore_logging__handlers      z0saved_test_environment.restore_logging__handlersc                 C   rm   r   )r   r5   _handlerListr   r	   r	   r
   get_logging__handlerList   s   
z/saved_test_environment.get_logging__handlerListc                 C   r   r   r	   )r   Zsaved_handlerListr	   r	   r
   restore_logging__handlerList   r   z3saved_test_environment.restore_logging__handlerListc                 C   r4   r   )r5   r   warnoptionsr1   r	   r	   r
   get_sys_warnoptions   r8   z*saved_test_environment.get_sys_warnoptionsc                 C   r9   r:   )r   r   )r   Zsaved_optionsr	   r	   r
   restore_sys_warnoptions   r>   z.saved_test_environment.restore_sys_warnoptionsc                 C   s
   t j S r   )	threading	_danglingrw   r1   r	   r	   r
   get_threading__dangling   r   z.saved_test_environment.get_threading__danglingc                 C   s   t j  t j| d S r   )r   r   r[   r\   )r   r   r	   r	   r
   restore_threading__dangling   r   z2saved_test_environment.restore_threading__danglingc                 C   s   |  d}|  |j S Nzmultiprocessing.process)r   _cleanupr   rw   )r   multiprocessing_processr	   r	   r
   %get_multiprocessing_process__dangling   s   

z<saved_test_environment.get_multiprocessing_process__danglingc                 C   s$   |  d}|j  |j| d S r   )r   r   r[   r\   )r   r   r   r	   r	   r
   )restore_multiprocessing_process__dangling   s   

z@saved_test_environment.restore_multiprocessing_process__danglingc                 C   s,   |  d}|d t|j|jt|jfS )N	sysconfigprefix)r   Zget_config_varr5   _CONFIG_VARSrY   r   r   r	   r	   r
   get_sysconfig__CONFIG_VARS   s
   

z1saved_test_environment.get_sysconfig__CONFIG_VARSc                 C   r   Nr   r;   r<   )r   r   r[   r\   r   r   r   r	   r	   r
   restore_sysconfig__CONFIG_VARS   r   z5saved_test_environment.restore_sysconfig__CONFIG_VARSc                 C   r   )Nr   )r   r5   _INSTALL_SCHEMESrw   r   r	   r	   r
   get_sysconfig__INSTALL_SCHEMES   s   
z5saved_test_environment.get_sysconfig__INSTALL_SCHEMESc                 C   r   r   )r   r   r[   r\   r   r	   r	   r
   "restore_sysconfig__INSTALL_SCHEMES   r   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@   r^   isdir).0fnr	   r	   r
   	<genexpr>  s     z3saved_test_environment.get_files.<locals>.<genexpr>)sortedr@   listdirr1   r	   r	   r
   	get_files  s   z saved_test_environment.get_filesc                 C   sZ   t j}||vr'|d |vr)tj|rt | d S tj|r+t | d S d S d S d S )Nr   )r   ZTESTFNr@   r^   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   sD   g }| j D ]}z||t|d f W q ttfy   Y qw |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   r(   rn   )r   showwarningrq   r	   r	   r
   get_warnings_showwarning  r+   z/saved_test_environment.get_warnings_showwarningc                 C   r,   rn   )r   r   )r   fxnro   r	   r	   r
   restore_warnings_showwarning  r$   z3saved_test_environment.restore_warnings_showwarningc                 c   sF    | j D ]}|dd}d| }d| }|t| |t| |fV  qd S )N._Zget_Zrestore_)	resourcesreplacer   )r   r   Zmethod_suffixget_nameZrestore_namer	   r	   r
   resource_info#  s   
z$saved_test_environment.resource_infoc              	   C   sP   g | _ |  D ]\}}}z| }W n	 ty   Y qw | j ||||f q| S r   )saved_valuesr   r   r   )r   r   ru   restoreoriginalr	   r	   r
   	__enter__*  s   
z saved_test_environment.__enter__c           
      C   s   | j }d | _ t  |D ]3\}}}}| }	|	|kr?dt_|| | 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_collectZenvironment_alteredr   r   r   r   printr   rQ   )
r   exc_typeexc_valexc_tbr   r   ru   r   r   currentr	   r	   r
   __exit__5  s   zsaved_test_environment.__exit__N)r   F)Dr   r   r   __doc__r   r   r   r   r#   r'   r*   r.   r2   r3   r7   r=   rB   rF   rK   rN   rR   rS   rV   rW   rZ   r]   r_   r`   rb   rc   re   rg   rj   rl   rr   rs   rx   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   dirr   r   r   r   r   r   r   r   r   r	   r	   r	   r
   r      s    r   )ri   r   r@   r   r   testr   Ztest.supportr   Ztest.libregrtest.utilsr   	Exceptionr   r   r	   r	   r	   r
   <module>   s    