U
    ?h|                     @   sf   d dl Z d dlZd dlmZ d dlmZ ddlmZmZ dd Z	dd	 Z
G d
d dejZdd ZdS )    N)suppress)SimpleNamespace   )readers	_adaptersc                    s   t   fdd}|S )zw
    Wrap _adapters.TraversableResourcesLoader.get_resource_reader
    and intercept any standard library readers.
    c                     s~   z | |}W n t k
r$   Y dS X |jj}|drF|drFdS t|tjrz|jj	jjdsv|jj	jjdrzdS |S )z
        If the reader is from the standard library, return None to allow
        allow likely newer implementations in this library to take precedence.
        Nz
importlib.r   	zipimport_frozen_importlib_external)
NotADirectoryError	__class__
__module__
startswithendswith
isinstancer   CompatibilityFilesspecloader)argskwargsreadermod_namereader_getter U/var/www/html/venv/lib/python3.8/site-packages/importlib_resources/future/adapters.pywrapper   s     z _block_standard.<locals>.wrapper)	functoolswraps)r   r   r   r   r   _block_standard	   s    r   c                 C   s    t | tjo| j }|s| S dS )z/
    Mask any degenerate reader. Ref #298.
    N)r   r   r   Z_reader)r   Zis_degenerater   r   r   _skip_degenerate+   s    r   c                       s@   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Z  Z	S )TraversableResourcesLoaderz
    Adapt loaders to provide TraversableResources and other
    compatibility.

    Ensures the readers from importlib_resources are preferred
    over stdlib readers.
    c                    s(   t tt j|p&|  p&t |S N)r   r   superget_resource_reader_standard_reader)selfnamer
   r   r   r"   >   s
    
z.TraversableResourcesLoader.get_resource_readerc                 C   s   |   p|  p|  S r    )_zip_reader_namespace_reader_file_readerr$   r   r   r   r#   E   s    z+TraversableResourcesLoader._standard_readerc              
   C   s4   t t" t| jj| jjW  5 Q R  S Q R X d S r    )r   AttributeErrorr   Z	ZipReaderr   r   r%   r*   r   r   r   r'   H   s    
z&TraversableResourcesLoader._zip_readerc              
   C   s0   t tt t| jjW  5 Q R  S Q R X d S r    )r   r+   
ValueErrorr   ZNamespaceReaderr   submodule_search_locationsr*   r   r   r   r(   L   s    z,TraversableResourcesLoader._namespace_readerc                 C   sF   zt | jj}W n tk
r(   Y d S X | rBtt|dS d S )N)path)	pathlibPathr   origin	TypeErrorexistsr   Z
FileReaderr   )r$   r.   r   r   r   r)   P   s    z'TraversableResourcesLoader._file_reader)
__name__r   __qualname____doc__r"   r#   r'   r(   r)   __classcell__r   r   r&   r   r   5   s   r   c                 C   s   t | jtS )z
    Override _adapters.wrap_spec to use TraversableResourcesLoader
    from above. Ensures that future behavior is always available on older
    Pythons.
    )r   ZSpecLoaderAdapter__spec__r   )packager   r   r   	wrap_specY   s    r:   )r   r/   
contextlibr   typesr    r   r   r   r   r   r:   r   r   r   r   <module>   s   "
$