
    Rh2                     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 ddl	m
Z
  G d de      Z G d d	      Zy)
    N)support)	os_helper   )print_warningc                       e Zd Zy)SkipTestEnvironmentN)__name__
__module____qualname__     0/usr/lib/python3.12/test/libregrtest/save_env.pyr   r      s    r   r   c            
          e 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+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9 e:e;      D  cg c]#  }|jy                  d8      rt{        tv        |      % c}}}} Z>d9 Z?d: Z@d; ZAd< ZBd= ZCd> ZDd? ZEy@c c}}}} w )Asaved_test_environmenta  Save bits of the test environment and restore them at block exit.

        with saved_test_environment(test_name, 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.
    c                <    || _         || _        || _        || _        y N)	test_nameverbosequietpgo)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_moduleF   s    {{4  r   c                 L    	 | j                  |      S # t        $ r t        w xY wr   )r$   KeyErrorr   r"   s     r   try_get_modulez%saved_test_environment.try_get_moduleJ   s+    	&??4(( 	&%%	&s    #c                 N    | j                  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_tempfilesQ   s$    ,,-=>N1122r   c                 <    |D ]  }t        j                  |        y r   )r   unlink)r   	tempfilesfilenames      r   &restore_urllib_requests__url_tempfilesz=saved_test_environment.restore_urllib_requests__url_tempfilesT   s    ! 	'HX&	'r   c                 <    | j                  d      }|j                  S r)   )r'   _openerr,   s     r   get_urllib_requests__openerz2saved_test_environment.get_urllib_requests__openerX   s    ,,-=>%%%r   c                 4    | j                  d      }||_        y r)   )r$   r5   )r   openerr-   s      r   restore_urllib_requests__openerz6saved_test_environment.restore_urllib_requests__opener[   s    )9:!'r   c                 L    | j                  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244r   c                 H    | j                  d      }|j                  |       y r;   )r$   set_event_loop_policy)r   policyr<   s      r   )restore_asyncio_events__event_loop_policyz@saved_test_environment.restore_asyncio_events__event_loop_policyb   s    //),%%f-r   c                 x    t        t        j                        t        j                  t        j                  d d  fS r   )idr    argvr>   s    r   get_sys_argvz#saved_test_environment.get_sys_argvf   #    #((|SXXsxx{22r   c                 L    |d   t         _        |d   t         j                  d d  y Nr      )r    rF   )r   
saved_argvs     r   restore_sys_argvz'saved_test_environment.restore_sys_argvh       a= mr   c                 *    t        j                         S r   )osgetcwdr>   s    r   get_cwdzsaved_test_environment.get_cwdl   s    yy{r   c                 .    t        j                  |       y r   )rP   chdir)r   	saved_cwds     r   restore_cwdz"saved_test_environment.restore_cwdn   s    
r   c                 "    t         j                  S r   r    stdoutr>   s    r   get_sys_stdoutz%saved_test_environment.get_sys_stdoutq       zzr   c                     |t         _        y r   rX   )r   saved_stdouts     r   restore_sys_stdoutz)saved_test_environment.restore_sys_stdouts   	    !
r   c                 "    t         j                  S r   r    stderrr>   s    r   get_sys_stderrz%saved_test_environment.get_sys_stderrv   r[   r   c                     |t         _        y r   ra   )r   saved_stderrs     r   restore_sys_stderrz)saved_test_environment.restore_sys_stderrx   r_   r   c                 "    t         j                  S r   r    stdinr>   s    r   get_sys_stdinz$saved_test_environment.get_sys_stdin{   s    yyr   c                     |t         _        y 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   )rE   rP   environdictr>   s    r   get_os_environz%saved_test_environment.get_os_environ   s$    "**~rzz4

+;;;r   c                     |d   t         _        t         j                  j                          t         j                  j                  |d          y rJ   )rP   ro   clearupdate)r   saved_environs     r   restore_os_environz)saved_test_environment.restore_os_environ   s5    "1%






-*+r   c                 x    t        t        j                        t        j                  t        j                  d d  fS r   )rE   r    pathr>   s    r   get_sys_pathz#saved_test_environment.get_sys_path   rH   r   c                 L    |d   t         _        |d   t         j                  d d  y rJ   )r    rx   )r   
saved_paths     r   restore_sys_pathz'saved_test_environment.restore_sys_path   rN   r   c                 x    t        t        j                        t        j                  t        j                  d d  fS r   )rE   r    
path_hooksr>   s    r   get_sys_path_hooksz)saved_test_environment.get_sys_path_hooks   s%    #..!3>>3>>!3DDDr   c                 L    |d   t         _        |d   t         j                  d d  y rJ   )r    r~   )r   saved_hookss     r   restore_sys_path_hooksz-saved_test_environment.restore_sys_path_hooks   s    $Q'Nqr   c                 *    t        j                         S r   )r    gettracer>   s    r   get_sys_gettracez'saved_test_environment.get_sys_gettrace   s    ||~r   c                 .    t        j                  |       y 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         _        y r   r   )r   import_s     r   restore___import__z)saved_test_environment.restore___import__   s
    %r   c                     | j                  d      }t        |j                        |j                  |j                  d d  fS Nwarnings)r'   rE   filtersr   r   s     r   get_warnings_filtersz+saved_test_environment.get_warnings_filters   s;    &&z2(""#X%5%5x7G7G7JJJr   c                 ^    | j                  d      }|d   |_        |d   |j                  d d  y )Nr   r   rK   )r$   r   )r   saved_filtersr   s      r   restore_warnings_filtersz/saved_test_environment.restore_warnings_filters   s2    ??:.(++A.r   c                     t         j                  j                  d      }|xr |j                  j	                         xs i S )Ntest.support.asyncore)r    r!   get
socket_mapcopy)r   asyncores     r   get_asyncore_socket_mapz.saved_test_environment.get_asyncore_socket_map   s4    ;;??#:;6H//446<"<r   c                     t         j                  j                  d      }|.|j                  d       |j                  j                  |       y y )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   sE    ;;??#:;$/&&y1  r   c                 p    | j                  d      }|j                  |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Fr   c                     | j                  d      }|d   |_        |j                  j                          |j                  j                  |d          y Nr   r   r   )r$   r   rs   rt   r   savedr   s      r   restore_shutil_archive_formatsz5saved_test_environment.restore_shutil_archive_formats   sF    *"'(%%'&&uQx0r   c                 p    | j                  d      }|j                  |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Dr   c                     | j                  d      }|d   |_        |j                  j                          |j                  j                  |d          y r   )r$   r   rs   rt   r   s      r   restore_shutil_unpack_formatsz4saved_test_environment.restore_shutil_unpack_formats   sF    *!&q$$&%%eAh/r   c                     | j                  d      }t        |j                        |j                  |j                  j                         fS Nlogging)r'   rE   	_handlersr   r   r   s     r   get_logging__handlersz,saved_test_environment.get_logging__handlers   s?    %%i0'##$g&7&79J9J9O9O9QQQr   c                      y r   r   )r   saved_handlerss     r   restore_logging__handlersz0saved_test_environment.restore_logging__handlers       r   c                     | j                  d      }t        |j                        |j                  |j                  d d  fS r   )r'   rE   _handlerListr   s     r   get_logging__handlerListz/saved_test_environment.get_logging__handlerList   s<    %%i0'&&')=)=w?S?STU?VVVr   c                      y r   r   )r   saved_handlerLists     r   restore_logging__handlerListz3saved_test_environment.restore_logging__handlerList   r   r   c                 x    t        t        j                        t        j                  t        j                  d d  fS r   )rE   r    warnoptionsr>   s    r   get_sys_warnoptionsz*saved_test_environment.get_sys_warnoptions   s%    #//"COOS__Q5GGGr   c                 L    |d   t         _        |d   t         j                  d d  y rJ   )r    r   )r   saved_optionss     r   restore_sys_warnoptionsz.saved_test_environment.restore_sys_warnoptions   s!    '**1-r   c                 >    t         j                  j                         S r   )	threading	_danglingr   r>   s    r   get_threading__danglingz.saved_test_environment.get_threading__dangling   s    ""''))r   c                 ~    t         j                  j                          t         j                  j                  |       y r   )r   r   rs   rt   )r   r   s     r   restore_threading__danglingz2saved_test_environment.restore_threading__dangling   s(    !!#""5)r   c                 x    | j                  d      }|j                          |j                  j                         S Nzmultiprocessing.process)r'   _cleanupr   r   )r   multiprocessing_processs     r   %get_multiprocessing_process__danglingz<saved_test_environment.get_multiprocessing_process__dangling   s5    "&"5"56O"P((*&005577r   c                     | j                  d      }|j                  j                          |j                  j                  |       y r   )r$   r   rs   rt   )r   r   r   s      r   )restore_multiprocessing_process__danglingz@saved_test_environment.restore_multiprocessing_process__dangling   s8    "&//2K"L))//1))007r   c                     | j                  d      }|j                  d       t        |j                        |j                  t	        |j                        fS )N	sysconfigprefix)r'   get_config_varrE   _CONFIG_VARSrp   r   r   s     r   get_sysconfig__CONFIG_VARSz1saved_test_environment.get_sysconfig__CONFIG_VARS   sN    ''4	  *9))*I,B,BY++,. 	.r   c                     | j                  d      }|d   |_        |j                  j                          |j                  j                  |d          y Nr   r   rK   )r$   r   rs   rt   r   r   r   s      r   restore_sysconfig__CONFIG_VARSz5saved_test_environment.restore_sysconfig__CONFIG_VARS   sF    OOK0	!&q	$$&%%eAh/r   c                     | j                  d      }t        |j                        |j                  |j                  j                         fS )Nr   )r'   rE   _INSTALL_SCHEMESr   r   s     r   get_sysconfig__INSTALL_SCHEMESz5saved_test_environment.get_sysconfig__INSTALL_SCHEMES   sD    ''4	9--.	0J0J**//13 	3r   c                     | j                  d      }|d   |_        |j                  j                          |j                  j                  |d          y r   )r$   r   rs   rt   r   s      r   "restore_sysconfig__INSTALL_SCHEMESz9saved_test_environment.restore_sysconfig__INSTALL_SCHEMES   sF    OOK0	%*1X	"""((*""))%(3r   c                 J    t        d t        j                         D              S )Nc              3      K   | ];  }|j                  d       s(|t        j                  j                  |      rdndz    = yw)z.hypothesis/ N)
startswithrP   rx   isdir).0fns     r   	<genexpr>z3saved_test_environment.get_files.<locals>.<genexpr>  s:      ;]]=9 277==#4C"= ;s   AA)sortedrP   listdirr>   s    r   	get_filesz saved_test_environment.get_files  s"     ; "

; ; 	;r   c                    t         j                  }||vrs|dz   |vrkt        j                  j	                  |      rt        j
                  |       y t        j                  j                  |      rt        j                  |       y y y y )Nr   )r   TESTFNrP   rx   isfiler0   r   rmtree)r   saved_valuer   s      r   restore_filesz$saved_test_environment.restore_files
  sj    [ b3h{%Bww~~b!  $r"  $ # &C r   LC_c                     g }| j                   D ]*  }	 |j                  |t        j                  |d       f       , |S # t        t
        f$ r Y @w xY wr   )_lcappendr   	setlocale	TypeError
ValueError)r   pairingslcs      r   
get_localez!saved_test_environment.get_locale  s]    (( 	BV%5%5b$%? @A	
  z* s   '>AAc                 D    |D ]  \  }}t        j                  ||        y r   )r   r   )r   r   r  settings       r   restore_localez%saved_test_environment.restore_locale  s%      	*KBR)	*r   c                 <    | j                  d      }|j                  S r   )r'   showwarningr   s     r   get_warnings_showwarningz/saved_test_environment.get_warnings_showwarning   s    &&z2###r   c                 4    | j                  d      }||_        y r   )r$   r	  )r   fxnr   s      r   restore_warnings_showwarningz3saved_test_environment.restore_warnings_showwarning#  s    ??:."r   c              #      K   | j                   D ]9  }|j                  dd      }d|z   }d|z   }|t        | |      t        | |      f ; y w)N._get_restore_)	resourcesreplacegetattr)r   r#   method_suffixget_namerestore_names        r   resource_infoz$saved_test_environment.resource_info'  sZ     NN 	MD LLc2M-H%5Lh/|1LLL		Ms   A
Ac                     g | _         | j                         D ]-  \  }}}	  |       }| j                   j                  ||||f       / | S # t        $ r Y =w xY wr   )saved_valuesr  r   r   )r   r#   r   restoreoriginals        r   	__enter__z saved_test_environment.__enter__.  sq    "&"4"4"6 	ED#w5 $$dC(%CD	E 	 ' s   A

	AAc                     | j                   }d | _         t        j                          |D ]b  \  }}}} |       }	|	|k7  sdt        _         ||       | j                  r5| j
                  rBt        | d| j                   d| d|	 d       d y)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__9  s    ((  	,8 
	1(D#weG(".2+!zz$((!& 1$..1A B%%-J /%%,IQ01
	1 r   N)Fr	   r
   r   __doc__r   r  r$   r'   r.   r3   r6   r9   r?   rC   rG   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  r   s   0000r   r   r      s}    I!&3'&(5.3$"" <,
3$E+ #&K/
=2G1E0RWH.**
88
.034;
% *-V $ $2mmE" 62 $C*$#M	O$s   5(C9
r   )r   r   rP   r    r   testr   test.supportr   utilsr   	Exceptionr   r   r   r   r   <module>r.     s5      	 
   "  	) 	r rr   