o
    JXhH                     @   s  d dl 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mZmZ d dl	m
Z
 d dlZd dlZd dlZd dlZd dlmZmZ d dlmZ d dlmZ d dlm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 e Zde_ de_!dej"v rde_ dej"vrde_!e a#dt#_$dt#_%dt#_&dt#_'dt#_(dd Z)e)  dd Z*dFddZ+dFddZ,dFddZ-dZ.ej/dvre01 Z2e2e0kre03 Z2ej$4e2sdZ.e*dd Z5e6ej7e6e5j7dZ7dd Z8dGd d!Z9d"d# Z:ej;d$d% Z<ej;dGdd&d'd(Z=ej;d)d* Z>G d+d, d,Z?G d-d. d.e?Z@G d/d0 d0e?ZAd1d2 ZBd3d4 ZCej;d5d6 ZDej;d7d8 ZEd9d: ZFG d;d< d<ZGdHd>d?ZHG d@dA dAe jIZJG dBdC dCZKG dDdE dEeKZLdS )I    N)	machineryutilinvalidate_caches)ResourceReader)PathPurePath)support)import_helper)	os_helper   )data01)	zipdata01errno	importlibZ	_testcapic                  C   s`   t jD ]*} tjD ]$}tj| }tj| |}tj|r,| t_|t_	|t_
|t_  d S qqd S N)syspathr   EXTENSION_SUFFIXES
EXTENSIONSnameosjoinexistsextfilename	file_path)r   r   r   r    r   B/opt/python-3.10.19/usr/lib/python3.10/test/test_importlib/util.py_extension_details)   s   


r   c                 C   s6   	 d| v rdnd}t | }t j| |dd}||dS )N.)r   r   )_frozen_importlib_frozen_importlib_external)freshZblockedFrozenSource)r	   Zimport_fresh_module)module_namer"   frozensourcer   r   r   import_importlib9   s   

r)   c           
      K   s   |d u rt j}n	t|ts|| }d|| j}| |f}t||}| j|_| j|_	||_
| D ]\}}|| }	t|||	 q1|S )Nz{}_{})unittestZTestCase
isinstancetypeformat__name__types	new_class
__module__Z_NAMEZ_KINDitemssetattr)
clskindbasekwargsr   basesZspecializedattrvaluesvaluer   r   r   specialize_classB   s   
r<   c                 K   s0   t | d|fi |}t | d|fi |}||fS )Nr$   r%   )r<   )r4   r6   r7   r'   r(   r   r   r   split_frozenU   s   r=   c                 K   s   t | |fi |S r   )r=   )Z
test_classr6   r7   r   r   r   	test_both[   s   r>   T)win32cygwinFr%   r#   c                 C   s   	 t t d| S )Nz&requires a case-insensitive filesystem)r*   skipIfCASE_INSENSITIVE_FS)testr   r   r   case_insensitive_testsn   s   rD    c                 C   sZ   t j||d }t|ddd}|| W d    n1 s w   Y  d| ||fS )N.pywutf-8encodingz{}.{})r   r   r   openwriter-   )parentr   Zpkg_dircontentr   Zsubfiler   r   r   	submoduleu   s
   rO   c                 C   sD   	 t | d}|d t|W  d    S 1 sw   Y  d S )Nrb   )rK   seekmarshalload)Zpyc_pathZpyc_fr   r   r   get_code_from_pyc|   s
   
$rU   c                  g   s    	 | D ]}|dv rt d|ztj|= W q ty    Y qw zd V  W | D ]}ztj|= W q( ty9   Y q(w d S | D ]}ztj|= W q> tyO   Y q>w w )N)r   rS   Zimpzcannot uncache {0})
ValueErrorr-   r   modulesKeyError)namesr   r   r   r   uncache   s6   rZ   )pkgc                #   s<    fddt jD }td }t g|R  c t|N t  tj	
| }|r9tj	
|d}t  n
|d }|d u rCd}|d urct|ddd}|| W d    n1 s^w   Y  |V  W d    n1 spw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )	Nc                    s"   g | ]}| d d  kr|qS )r   r   )	partition).0nr   r   r   
<listcomp>   s   " ztemp_module.<locals>.<listcomp>z__init__.pyrF   rE   rG   rH   rI   )r   rW   r
   Ztemp_cwdrZ   r	   ZDirsOnSysPathr   r   r   r   mkdirrK   rL   )r   rN   r[   	conflictscwdlocationmodpathZmodfiler   r_   r   temp_module   s0   "rf   c                  k   s    	 i }zPdg fdg fdg fdi ffD ]\}}t t|||< || v r*| | }| |= n|}tt|| qt| r@td|  d V  W | D ]
\}}tt|| qHd S | D ]
\}}tt|| qYw )N	meta_pathr   
path_hookspath_importer_cachezunrecognized arguments: {0})getattrr   r3   lenrV   r-   keysr2   )r7   Z	originalsr9   defaultZ	new_valuer;   r   r   r   import_state   s0   rn   c                   @   s4   e Zd Z	 i dddZdd Zdd Zdd	 Zd
S )_ImporterMock)module_codec                G   s   i | _ i | _|D ]R}|ds|}n	|d td  }d|vr"d }n||kr/|ddd }n|}t|}| |_d|_||_	||_
||krJdg|_|| j |< ||v rZ|| | j|< qd S )N	.__init__r   r   r   z<mock __file__>z<mock __path__>)rW   rp   endswithrk   rsplitr/   
ModuleType
__loader____file____package__r9   __path__)selfrp   rY   r   import_namepackagemoduler   r   r   __init__   s.   


z_ImporterMock.__init__c                 C   s
   | j | S r   rW   )ry   r   r   r   r   __getitem__   s   
z_ImporterMock.__getitem__c                 C   s   t | j  | _| j  | S r   )rZ   rW   rl   _uncache	__enter__ry   r   r   r   r      s   
z_ImporterMock.__enter__c                 G   s   | j d d d  d S r   )r   __exit__)ry   exc_infor   r   r   r      s   z_ImporterMock.__exit__N)r.   r1   __qualname__r}   r   r   r   r   r   r   r   ro      s    ro   c                   @   s    e Zd Z	 dddZdd ZdS )mock_modulesNc                 C   s   || j vrd S | S r   r~   )ry   fullnamer   r   r   r   find_module  s   
zmock_modules.find_modulec                 C   s\   || j vrt| j | tj |< || jv r)z| j|   W n ty(   tj |=  w | j | S r   )rW   ImportErrorr   rp   	Exception)ry   r   r   r   r   load_module
  s   


zmock_modules.load_moduler   )r.   r1   r   r   r   r   r   r   r   r      s    
r   c                   @   s(   e Zd Z	 dddZdd Zdd ZdS )		mock_specNc                 C   sD   z| j | }W n
 ty   Y d S w tj||j| t|dd d}|S )Nrx   )loadersubmodule_search_locations)rW   rX   r   spec_from_file_locationrv   rj   )ry   r   r   rM   r|   specr   r   r   	find_spec  s   
zmock_spec.find_specc                 C   s   |j | jvrt| j|j  S r   )r   rW   r   )ry   r   r   r   r   create_module&  s   zmock_spec.create_modulec                 C   s,   z| j |jj   W d S  ty   Y d S w r   )rp   __spec__r   rX   ry   r|   r   r   r   exec_module+  s
   zmock_spec.exec_module)NN)r.   r1   r   r   r   r   r   r   r   r   r     s
    

r   c                    s0   	 t jrtd S t  fdd}|S )Nzrelies on writing bytecodec                     s0   t j}dt _z | i |}W |t _|S |t _w )NF)r   dont_write_bytecode)argsr7   ZoriginalZ	to_returnfxnr   r   wrapper7  s   z&writes_bytecode_files.<locals>.wrapper)r   r   r*   skip	functoolswraps)r   r   r   r   r   writes_bytecode_files2  s   r   c              
   C   sP   	 zt t j|  W d S  ty' } z|jtjkr W Y d }~d S d }~ww r   )r   ra   r   dirnameOSErrorr   EEXIST)bytecode_patherrorr   r   r   ensure_bytecode_pathC  s   r   c                 c   s,    	 t j}| t _z	d V  W |t _d S |t _w r   )r   pycache_prefix)prefixZ_orig_prefixr   r   r   temporary_pycache_prefixO  s   r   c                  g   s   	 d}g }i }d }d }zt  }||d< t }| D ]{}|ds$|}	n	|d td  }	||	 |	tjv r;tj|	= |d}
|}|
d d D ]}t	j
||}t	j
|sat	| || qHt	j
||
d d }t|dd	d
}||| W d    n1 sw   Y  || |||< qt| }|  t|gd}|  |V  W |d ur|d d d  |d ur|d d d  t| d S |d ur|d d d  |d ur|d d d  t| w )Nzattr = {0!r}z.rootr}   rq   r   rF   rG   rH   rI   r   )tempfilemkdtempsetrr   rk   addr   rW   splitr   r   r   r   ra   appendrK   rL   r-   rZ   r   rn   r   r
   rmtree)rY   r(   Zcreated_pathsmappingZstate_managerZuncache_managerZtemp_dirZimport_namesr   rz   Z
name_partsr   Z	directoryfiler   r   r   create_modulesZ  s^   







r   c                    s   	  fdd}|S )Nc                    s   |  vrt S r   )r   )entryentriesimporterr   r   hook  s   zmock_path_hook.<locals>.hookr   )r   r   r   r   r   r   mock_path_hook  s   r   c                   @   s   e Zd Zdd ZdS )CASEOKTestBasec                   s0   d}t  fdd|D |kr d d S d S )N)s   PYTHONCASEOKPYTHONCASEOKc                 3   s     | ]}| j jjjv V  qd S r   )r   _bootstrap_external_osenviron)r]   xr   r   r   	<genexpr>  s    z4CASEOKTestBase.caseok_env_changed.<locals>.<genexpr>z/os.environ changes not reflected in _os.environ)anyZskipTest)ry   Zshould_existZpossibilitiesr   r   r   caseok_env_changed  s   z!CASEOKTestBase.caseok_env_changedN)r.   r1   r   r   r   r   r   r   r     s    r   r   c           	         sN   G  fdddt }d}t|}| }tj||d|d}||_||_|S )Nc                       sH   e Zd Zdd ZfddZfddZ fddZ fd	d
ZdS )zcreate_package.<locals>.Readerc                 S   s   | S r   r   ry   r{   r   r   r   get_resource_reader  s   z2create_package.<locals>.Reader.get_resource_readerc                       || _ t tr
  S r   _pathr+   r   ry   r   )r   r   r   open_resource     
z,create_package.<locals>.Reader.open_resourcec                    r   r   r   )ry   path_r   r   r   resource_path  r   z,create_package.<locals>.Reader.resource_pathc                    sJ   || _ ttr
 D ]}|d}t|dkr"|d |kr" dS qdS )N/r   r   TF)r   r+   r   r   rk   )ry   r   r   partscontentsr   r   r   is_resource  s   

z*create_package.<locals>.Reader.is_resourcec                 3   s$    t tr D ]}|V  q
d S r   )r+   r   )ry   r   r   r   r   r     s   
z'create_package.<locals>.Reader.contentsN)r.   r1   r   r   r   r   r   r   r   r   r   r   r   r   Reader  s    
r   Ztestingpackagezdoes-not-exist)origin
is_package)r   r/   rt   r   
ModuleSpecr   ru   )	r   r   r   r   r   r   r|   r   r   r   r   r   create_package  s   #
r   c                   @   s   e Zd Zejdd Zdd Zdd Zdd Ze	
ejd	k d
dd Zdd Zdd Zdd Zdd Zdd Ze	
ejdk ddd Ze	
ejdk ddd Zdd ZdS ) CommonResourceTestsc                 C   s   t r   )NotImplementedError)ry   r{   r   r   r   r   execute  s   zCommonResourceTests.executec                 C   s   |  tjd d S N
utf-8.file)r   r   r.   r   r   r   r   test_package_name  s   z%CommonResourceTests.test_package_namec                 C   s   |  td d S r   r   r   r   r   r   r   test_package_object  s   z'CommonResourceTests.test_package_objectc                 C   s   d}|  t| d S r   r   r   r   r   r   test_string_path  s   z$CommonResourceTests.test_string_path)      zrequires os.PathLike supportc                 C   s   t d}| t| d S r   )r   r   r   r   r   r   r   test_pathlib_path  s   z%CommonResourceTests.test_pathlib_pathc                 C   sN   t t}|jd }| t | t| W d    d S 1 s w   Y  d S r   )r   rv   rM   assertRaisesrV   r   r   )ry   r   	full_pathr   r   r   test_absolute_path  s
   
"z&CommonResourceTests.test_absolute_pathc                 C   <   |  t | td W d    d S 1 sw   Y  d S )Nz../data01/utf-8.file)r   rV   r   r   r   r   r   r   test_relative_path     "z&CommonResourceTests.test_relative_pathc                 C   s   t jtj= | tjd d S r   )r   rW   r   r.   r   r   r   r   r   $test_importing_module_as_side_effect  s   
z8CommonResourceTests.test_importing_module_as_side_effectc                 C   r   r   )r   	TypeErrorr   r.   r   r   r   r   test_non_package_by_name  r   z,CommonResourceTests.test_non_package_by_namec                 C   sF   |  t tjd }| |d W d    d S 1 sw   Y  d S )Nztest.test_importlib.utilr   )r   r   r   rW   r   r   r   r   r   test_non_package_by_package  s   
"z/CommonResourceTests.test_non_package_by_package)r   zNo ResourceReader in Python 2c                 C   s8   t d}t|t d}| |d | |jjd d S Ns   Hello, world!r   r   r   )ioBytesIOr   FileNotFoundErrorr   assertEqualru   r   )ry   
bytes_datar{   r   r   r   test_resource_opener  s   
z(CommonResourceTests.test_resource_openerc                 C   s:   t d}t}t||d}| |d | |jjd d S r   )r   r   rv   r   r   r   ru   r   )ry   r   r   r{   r   r   r   test_resource_path  s
   
z&CommonResourceTests.test_resource_pathc                 C   sL   t t t d}| t | |d W d    d S 1 sw   Y  d S )Nr   r   )r   r   r   r   r   r   r   r   test_useless_loader  s   "z'CommonResourceTests.test_useless_loaderN)r.   r1   r   abcabstractmethodr   r   r   r   r*   rA   r   version_infor   r   r   r   r   r   r   r   r   r   r   r   r   r     s$    



r   c                   @   s0   e Zd ZdZedd Zedd Zdd ZdS )ZipSetupBaseNc                 C   s>   t | jj}|j}t|d | _tj| j t	
d| _d S )Nzziptestdata.zipZziptestdata)r   
ZIP_MODULErv   rM   str	_zip_pathr   r   r   r   import_moduledata)r4   Z	data_pathZdata_dirr   r   r   
setUpClass%  s
   zZipSetupBase.setUpClassc                 C   sx   z	t j| j W n	 ty   Y nw zt j| j= t j| jj= W n	 t	y)   Y nw z| `| `W d S  t
y;   Y d S w r   )r   r   remover   rV   ri   rW   r   r.   rX   AttributeError)r4   r   r   r   tearDownClass-  s"   

zZipSetupBase.tearDownClassc                 C   s    t  }| jt jg|R   d S r   )r	   Zmodules_setupZ
addCleanupZmodules_cleanup)ry   rW   r   r   r   setUp@  s   zZipSetupBase.setUp)r.   r1   r   r   classmethodr  r  r  r   r   r   r   r   "  s    

r   c                   @   s   e Zd ZeZdS )ZipSetupN)r.   r1   r   r   r   r   r   r   r   r  E  s    r  r   )rE   )Tr   )Mr   builtins
contextlibr   r   r   r   r   r   Zimportlib.abcr   r   rS   r   Zos.pathpathlibr   r   rC   r   Ztest.supportr	   r
   r*   r   r   r/   rE   r   r   SimpleNamespaceZBUILTINSZ	good_nameZbad_namebuiltin_module_namesr   r   r   r   r   r   r   r)   r<   r=   r>   rB   platformrv   upperZchanged_namelowerr   Zsource_importlibstaticmethod
__import__rD   rO   rU   contextmanagerrZ   rf   rn   ro   r   r   r   r   r   r   r   r   r   ABCr   r   r  r   r   r   r   <module>   s    


	






)


9	
	2J#