U
    i2e                     @   s
  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 ej	dkrXd 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reeeje f Zneedf Zdd ZdS )    N)suppress)Union)   
   )Path)runtime_checkablec                 C   s   | S N )clsr	   r	   ?/tmp/pip-unpacked-wheel-bn52x7jx/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_reader3   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_reader7   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_readerC   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   0   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]c                 C   s(   t | ts| S tjdtdd t| S )zM
    Convert deprecated string arguments to traversables (pathlib.Path).
    z<String arguments are deprecated. Pass a Traversable instead.r   )
stacklevel)
isinstancestrwarningswarnDeprecationWarningr%   r   )r   r	   r	   r   ensure_traversableq   s    
r9   )abcossysr%   r6   
contextlibr   typingr   version_infozipfiler   ZZipPathZzippr   ImportErrorr   ABCr   r1   r5   PathLikeZStrPathr9   r	   r	   r	   r   <module>   s.   
=
