
    ZiL&                        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d2dZd3dZ G d de j                  Z ed e ed                    d                    d          d                    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                    d          d                    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 d0 d1e e          Z"dS )4    N)
ModuleSpec   )ResourceReaderTraversableTraversableResources   )_path)zip)import_helper	os_helperc                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )Readerc                 J    t          |                               |           d S N)varsupdate)selfkwargss     Y/root/projects/butler/venv/lib/python3.11/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          | j        t                    r| j        | j        S r   )r	   
isinstancefile	Exceptionr   paths     r   open_resourcezReader.open_resource   s,    
di++ 	)Oyr   c                 `    || _         t          | j        t                    r| j        | j        S r   )r	   r   r"   r    )r   path_s     r   resource_pathzReader.resource_path   s,    
di++ 	)Oyr   c                     | _         t          | j        t                    r| j        d }t	          fdt          || j                  D                       S )Nc                 ,    |                      d          S )N/)split)entrys    r   partz Reader.is_resource.<locals>.part)   s    ;;s###r   c              3   V   K   | ]#}t          |          d k    o|d         k    V  $dS )r   r   N)len).0partsr%   s     r   	<genexpr>z%Reader.is_resource.<locals>.<genexpr>,   sL       
 
6;CJJ!O1aE 1
 
 
 
 
 
r   )r	   r   r"   r    anymap	_contents)r   r%   r,   s    ` r   is_resourcezReader.is_resource$   sz    
di++ 	)O	$ 	$ 	$  
 
 
 
?B4?X?X
 
 
 
 
 	
r   c              #   f   K   t          | j        t                    r| j        | j        E d {V  d S r   )r   r"   r    r4   r   s    r   contentszReader.contents0   sA      di++ 	)O>!!!!!!!!!r   N)	__name__
__module____qualname__r   r   r#   r&   r5   r8   r   r   r   r   r      sn        " " "      

 

 

" " " " "r   r   Tc                 t    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   sB    Dd##FdF+;
SSSDFOFMr   r   c                 B    t          t          | ||          |          S )N)r   r"   r4   )rH   r   )r   r"   r?   r8   s       r   create_packagerJ   ?   s)    %Dtx888  r   c                   b    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dS )CommonTestsBasez>
    Tests shared by test_open, test_path, and test_read.
    c                     dS )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                 F    |                      | j        j        d           dS )z=
        Passing in the package name should succeed.
        
utf-8.fileN)rN   datar9   r7   s    r   test_package_namez!CommonTestsBase.test_package_nameR   s#     	TY'66666r   c                 <    |                      | j        d           dS )z?
        Passing in the package itself should succeed.
        rP   NrN   rQ   r7   s    r   test_package_objectz#CommonTestsBase.test_package_objectX   s      	TY-----r   c                 @    d}|                      | j        |           dS )zB
        Passing in a string for the path should succeed.
        rP   NrT   r!   s     r   test_string_pathz CommonTestsBase.test_string_path^   s%     TY%%%%%r   c                 d    t          j        d          }|                     | j        |           dS )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   s0     --TY%%%%%r   c                 t    t           j        | j        j        = |                     | j        j        d           dS )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     K	*+TY'66666r   c                     t          j        d          }t          |t                                }|                     |d           |                     |j        j        d           dS )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   sc     Z 011
 j7H7J7JKKKWl++++1<@@@@@r   c                     t          j        d          }t          }t          ||          }|                     |d           |                     |j        j        d           d S )Nra   rb   rP   )rc   rd   __file__rJ   rN   rf   rC   r	   )r   rg   r"   r   s       r   test_extant_pathz CommonTestsBase.test_extant_path~   sa     Z 011
 jt<<<Wl++++1<@@@@@r   c                     t          t                      t                                }|                     t                    5  |                     |d           d d d            d S # 1 swxY w Y   d S )Nrb   rP   )rJ   re   assertRaisesrN   r   s     r   test_useless_loaderz#CommonTestsBase.test_useless_loader   s     &7&9&9@Q@S@STTT011 	0 	0LL,///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   A((A,/A,N)r9   r:   r;   __doc__abcabstractmethodrN   rR   rU   rW   r[   r_   rh   rk   rn   r   r   r   rL   rL   F   s          	  7 7 7. . .& & && & &7 7 7	A 	A 	A	A 	A 	A0 0 0 0 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dS )ModuleSetupc                    t          j                    | _        |                     | j        j                   | j                            t          j                               |                     | j	                  | _
        d S r   )
contextlib	ExitStackfixtures
addCleanupcloseenter_contextr   isolated_modulesload_fixtureMODULErQ   r7   s    r   setUpzModuleSetup.setUp   sc    ",..+,,,##M$B$D$DEEE%%dk22			r   c                 n    |                      |t          |         i           t          j        |          S r   )tree_on_pathr   	importlibimport_moduler   rF   s     r   r   zModuleSetup.load_fixture   s1    68F#34555&v...r   N)r9   r:   r;   r   r   r   r   r   r   r      s2        3 3 3/ / / / /r   r   c                       e Zd ZdZd ZdS )ZipSetupr   c           
      "   | j                             t          j                              }t	          j        |          dz  }| j                             t          j        t          t          j
        ||                                         d S )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   s|    =..y/A/C/CDD,x((+??##'D,>tW,M,M(N(NO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dS )	DiskSetupr   c                    | j                             t          j                              }t	          j        |t          j        |                     | j                             t          j	        |                     d S r   )
r   r   r   r   r	   buildrY   r   r   r   )r   rG   r   s      r   r   zDiskSetup.tree_on_path   sc    =..y/A/C/CDDD',x00111##M$?$I$IJJJJJr   Nr   r   r   r   r   r      s-        FK K K K 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dS )MemorySetupz#Support loading a module in memory.r   c                     | j                             |                     |                     t          j        |          S r   )r   r   augment_sys_metapathr   r   r   s     r   r   zMemorySetup.load_fixture   s7    ##D$=$=f$E$EFFF&v...r   c              #      K   |                      |          }t          j                            |           d V  t          j                            |           d S r   )MemoryFinderr]   	meta_pathappendremove)r   rF   finder_instances      r   r   z MemorySetup.augment_sys_metapath   sT      ++F33_---_-----r   c                       e Zd Zd ZddZdS )MemorySetup.MemoryFinderc                     || _         d S r   _moduler   s     r   r   z!MemorySetup.MemoryFinder.__init__       !DLLLr   Nc                     || j         k    rd S t          j                            |t                              | j                   d          S )NT)rE   rD   r?   )r   r   	machineryr   r   MemoryLoader)r   fullnamer"   targets       r   	find_specz"MemorySetup.MemoryFinder.find_spec   sM    4<''t&11"//== 2   r   r   )r9   r:   r;   r   r   r   r   r   r   r      s7        	" 	" 	"	 	 	 	 	 	r   r   c                        e Zd Zd Zd Zd ZdS )MemorySetup.MemoryLoaderc                     || _         d S r   r   r   s     r   r   z!MemorySetup.MemoryLoader.__init__   r   r   c                     d S r   r   r   s     r   exec_modulez$MemorySetup.MemoryLoader.exec_module   s    Dr   c                 B    t                               | j        |          S r   )r   MemoryTraversableResourcesr   )r   r   s     r   r   z,MemorySetup.MemoryLoader.get_resource_reader   s    99$,QQQr   N)r9   r:   r;   r   r   r   r   r   r   r   r      sF        	" 	" 	"	 	 		R 	R 	R 	R 	Rr   r   c                       e Zd Zd Zd ZdS )&MemorySetup.MemoryTraversableResourcesc                 "    || _         || _        d S r   r   	_fullnamer   rF   r   s      r   r   z/MemorySetup.MemoryTraversableResources.__init__       !DL%DNNNr   c                 L    t                               | j        | j                  S r   )r   MemoryTraversabler   r   r7   s    r   filesz,MemorySetup.MemoryTraversableResources.files   s    00t~NNNr   N)r9   r:   r;   r   r   r   r   r   r   r      s7        	& 	& 	&	O 	O 	O 	O 	Or   r   c                   Z    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d	S )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                 "    || _         || _        d S r   r   r   s      r   r   z&MemorySetup.MemoryTraversable.__init__  r   r   c                 v    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  s1     (88D#$5$5tz8LLLr   c              #      K   |                                  }t          |t                    st          | j         d          |D ].}t
                              | j        | j         d|           V  /d S )Nz is not a directoryr)   )r   r   dictOSErrorr   r   r   r   )r   	directoryr"   s      r   iterdirz%MemorySetup.MemoryTraversable.iterdir  s      Ii.. FDDDEEE!  !33LT^"<"<d"<"<      r   returnc                 P    t          |                                 t                    S r   )r   r   r   r7   s    r   is_dirz$MemorySetup.MemoryTraversable.is_dir  s    dmmoot444r   c                 ,    |                                   S r   )r   r7   s    r   is_filez%MemorySetup.MemoryTraversable.is_file  s    {{}}$$r   rNc                 8   |                                  }t          |t                    rt          | j         d          t          |t
                    r|                    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!  s    }}H(D)) B @@@AAA(C(( 4#??733Z))Fd{{#FXfMMMMr   c                 >    t          j        | j                  j        S r   )rY   r   r   rE   r7   s    r   rE   z"MemorySetup.MemoryTraversable.name.  s    (88==r   )r   NN)r9   r:   r;   ro   r   r   r   boolr   r   r   propertyrE   r   r   r   r   r      s        	 		& 	& 	&	M 	M 	M	 	 		5D 	5 	5 	5 	5	%T 	% 	% 	% 	%	N 	N 	N 	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      s       --F/ / / . . .    y}3   R R R R Ry}+ R R RO O O O O%9 O O O4> 4> 4> 4> 4>K 4> 4> 4> 4> 4>r   r   c                       e Zd ZdS )CommonTestsN)r9   r:   r;   r   r   r   r   r   3  s        Dr   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      sL   



             				  



  * * * * * * C C C C C C C C C C             1 1 1 1 1 1 1 1"" "" "" "" ""^ "" "" ""J      F0 F0 F0 F0 F0 F0 F0 F0 F0R 4uUU1XX5<<[II-44W== 5q!--
 
	 	 !NCC!NCC$~|&DE	  uUU1XX5<<[II-44W==55r2//
	 #  8
/ 
/ 
/ 
/ 
/ 
/ 
/ 
/
 
 
 
 
{ 
 
 
K K K K K K K Kd> d> d> d> d>+ d> d> d>N	 	 	 	 	)_ 	 	 	 	 	r   