
    @gL&                     |   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Zd dlZd dlm	Z	 ddl m
Z
mZmZ ddlmZ ddlmZ ddlmZmZ  G d	 d
e
      Zd0dZd1dZ G d de j.                        Z ed e ed            dj9                  d      dj9                  d      d e edd            ddddddddddddiid  e ed            dj9                  d      dj9                  d      d! e ed"d#            id$%      Z G d& d'      Z G d( d)e      Z G d* d+e      Z  G d, d-e      Z! G d. d/e e      Z"y)2    N)
ModuleSpec   )ResourceReaderTraversableTraversableResources   )_path)zip)import_helper	os_helperc                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)Readerc                 8    t        |       j                  |       y N)varsupdate)selfkwargss     S/var/www/openai/venv/lib/python3.12/site-packages/importlib_resources/tests/util.py__init__zReader.__init__   s    T
&!    c                     | S r    r   packages     r   get_resource_readerzReader.get_resource_reader   s    r   c                 t    || _         t        | j                  t              r| j                  | j                  S r   )r	   
isinstancefile	Exceptionr   paths     r   open_resourcezReader.open_resource   s*    
dii+))Oyyr   c                 t    || _         t        | j                  t              r| j                  | j                  S r   )r	   r   r"   r    )r   path_s     r   resource_pathzReader.resource_path   s*    
dii+))Oyyr   c                     | _         t        | j                  t              r| j                  d }t	        fdt        || j                        D              S )Nc                 $    | j                  d      S )N/)split)entrys    r   partz Reader.is_resource.<locals>.part)   s    ;;s##r   c              3   N   K   | ]  }t        |      d k(  xr |d   k(    yw)r   r   N)len).0partsr%   s     r   	<genexpr>z%Reader.is_resource.<locals>.<genexpr>,   s/      
?XeCJ!O1aE 11?Xs   "%)r	   r   r"   r    anymap	_contents)r   r%   r,   s    ` r   is_resourcezReader.is_resource$   sM    
dii+))O	$  
?B4?X
 
 	
r   c              #      K   t        | j                  t              r| j                  | j                  E d {    y 7 wr   )r   r"   r    r4   r   s    r   contentszReader.contents0   s*     dii+))O>>!!s   6A >A N)	__name__
__module____qualname__r   r   r#   r&   r5   r8   r   r   r   r   r      s     "

"r   r   c                 n    d}t        j                  |      }t        || d|      }||_        | |_        |S )Ntestingpackagezdoes-not-exist)origin
is_package)types
ModuleTyper   __spec__
__loader__)loaderr?   namemodulespecs        r   create_package_from_loaderrH   6   s<    Dd#FdF+;
SDFOFMr   c                 2    t        t        | ||      |      S )N)r   r"   r4   )rH   r   )r   r"   r?   r8   s       r   create_packagerJ   ?   s    %Dtx8 r   c                   d    e Zd ZdZej
                  d        Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zy)CommonTestsBasez>
    Tests shared by test_open, test_path, and test_read.
    c                      y)zl
        Call the pertinent legacy API function (e.g. open_text, path)
        on package and path.
        Nr   )r   r   r"   s      r   executezCommonTestsBase.executeK   s    r   c                 P    | j                  | j                  j                  d       y)z=
        Passing in the package name should succeed.
        
utf-8.fileN)rN   datar9   r7   s    r   test_package_namez!CommonTestsBase.test_package_nameR   s     	TYY''6r   c                 <    | j                  | j                  d       y)z?
        Passing in the package itself should succeed.
        rP   NrN   rQ   r7   s    r   test_package_objectz#CommonTestsBase.test_package_objectX   s     	TYY-r   c                 @    d}| j                  | j                  |       y)zB
        Passing in a string for the path should succeed.
        rP   NrT   r!   s     r   test_string_pathz CommonTestsBase.test_string_path^   s     TYY%r   c                 f    t        j                  d      }| j                  | j                  |       y)zS
        Passing in a pathlib.PurePath object for the path should succeed.
        rP   N)pathlibPurePathrN   rQ   r!   s     r   test_pathlib_pathz!CommonTestsBase.test_pathlib_pathe   s&     -TYY%r   c                     t         j                  | j                  j                  = | j	                  | j                  j                  d       y)z=
        The anchor package can already be imported.
        rP   N)sysmodulesrQ   r9   rN   r7   s    r   $test_importing_module_as_side_effectz4CommonTestsBase.test_importing_module_as_side_effectl   s2     KK		**+TYY''6r   c                     t        j                  d      }t        |t                     }| j	                  |d       | j                  |j                  j                  d       y)z
        Attempting to open or read or request the path for a
        non-existent path should succeed if open_resource
        can return a viable data stream.
           Hello, world!r   r"   rP   N)ioBytesIOrJ   FileNotFoundErrorrN   assertEqualrC   r	   )r   
bytes_datar   s      r   test_missing_pathz!CommonTestsBase.test_missing_paths   sM     ZZ 01
 j7H7JKWl+++11<@r   c                     t        j                  d      }t        }t        ||      }| j	                  |d       | j                  |j                  j                  d       y )Nra   rb   rP   )rc   rd   __file__rJ   rN   rf   rC   r	   )r   rg   r"   r   s       r   test_extant_pathz CommonTestsBase.test_extant_path~   sN     ZZ 01
 jt<Wl+++11<@r   c                     t        t               t                     }| j                  t              5  | j                  |d       d d d        y # 1 sw Y   y xY w)Nrb   rP   )rJ   re   assertRaisesrN   r   s     r   test_useless_loaderz#CommonTestsBase.test_useless_loader   s?     &7&9@Q@ST01LL,/ 211s   AAN)r9   r:   r;   __doc__abcabstractmethodrN   rR   rU   rW   r[   r_   rh   rk   rn   r   r   r   rL   rL   F   sK     	 7.&&7	A	A0r   rL   )	metaclass    u   ﻿Hello, UTF-16 world!
z	utf-16-lezHello, UTF-8 world!
utf-8   )__init__.pybinary.file)rw   rx   utf-16.filerP   subdirectoryzone resource)rw   zresource1.txtztwo resource)rw   zresource2.txt	subsubdirzresource.txtz
a resource)rw   onetworz   rx         )rx   ry   rP   rz   )data01data02namespacedata01c                       e Zd Zd Zd Zy)ModuleSetupc                    t        j                         | _        | j                  | j                  j                         | j                  j                  t        j                                | j                  | j                        | _
        y r   )
contextlib	ExitStackfixtures
addCleanupcloseenter_contextr   isolated_modulesload_fixtureMODULErQ   r7   s    r   setUpzModuleSetup.setUp   sY    ",,.++,##M$B$B$DE%%dkk2	r   c                 `    | j                  |t        |   i       t        j                  |      S r   )tree_on_pathr   	importlibimport_moduler   rF   s     r   r   zModuleSetup.load_fixture   s+    68F#345&&v..r   N)r9   r:   r;   r   r   r   r   r   r   r      s    3/r   r   c                       e Zd ZdZd Zy)ZipSetupr   c           
      $   | j                   j                  t        j                               }t	        j
                  |      dz  }| j                   j                  t        j                  t        t        j                  ||                         y )Nzzipped modules.zip)r   r   r   temp_dirrY   Pathr   DirsOnSysPathstrzip_make_zip_file)r   rG   r   r^   s       r   r   zZipSetup.tree_on_path   se    ==..y/A/A/CD,,x(+??##''D,>,>tW,M(NO	
r   Nr9   r:   r;   r   r   r   r   r   r   r      s    F
r   r   c                       e Zd ZdZd Zy)	DiskSetupr   c                    | j                   j                  t        j                               }t	        j
                  |t        j                  |             | j                   j                  t        j                  |             y r   )
r   r   r   r   r	   buildrY   r   r   r   )r   rG   r   s      r   r   zDiskSetup.tree_on_path   sS    ==..y/A/A/CDD',,x01##M$?$?$IJr   Nr   r   r   r   r   r      s    FKr   r   c                       e Zd ZdZdZd Zej                  d        Z G d de	j                  j                        Z G d de	j                  j                        Z G d	 d
e      Z G d de      Zy)MemorySetupz#Support loading a module in memory.r   c                     | j                   j                  | j                  |             t        j                  |      S r   )r   r   augment_sys_metapathr   r   r   s     r   r   zMemorySetup.load_fixture   s0    ##D$=$=f$EF&&v..r   c              #      K   | j                  |      }t        j                  j                  |       d  t        j                  j	                  |       y wr   )MemoryFinderr]   	meta_pathappendremove)r   rF   finder_instances      r   r   z MemorySetup.augment_sys_metapath   s=     ++F3_-_-s   AAc                       e Zd Zd ZddZy)MemorySetup.MemoryFinderc                     || _         y r   _moduler   s     r   r   z!MemorySetup.MemoryFinder.__init__   	    !DLr   Nc                     || j                   k7  ry t        j                  j                  |t        j                  | j                         d      S )NT)rE   rD   r?   )r   r   	machineryr   r   MemoryLoader)r   fullnamer"   targets       r   	find_specz"MemorySetup.MemoryFinder.find_spec   sG    4<<'&&11"//= 2  r   r   )r9   r:   r;   r   r   r   r   r   r   r      s    	"	r   r   c                       e Zd Zd Zd Zd Zy)MemorySetup.MemoryLoaderc                     || _         y r   r   r   s     r   r   z!MemorySetup.MemoryLoader.__init__   r   r   c                      y r   r   r   s     r   exec_modulez$MemorySetup.MemoryLoader.exec_module   s    r   c                 B    t         j                  | j                  |      S r   )r   MemoryTraversableResourcesr   )r   r   s     r   r   z,MemorySetup.MemoryLoader.get_resource_reader   s    99$,,QQr   N)r9   r:   r;   r   r   r   r   r   r   r   r      s    	"		Rr   r   c                       e Zd Zd Zd Zy)&MemorySetup.MemoryTraversableResourcesc                      || _         || _        y r   r   	_fullnamer   rF   r   s      r   r   z/MemorySetup.MemoryTraversableResources.__init__       !DL%DNr   c                 V    t         j                  | j                  | j                        S r   )r   MemoryTraversabler   r   r7   s    r   filesz,MemorySetup.MemoryTraversableResources.files   s    00t~~NNr   N)r9   r:   r;   r   r   r   r   r   r   r      s    	&	Or   r   c                   R    e Zd ZdZd Zd Zd ZdefdZdefdZ	dd	Z
ed
        Zy)MemorySetup.MemoryTraversablezImplement only the abstract methods of `Traversable`.

        Besides `.__init__()`, no other methods may be implemented or overridden.
        This is critical for validating the concrete `Traversable` implementations.
        c                      || _         || _        y r   r   r   s      r   r   z&MemorySetup.MemoryTraversable.__init__  r   r   c                     t        j                  | j                        }t        j                  d |j
                  t              S )z
            Fully traverse the `fixtures` dictionary.

            This should be wrapped in a `try/except KeyError`
            but it is not currently needed and lowers the code coverage numbers.
            c                     | |   S r   r   )dps     r   <lambda>z8MemorySetup.MemoryTraversable._resolve.<locals>.<lambda>  s    1r   )rY   PurePosixPathr   	functoolsreducer0   r   r!   s     r   _resolvez&MemorySetup.MemoryTraversable._resolve  s2     ((8D##$5tzz8LLr   c              #      K   | j                         }t        |t              st        | j                   d      |D ]3  }t
        j                  | j                  | j                   d|        5 y w)Nz is not a directoryr)   )r   r   dictOSErrorr   r   r   r   )r   	directoryr"   s      r   iterdirz%MemorySetup.MemoryTraversable.iterdir  si     Ii. 00CDEE!!33LLT^^$4AdV"<  "s   A2A4returnc                 >    t        | j                         t              S r   )r   r   r   r7   s    r   is_dirz$MemorySetup.MemoryTraversable.is_dir  s    dmmot44r   c                 $    | j                          S r   )r   r7   s    r   is_filez%MemorySetup.MemoryTraversable.is_file  s    {{}$$r   Nc                    | j                         }t        |t              rt        | j                   d      t        |t
              r|j                  d      }t        j                  |      }d|v r|S t        j                  |||      S )Nz is a directoryru   b)encodingerrors)
r   r   r   r   r   r   encoderc   rd   TextIOWrapper)r   moder   r   ___r8   results           r   openz"MemorySetup.MemoryTraversable.open!  sw    }}H(D)  0@AA(C(#??73ZZ)Fd{##FXfMMr   c                 T    t        j                  | j                        j                  S r   )rY   r   r   rE   r7   s    r   rE   z"MemorySetup.MemoryTraversable.name.  s    ((8===r   )rNN)r9   r:   r;   ro   r   r   r   boolr   r   r   propertyrE   r   r   r   r   r      sI    		&	M		5D 	5	%T 	%	N 
	> 
	>r   r   N)r9   r:   r;   ro   r   r   r   contextmanagerr   r   rp   MetaPathFinderr   Loaderr   r   r   r   r   r   r   r   r   r      sr    -F/ . .y}}33 Ry}}++ RO%9 O4>K 4>r   r   c                       e Zd Zy)CommonTestsN)r9   r:   r;   r   r   r   r   r   3  s    r   r   )T)NNTr   )#rp   r   r   r   rc   rY   r]   r@   importlib.machineryr   r   r   r   rs   r	   r
   r   compat.py39r   r   r   rH   rJ   ABCMetarL   r   bytesranger   r   r   r   r   r   r   r   r   r   <module>r      sU   
    	  
  * C C   1""^ ""JF0 F0R U1X5<<[I-44W= q!-
	 !NC!NC$~|&DE	 U1X5<<[I-44W=5r2/
	#8
/ 
/
{ 
K Kd>+ d>N	)_ 	r   