U
    ½mœdw  ã                   @   sú   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jdkrPd dl	m
Z nd dlm
Z zd dlmZ W n ek
rˆ   dd„ ZY nX zd d	lmZ W n ek
r´   e jZY nX G d
d„ dƒZdd„ Zejdkrêeeeje f Zneedf ZdS )é    N)Úsuppress)ÚUnion)é   é
   )ÚPath)Úruntime_checkablec                 C   s   | S ©N© )Úclsr	   r	   úT/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/importlib_resources/_compat.pyr      s    r   )ÚProtocolc                   @   s,   e Zd ZdZdd„ Zedd„ ƒZdd„ ZdS )	ÚTraversableResourcesLoaderzË
    Adapt loaders to provide TraversableResources and other
    compatibility.

    Used primarily for Python 3.9 and earlier where the native
    loaders do not yet implement TraversableResources.
    c                 C   s
   || _ d S r   ©Úspec)Úselfr   r	   r	   r   Ú__init__(   s    z#TraversableResourcesLoader.__init__c                 C   s   | j jS r   )r   Úorigin)r   r	   r	   r   Úpath+   s    zTraversableResourcesLoader.pathc                    s~   ddl m‰m} ‡fdd„}‡fdd„}dd„ ‰ ‡ fd	d
„}‡‡fdd„}|ˆjƒp||ˆjƒp||ˆjƒp||ˆjƒp|| ˆj¡S )Né   )ÚreadersÚ	_adaptersc              
      s0   t tƒ� ˆ  | j| j¡W  5 Q R £ S Q R X d S r   )r   ÚAttributeErrorZ	ZipReaderÚloaderÚnamer   ©r   r	   r   Ú_zip_reader2   s    
zCTraversableResourcesLoader.get_resource_reader.<locals>._zip_readerc              
      s.   t ttƒ� ˆ  | j¡W  5 Q R £ S Q R X d S r   )r   r   Ú
ValueErrorZNamespaceReaderÚsubmodule_search_locationsr   r   r	   r   Ú_namespace_reader6   s    zITraversableResourcesLoader.get_resource_reader.<locals>._namespace_readerc              
   S   s.   t tƒ� | j | j¡W  5 Q R £ S Q R X d S r   )r   r   r   Úget_resource_readerr   r   r	   r	   r   Ú_available_reader:   s    
zITraversableResourcesLoader.get_resource_reader.<locals>._available_readerc                    s   ˆ | ƒ}t |dƒr|S d S )NÚfiles)Úhasattr)r   Úreader)r    r	   r   Ú_native_reader>   s    zFTraversableResourcesLoader.get_resource_reader.<locals>._native_readerc                    s>   zt  ˆj¡}W n tk
r&   Y d S X | ¡ r:ˆ  ˆ¡S d S r   )Úpathlibr   r   Ú	TypeErrorÚexistsZ
FileReader)r   r   )r   r   r	   r   Ú_file_readerB   s    zDTraversableResourcesLoader.get_resource_reader.<locals>._file_reader)Ú r   r   r   ZCompatibilityFiles)r   r   r   r   r   r$   r(   r	   )r    r   r   r   r   /   s    

ýú	÷
òz.TraversableResourcesLoader.get_resource_readerN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr   r   r	   r	   r	   r   r      s
   
r   c                 C   s   ddl m} | | jt¡S )zÝ
    Construct a package spec with traversable compatibility
    on the spec/loader/reader.

    Supersedes _adapters.wrap_spec to use TraversableResourcesLoader
    from above for older Python compatibility (<3.10).
    r   )r   )r)   r   ZSpecLoaderAdapterÚ__spec__r   )Úpackager   r	   r	   r   Ú	wrap_spec\   s    r1   )r   é	   zos.PathLike[str])ÚabcÚosÚsysr%   Ú
contextlibr   Útypingr   Úversion_infoÚzipfiler   ZZipPathZzippr   ÚImportErrorr   ÚABCr   r1   ÚstrÚPathLikeZStrPathr	   r	   r	   r   Ú<module>   s*   
=
