o
    éT•j�2  ã                   @   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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[„ 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„ ZCd€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 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    