o
    f2                     @   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	   0/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.showwarningshutil_archive_formats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    list_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   	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   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 r3   )r   set_event_loop_policy)r   policyr4   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   argvr6   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   r=   )r   
saved_argvr	   r	   r
   restore_sys_argvf      
z'saved_test_environment.restore_sys_argvc                 C      t  S r   )osgetcwdr6   r	   r	   r
   get_cwdj      zsaved_test_environment.get_cwdc                 C      t | d S r   )rH   chdir)r   	saved_cwdr	   r	   r
   restore_cwdl      z"saved_test_environment.restore_cwdc                 C      t jS r   r   stdoutr6   r	   r	   r
   get_sys_stdouto      z%saved_test_environment.get_sys_stdoutc                 C   
   |t _d S r   rR   )r   saved_stdoutr	   r	   r
   restore_sys_stdoutq      
z)saved_test_environment.restore_sys_stdoutc                 C   rQ   r   r   stderrr6   r	   r	   r
   get_sys_stderrt   rU   z%saved_test_environment.get_sys_stderrc                 C   rV   r   rZ   )r   saved_stderrr	   r	   r
   restore_sys_stderrv   rY   z)saved_test_environment.restore_sys_stderrc                 C   rQ   r   r   stdinr6   r	   r	   r
   get_sys_stdiny   rU   z$saved_test_environment.get_sys_stdinc                 C   rV   r   r_   )r   saved_stdinr	   r	   r
   restore_sys_stdin{   rY   z(saved_test_environment.restore_sys_stdinc                 C   s   t tjtjttjfS r   )r<   rH   environdictr6   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 rA   )rH   rd   clearupdate)r   saved_environr	   r	   r
   restore_os_environ   s   

z)saved_test_environment.restore_os_environc                 C   r;   r   )r<   r   pathr6   r	   r	   r
   get_sys_path   r?   z#saved_test_environment.get_sys_pathc                 C   r@   rA   )r   rk   )r   
saved_pathr	   r	   r
   restore_sys_path   rF   z'saved_test_environment.restore_sys_pathc                 C   r;   r   )r<   r   
path_hooksr6   r	   r	   r
   get_sys_path_hooks   r?   z)saved_test_environment.get_sys_path_hooksc                 C   r@   rA   )r   ro   )r   saved_hooksr	   r	   r
   restore_sys_path_hooks   rF   z-saved_test_environment.restore_sys_path_hooksc                 C   rG   r   )r   gettracer6   r	   r	   r
   get_sys_gettrace   rK   z'saved_test_environment.get_sys_gettracec                 C   rL   r   )r   settrace)r   	trace_fxnr	   r	   r
   restore_sys_gettrace   rP   z+saved_test_environment.restore_sys_gettracec                 C   rQ   r   builtinsr   r6   r	   r	   r
   get___import__   rU   z%saved_test_environment.get___import__c                 C   rV   r   rx   )r   import_r	   r	   r
   restore___import__   rY   z)saved_test_environment.restore___import__c                 C   &   |  d}t|j|j|jd d  fS Nwarnings)r    r<   filtersr   r   r	   r	   r
   get_warnings_filters   s   
z+saved_test_environment.get_warnings_filtersc                 C   s*   |  d}|d |_|d |jd d < d S )Nr   rB   rC   )r   r   )r   saved_filtersr   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   r   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 )Nr   T)
ignore_all)r   r   r   	close_allr   rh   )r   	saved_mapr   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_FORMATSr   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   rB   )r   r   rg   rh   r   savedr   r	   r	   r
   restore_shutil_archive_formats      


z5saved_test_environment.restore_shutil_archive_formatsc                 C   r   r   )r    _UNPACK_FORMATSr   r   r	   r	   r
   get_shutil_unpack_formats      
z0saved_test_environment.get_shutil_unpack_formatsc                 C   r   r   )r   r   rg   rh   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    r<   	_handlersr   r   r   r	   r	   r
   get_logging__handlers   s   
z,saved_test_environment.get_logging__handlersc                 C      d S r   r	   )r   saved_handlersr	   r	   r
   restore_logging__handlers      z0saved_test_environment.restore_logging__handlersc                 C   r}   r   )r    r<   _handlerListr   r	   r	   r
   get_logging__handlerList   s   
z/saved_test_environment.get_logging__handlerListc                 C   r   r   r	   )r   saved_handlerListr	   r	   r
   restore_logging__handlerList   r   z3saved_test_environment.restore_logging__handlerListc                 C   r;   r   )r<   r   warnoptionsr6   r	   r	   r
   get_sys_warnoptions   r?   z*saved_test_environment.get_sys_warnoptionsc                 C   r@   rA   )r   r   )r   saved_optionsr	   r	   r
   restore_sys_warnoptions   rF   z.saved_test_environment.restore_sys_warnoptionsc                 C   s
   t j S r   )	threading	_danglingr   r6   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   rg   rh   )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   r   )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   rg   rh   )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    get_config_varr<   _CONFIG_VARSre   r   r   r	   r	   r
   get_sysconfig__CONFIG_VARS   s
   

z1saved_test_environment.get_sysconfig__CONFIG_VARSc                 C   r   Nr   rB   rC   )r   r   rg   rh   r   r   r   r	   r	   r
   restore_sysconfig__CONFIG_VARS   r   z5saved_test_environment.restore_sysconfig__CONFIG_VARSc                 C   r   )Nr   )r    r<   _INSTALL_SCHEMESr   r   r	   r	   r
   get_sysconfig__INSTALL_SCHEMES   s   
z5saved_test_environment.get_sysconfig__INSTALL_SCHEMESc                 C   r   r   )r   r   rg   rh   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)rH   rk   isdir).0fnr	   r	   r
   	<genexpr>  s     z3saved_test_environment.get_files.<locals>.<genexpr>)sortedrH   listdirr6   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   TESTFNrH   rk   isfiler(   r   rmtree)r   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   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   settingr	   r	   r
   restore_locale  s   z%saved_test_environment.restore_localec                 C   r,   r~   )r    showwarningr   r	   r	   r
   get_warnings_showwarning  r/   z/saved_test_environment.get_warnings_showwarningc                 C   r0   r~   )r   r   )r   fxnr   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._get_restore_)	resourcesreplacer   )r   r   method_suffixget_name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   r   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_collectenvironment_alteredr   r   r   r   printr   r[   )
r   exc_typeexc_valexc_tbr   r   r   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.   r2   r7   r:   r>   rE   rJ   rO   rT   rX   r\   r^   ra   rc   rf   rj   rl   rn   rp   rr   rt   rw   rz   r|   r   r   r   r   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   )ry   r   rH   r   r   testr   test.supportr   test.libregrtest.utilsr   	Exceptionr   r   r	   r	   r	   r
   <module>   s    