U
    ½mœd‰  ã                   @   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 ddlmZ ddl m	Z	 ddl
mZ d dlmZ G d	d
„ d
e	ƒZddd„Zddd„ZG dd„ de jd�ZG dd„ dƒZG dd„ deƒZdS )é    Né   )Údata01)Ú	zipdata01é   )ÚResourceReader)Úimport_helper)Ú
ModuleSpecc                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚReaderc                 K   s   t | ƒ |¡ d S ©N)ÚvarsÚupdate)ÚselfÚkwargs© r   úW/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/importlib_resources/tests/util.pyÚ__init__   s    zReader.__init__c                 C   s   | S r
   r   ©r   Úpackager   r   r   Úget_resource_reader   s    zReader.get_resource_readerc                 C   s   || _ t| jtƒr| j‚| jS r
   )Ú_pathÚ
isinstanceÚfileÚ	Exception©r   Úpathr   r   r   Úopen_resource   s    zReader.open_resourcec                 C   s   || _ t| jtƒr| j‚| jS r
   )r   r   r   r   )r   Úpath_r   r   r   Úresource_path   s    zReader.resource_pathc                    s>   ˆ | _ t| jtƒr| j‚dd„ }t‡ fdd„t|| jƒD ƒƒS )Nc                 S   s
   |   d¡S )Nú/)Úsplit)Úentryr   r   r   Úpart)   s    z Reader.is_resource.<locals>.partc                 3   s&   | ]}t |ƒd ko|d ˆ kV  qdS )r   r   N)Úlen)Ú.0Úparts©r   r   r   Ú	<genexpr>,   s    z%Reader.is_resource.<locals>.<genexpr>)r   r   r   r   ÚanyÚmapÚ	_contents)r   r   r!   r   r%   r   Úis_resource$   s    
ÿzReader.is_resourcec                 c   s"   t | jtƒr| j‚| jE d H  d S r
   )r   r   r   r)   ©r   r   r   r   Úcontents0   s    zReader.contentsN)	Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r*   r,   r   r   r   r   r	      s   r	   Tc                 C   s.   d}t  |¡}t|| d|d�}||_| |_|S )NZtestingpackagezdoes-not-exist)ÚoriginÚ
is_package)ÚtypesÚ
ModuleTyper   Ú__spec__Ú
__loader__)Úloaderr1   ÚnameÚmoduleÚspecr   r   r   Úcreate_package_from_loader6   s    
r:   r   c                 C   s   t t| ||d�|ƒS )N)r   r   r)   )r:   r	   )r   r   r1   r,   r   r   r   Úcreate_package?   s    þr;   c                   @   s^   e Zd ZdZejdd„ ƒZdd„ Zdd„ Zdd	„ Z	d
d„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚCommonTestsz>
    Tests shared by test_open, test_path, and test_read.
    c                 C   s   dS )zl
        Call the pertinent legacy API function (e.g. open_text, path)
        on package and path.
        Nr   )r   r   r   r   r   r   ÚexecuteK   s    zCommonTests.executec                 C   s   |   tjd¡ dS )z=
        Passing in the package name should succeed.
        ú
utf-8.fileN)r=   r   r-   r+   r   r   r   Útest_package_nameR   s    zCommonTests.test_package_namec                 C   s   |   td¡ dS )z?
        Passing in the package itself should succeed.
        r>   N©r=   r   r+   r   r   r   Útest_package_objectX   s    zCommonTests.test_package_objectc                 C   s   d}|   t|¡ dS )zB
        Passing in a string for the path should succeed.
        r>   Nr@   r   r   r   r   Útest_string_path^   s    zCommonTests.test_string_pathc                 C   s   t  d¡}|  t|¡ dS )zS
        Passing in a pathlib.PurePath object for the path should succeed.
        r>   N)ÚpathlibÚPurePathr=   r   r   r   r   r   Útest_pathlib_pathe   s    
zCommonTests.test_pathlib_pathc                 C   s   t jtj= |  tjd¡ dS )z=
        The anchor package can already be imported.
        r>   N)ÚsysÚmodulesr   r-   r=   r+   r   r   r   Ú$test_importing_module_as_side_effectl   s    
z0CommonTests.test_importing_module_as_side_effectc                 C   s8   t  d¡}t|tƒ d�}|  |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   r>   N)ÚioÚBytesIOr;   ÚFileNotFoundErrorr=   ÚassertEqualr5   r   )r   Ú
bytes_datar   r   r   r   Útest_missing_paths   s    
zCommonTests.test_missing_pathc                 C   s:   t  d¡}t}t||d�}|  |d¡ |  |jjd¡ d S )NrI   rJ   r>   )rK   rL   Ú__file__r;   r=   rN   r5   r   )r   rO   r   r   r   r   r   Útest_extant_path~   s
    
zCommonTests.test_extant_pathc              	   C   s6   t tƒ tƒ d�}|  t¡� |  |d¡ W 5 Q R X d S )NrJ   r>   )r;   rM   ÚassertRaisesr=   r   r   r   r   Útest_useless_loader‰   s    zCommonTests.test_useless_loaderN)r-   r.   r/   Ú__doc__ÚabcÚabstractmethodr=   r?   rA   rB   rE   rH   rP   rR   rT   r   r   r   r   r<   F   s   
r<   )Ú	metaclassc                   @   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)rC   ÚPathÚ
ZIP_MODULErQ   ÚparentÚstrÚ	_zip_pathrF   r   ÚappendÚ	importlibÚimport_moduleÚdata)ÚclsZ	data_pathÚdata_dirr   r   r   Ú
setUpClass’   s
    zZipSetupBase.setUpClassc                 C   s~   zt j | j¡ W n tk
r&   Y nX zt j| j= t j| jj= W n t	k
rV   Y nX z| `| `W n t
k
rx   Y nX d S r
   )rF   r   Úremover^   Ú
ValueErrorÚpath_importer_cacherG   rb   r-   ÚKeyErrorÚAttributeError)rc   r   r   r   ÚtearDownClassš   s    
zZipSetupBase.tearDownClassc                 C   s   t  ¡ }| jt jf|žŽ  d S r
   )r   Zmodules_setupZ
addCleanupZmodules_cleanup)r   rG   r   r   r   ÚsetUp­   s    zZipSetupBase.setUp)r-   r.   r/   r[   Úclassmethodre   rk   rl   r   r   r   r   rY   �   s   

rY   c                   @   s   e Zd ZeZdS )ÚZipSetupN)r-   r.   r/   r   r[   r   r   r   r   rn   ²   s   rn   )T)NNTr   )rV   r`   rK   rF   r2   rC   Ú r   r   r   Z_compatr   Zimportlib.machineryr   r	   r:   r;   ÚABCMetar<   rY   rn   r   r   r   r   Ú<module>   s    %
	
I#