
    h2                         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e          Z G d d          ZdS )	    N)support)	os_helper)print_warningc                       e Zd ZdS )SkipTestEnvironmentN)__name__
__module____qualname__     0/usr/lib/python3.11/test/libregrtest/save_env.pyr   r      s        Dr   r   c                      e Zd ZdZdDdddZdZd Zd Zd	 Zd
 Z	d Z
d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd  Zd! Z d" Z!d# Z"d$ Z#d% Z$d& Z%d' Z&d( Z'd) Z(d* Z)d+ Z*d, Z+d- Z,d. Z-d/ Z.d0 Z/d1 Z0d2 Z1d3 Z2d4 Z3d5 Z4d6 Z5d7 Z6d8 Z7d9 Z8d: Z9d;  e:e;          D             Z<d< Z=d= Z>d> Z?d? Z@d@ ZAdA ZBdB ZCdCS )E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                >    || _         || _        || _        || _        d S N)testnameverbosequietr   )selfr   r   r   r   s        r   __init__zsaved_test_environment.__init__%   s"     
r   )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                 &    t           j        |         S r   )sysmodulesr   names     r   
get_modulez!saved_test_environment.get_moduleD   s    {4  r   c                 X    	 |                      |          S # t          $ r t          w xY wr   )r#   KeyErrorr   r!   s     r   try_get_modulez%saved_test_environment.try_get_moduleH   s:    	&??4((( 	& 	& 	&%%	&s    )c                 T    |                      d          }t          |j                  S Nzurllib.request)r&   list_url_tempfilesr   urllib_requests     r   "get_urllib_requests__url_tempfilesz9saved_test_environment.get_urllib_requests__url_tempfilesO   s'    ,,-=>>N1222r   c                 8    |D ]}t          j        |           d S r   )r   unlink)r   	tempfilesfilenames      r   &restore_urllib_requests__url_tempfilesz=saved_test_environment.restore_urllib_requests__url_tempfilesR   s/    ! 	' 	'HX&&&&	' 	'r   c                 :    |                      d          }|j        S r(   )r&   _openerr+   s     r   get_urllib_requests__openerz2saved_test_environment.get_urllib_requests__openerV   s    ,,-=>>%%r   c                 >    |                      d          }||_        d S r(   )r#   r4   )r   openerr,   s      r   restore_urllib_requests__openerz6saved_test_environment.restore_urllib_requests__openerY   s"    )9::!'r   c                 R    |                      d           t          j                    S Nasyncio)r&   r   maybe_get_event_loop_policyr   s    r   %get_asyncio_events__event_loop_policyz<saved_test_environment.get_asyncio_events__event_loop_policy]   s%    I&&&2444r   c                 Z    |                      d          }|                    |           d S r:   )r#   set_event_loop_policy)r   policyr;   s      r   )restore_asyncio_events__event_loop_policyz@saved_test_environment.restore_asyncio_events__event_loop_policy`   s-    //),,%%f-----r   c                 r    t          t          j                  t          j        t          j        d d          fS r   )idr   argvr=   s    r   get_sys_argvz#saved_test_environment.get_sys_argvd   #    #(||SXsx{22r   c                 X    |d         t           _        |d         t           j        d d <   d S N      )r   rE   )r   
saved_argvs     r   restore_sys_argvz'saved_test_environment.restore_sys_argvf   $    a= mr   c                 (    t          j                    S r   )osgetcwdr=   s    r   get_cwdzsaved_test_environment.get_cwdj   s    y{{r   c                 .    t          j        |           d S r   )rP   chdir)r   	saved_cwds     r   restore_cwdz"saved_test_environment.restore_cwdl   s    
r   c                     t           j        S r   r   stdoutr=   s    r   get_sys_stdoutz%saved_test_environment.get_sys_stdouto   
    zr   c                     |t           _        d S r   rX   )r   saved_stdouts     r   restore_sys_stdoutz)saved_test_environment.restore_sys_stdoutq       !


r   c                     t           j        S r   r   stderrr=   s    r   get_sys_stderrz%saved_test_environment.get_sys_stderrt   r[   r   c                     |t           _        d S r   ra   )r   saved_stderrs     r   restore_sys_stderrz)saved_test_environment.restore_sys_stderrv   r_   r   c                     t           j        S r   r   stdinr=   s    r   get_sys_stdinz$saved_test_environment.get_sys_stdiny   s
    yr   c                     |t           _        d S r   rh   )r   saved_stdins     r   restore_sys_stdinz(saved_test_environment.restore_sys_stdin{   s    			r   c                 |    t          t          j                  t          j        t          t          j                  fS r   )rD   rP   environdictr=   s    r   get_os_environz%saved_test_environment.get_os_environ~   s#    "*~~rz4
+;+;;;r   c                     |d         t           _        t           j                                         t           j                            |d                    d S rI   )rP   ro   clearupdate)r   saved_environs     r   restore_os_environz)saved_test_environment.restore_os_environ   sC    "1%




-*+++++r   c                 r    t          t          j                  t          j        t          j        d d          fS r   )rD   r   pathr=   s    r   get_sys_pathz#saved_test_environment.get_sys_path   rG   r   c                 X    |d         t           _        |d         t           j        d d <   d S rI   )r   rx   )r   
saved_paths     r   restore_sys_pathz'saved_test_environment.restore_sys_path   rN   r   c                 r    t          t          j                  t          j        t          j        d d          fS r   )rD   r   
path_hooksr=   s    r   get_sys_path_hooksz)saved_test_environment.get_sys_path_hooks   s&    #.!!3>3>!!!3DDDr   c                 X    |d         t           _        |d         t           j        d d <   d S rI   )r   r~   )r   saved_hookss     r   restore_sys_path_hooksz-saved_test_environment.restore_sys_path_hooks   s'    $Q'Nqqqr   c                 (    t          j                    S r   )r   gettracer=   s    r   get_sys_gettracez'saved_test_environment.get_sys_gettrace   s    |~~r   c                 .    t          j        |           d S r   )r   settrace)r   	trace_fxns     r   restore_sys_gettracez+saved_test_environment.restore_sys_gettrace   s    Yr   c                     t           j        S r   builtinsr   r=   s    r   get___import__z%saved_test_environment.get___import__   s    ""r   c                     |t           _        d S r   r   )r   import_s     r   restore___import__z)saved_test_environment.restore___import__   s    %r   c                 ~    |                      d          }t          |j                  |j        |j        d d          fS Nwarnings)r&   rD   filtersr   r   s     r   get_warnings_filtersz+saved_test_environment.get_warnings_filters   s<    &&z22("##X%5x7G7JJJr   c                 n    |                      d          }|d         |_        |d         |j        d d <   d S )Nr   rJ   rK   )r#   r   )r   saved_filtersr   s      r   restore_warnings_filtersz/saved_test_environment.restore_warnings_filters   s<    ??:..(++A.r   c                 z    t           j                            d          }|r|j                                        pi S )Nasyncore)r   r    get
socket_mapcopy)r   r   s     r   get_asyncore_socket_mapz.saved_test_environment.get_asyncore_socket_map   s4    ;??:..6H/4466<"<r   c                     t           j                            d          }|2|                    d           |j                            |           d S d S )Nr   T)
ignore_all)r   r    r   	close_allr   rt   )r   	saved_mapr   s      r   restore_asyncore_socket_mapz2saved_test_environment.restore_asyncore_socket_map   sW    ;??:..$///&&y11111  r   c                 l    |                      d          }|j        |j                                        fS Nshutil)r&   _ARCHIVE_FORMATSr   r   r   s     r   get_shutil_archive_formatsz1saved_test_environment.get_shutil_archive_formats   s4    $$X.. &(?(D(D(F(FFFr   c                     |                      d          }|d         |_        |j                                         |j                            |d                    d S Nr   r   rJ   )r#   r   rs   rt   r   savedr   s      r   restore_shutil_archive_formatsz5saved_test_environment.restore_shutil_archive_formats   sU    **"'(%%'''&&uQx00000r   c                 l    |                      d          }|j        |j                                        fS r   )r&   _UNPACK_FORMATSr   r   s     r   get_shutil_unpack_formatsz0saved_test_environment.get_shutil_unpack_formats   s2    $$X..%v'='B'B'D'DDDr   c                     |                      d          }|d         |_        |j                                         |j                            |d                    d S r   )r#   r   rs   rt   r   s      r   restore_shutil_unpack_formatsz4saved_test_environment.restore_shutil_unpack_formats   sU    **!&q$$&&&%%eAh/////r   c                     |                      d          }t          |j                  |j        |j                                        fS Nlogging)r&   rD   	_handlersr   r   r   s     r   get_logging__handlersz,saved_test_environment.get_logging__handlers   s?    %%i00'#$$g&79J9O9O9Q9QQQr   c                     d S r   r   )r   saved_handlerss     r   restore_logging__handlersz0saved_test_environment.restore_logging__handlers       r   c                 ~    |                      d          }t          |j                  |j        |j        d d          fS r   )r&   rD   _handlerListr   s     r   get_logging__handlerListz/saved_test_environment.get_logging__handlerList   s?    %%i00'&'')=w?STUTUTU?VVVr   c                     d S r   r   )r   saved_handlerLists     r   restore_logging__handlerListz3saved_test_environment.restore_logging__handlerList   r   r   c                 r    t          t          j                  t          j        t          j        d d          fS r   )rD   r   warnoptionsr=   s    r   get_sys_warnoptionsz*saved_test_environment.get_sys_warnoptions   s&    #/""COS_QQQ5GGGr   c                 X    |d         t           _        |d         t           j        d d <   d S rI   )r   r   )r   saved_optionss     r   restore_sys_warnoptionsz.saved_test_environment.restore_sys_warnoptions   s)    '**1-r   c                 >    t           j                                        S r   )	threading	_danglingr   r=   s    r   get_threading__danglingz.saved_test_environment.get_threading__dangling   s    "'')))r   c                     t           j                                         t           j                            |           d S r   )r   r   rs   rt   )r   r   s     r   restore_threading__danglingz2saved_test_environment.restore_threading__dangling   s4    !!###""5)))))r   c                     |                      d          }|                                 |j                                        S Nzmultiprocessing.process)r&   _cleanupr   r   )r   multiprocessing_processs     r   %get_multiprocessing_process__danglingz<saved_test_environment.get_multiprocessing_process__dangling   s>    "&"5"56O"P"P((***&055777r   c                     |                      d          }|j                                         |j                            |           d S r   )r#   r   rs   rt   )r   r   r   s      r   )restore_multiprocessing_process__danglingz@saved_test_environment.restore_multiprocessing_process__dangling   sG    "&//2K"L"L)//111)0077777r   c                     |                      d          }|                    d           t          |j                  |j        t	          |j                  fS )N	sysconfigprefix)r&   get_config_varrD   _CONFIG_VARSrp   r   r   s     r   get_sysconfig__CONFIG_VARSz1saved_test_environment.get_sysconfig__CONFIG_VARS   sT    ''44	  ***9)**I,BY+,,. 	.r   c                     |                      d          }|d         |_        |j                                         |j                            |d                    d S Nr   rJ   rK   )r#   r   rs   rt   r   r   r   s      r   restore_sysconfig__CONFIG_VARSz5saved_test_environment.restore_sysconfig__CONFIG_VARS   sU    OOK00	!&q	$$&&&%%eAh/////r   c                     |                      d          }t          |j                  |j        |j                                        fS )Nr   )r&   rD   _INSTALL_SCHEMESr   r   s     r   get_sysconfig__INSTALL_SCHEMESz5saved_test_environment.get_sysconfig__INSTALL_SCHEMES   sD    ''44	9-..	0J*//113 	3r   c                     |                      d          }|d         |_        |j                                         |j                            |d                    d S r   )r#   r   rs   rt   r   s      r   "restore_sysconfig__INSTALL_SCHEMESz9saved_test_environment.restore_sysconfig__INSTALL_SCHEMES   sU    OOK00	%*1X	""((***"))%(33333r   c                 V    t          d t          j                    D                       S )Nc              3   b   K   | ]*}|t           j                            |          rd ndz   V  +dS )/ N)rP   rx   isdir).0fns     r   	<genexpr>z3saved_test_environment.get_files.<locals>.<genexpr>  sR       . . 27==#4#4<CC"= . . . . . .r   )sortedrP   listdirr=   s    r   	get_filesz saved_test_environment.get_files  s6     . . "
. . . . . 	.r   c                    t           j        }||vrq|dz   |vrlt          j                            |          rt          j        |           d S t          j                            |          rt          j        |           d S d S d S d S )Nr   )r   TESTFNrP   rx   isfiler/   r   rmtree)r   saved_valuer   s      r   restore_filesz$saved_test_environment.restore_files  s    [  b3h{%B%Bw~~b!! % $$$$$r"" % $$$$$	 ! %B%B% %r   c                 b    g | ],}|                     d           t          t          |          -S )LC_)
startswithgetattrr   )r   lcs     r   
<listcomp>z!saved_test_environment.<listcomp>  sB     $ $ $2mmE""$762 $ $ $r   c                     g }| j         D ]D}	 |                    |t          j        |d           f           .# t          t
          f$ r Y Aw xY w|S r   )_lcappendr   	setlocale	TypeError
ValueError)r   pairingsr   s      r   
get_localez!saved_test_environment.get_locale  sn    ( 	 	BV%5b$%?%? @AAAAz*   s   *8AAc                 @    |D ]\  }}t          j        ||           d S r   )r   r  )r   r   r   settings       r   restore_localez%saved_test_environment.restore_locale  s5      	* 	*KBR))))	* 	*r   c                 :    |                      d          }|j        S r   )r&   showwarningr   s     r   get_warnings_showwarningz/saved_test_environment.get_warnings_showwarning  s    &&z22##r   c                 >    |                      d          }||_        d S r   )r#   r  )r   fxnr   s      r   restore_warnings_showwarningz3saved_test_environment.restore_warnings_showwarning  s!    ??:.."r   c              #      K   | j         D ]E}|                    dd          }d|z   }d|z   }|t          | |          t          | |          fV  Fd S )N._get_restore_)	resourcesreplacer   )r   r"   method_suffixget_namerestore_names        r   resource_infoz$saved_test_environment.resource_info#  sv      N 	M 	MD LLc22M-H%5Lh//|1L1LLLLLL		M 	Mr   c                     g | _         |                                 D ]@\  }}}	  |            }n# t          $ r Y w xY w| j                             ||||f           A| S r   )saved_valuesr  r   r  )r   r"   r   restoreoriginals        r   	__enter__z saved_test_environment.__enter__*  s    "&"4"4"6"6 	E 	ED#w355&    $$dC(%CDDDDs   
.
;;c                    | j         }d | _         t          j                     |D ]\\  }}}} |            }	|	|k    rEdt          _         ||           | j        s'| j        s t          | d| j         d| d|	 d           ]dS )NTz was modified by z
  Before: z
  After:   F)r  r   
gc_collectenvironment_alteredr   r   r   r   )
r   exc_typeexc_valexc_tbr  r"   r   r  r  currents
             r   __exit__zsaved_test_environment.__exit__5  s    (  	,8 
	1 
	1(D#wceeG("".2+!!!z 1$( 1! 0 0$- 0 0%-0 0%,0 0 01 1 1 ur   N)r   F)Dr   r	   r
   __doc__r   r  r#   r&   r-   r2   r5   r8   r>   rB   rF   rM   rR   rV   rZ   r^   rc   rf   rj   rm   rq   rv   ry   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   r   r   r   r   r   r   dirr   r   r  r	  r  r  r  r  r(  r   r   r   r   r      s              I! ! !& & &3 3 3' ' '& & &( ( (5 5 5. . .3 3 3$ $ $      " " "  " " "       < < <, , ,
3 3 3$ $ $E E E+ + +       # # #& & &K K K/ / /
= = =2 2 2G G G1 1 1E E E0 0 0R R R  W W W  H H H. . .* * ** * *
8 8 88 8 8
. . .0 0 03 3 34 4 4. . .% % %$ $V $ $ $C  * * *$ $ $# # #M M M	 	 	    r   r   )r   r   rP   r   r   testr   test.supportr   test.libregrtest.utilsr   	Exceptionr   r   r   r   r   <module>r/     s      				 



           " " " " " " 0 0 0 0 0 0	 	 	 	 	) 	 	 	p p p p p p p p p pr   