o
    éT•jt  ã                   @   sN   d dl mZ ddlmZ G dd„ dƒZG dd„ dƒZG dd	„ d	ƒZd
d„ ZdS )é    )Úsuppressé   )Úabcc                   @   s(   e Zd ZdZdd„ fdd„Zdd„ ZdS )	ÚSpecLoaderAdapterz>
    Adapt a package spec to adapt the underlying loader.
    c                 C   s   | j S ©N)Úloader©Úspec© r
   ú*/usr/lib/python3.10/importlib/_adapters.pyÚ<lambda>   s    zSpecLoaderAdapter.<lambda>c                 C   s   || _ ||ƒ| _d S r   )r	   r   )Úselfr	   Úadapterr
   r
   r   Ú__init__   s   zSpecLoaderAdapter.__init__c                 C   ó   t | j|ƒS r   )Úgetattrr	   ©r   Únamer
   r
   r   Ú__getattr__   ó   zSpecLoaderAdapter.__getattr__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r
   r
   r
   r   r      s    r   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚTraversableResourcesLoaderz9
    Adapt a loader to provide TraversableResources.
    c                 C   ó
   || _ d S r   r   ©r   r	   r
   r
   r   r      ó   
z#TraversableResourcesLoader.__init__c                 C   s   t | jƒ ¡ S r   )ÚDegenerateFilesr	   Ú_nativer   r
   r
   r   Úget_resource_reader   s   z.TraversableResourcesLoader.get_resource_readerN)r   r   r   r   r   r    r
   r
   r
   r   r      s    r   c                   @   sN   e Zd ZdZG dd„ dejƒZdd„ Zedd„ ƒZ	dd	„ Z
d
d„ Zdd„ ZdS )r   zg
    Adapter for an existing or non-existant resource reader
    to provide a degenerate .files().
    c                   @   sB   e Zd Zdd„ Zdd„ Ze ZZdd„ Zedd„ ƒZ	dd
d„Z
dS )zDegenerateFiles.Pathc                 C   s   t dƒS )Nr
   )Úiter©r   r
   r
   r   Úiterdir&   ó   zDegenerateFiles.Path.iterdirc                 C   ó   dS )NFr
   r"   r
   r
   r   Úis_dir)   s   zDegenerateFiles.Path.is_dirc                 C   ó   t  ¡ S r   ©r   ÚPath)r   Úotherr
   r
   r   Újoinpath.   r$   zDegenerateFiles.Path.joinpathc                 C   r%   )NÚ r
   r"   r
   r
   r   r   1   s   zDegenerateFiles.Path.nameÚrbc                 O   s   t ƒ ‚r   )Ú
ValueError)r   ÚmodeÚargsÚkwargsr
   r
   r   Úopen5   s   zDegenerateFiles.Path.openN)r-   )r   r   r   r#   r&   Úis_fileÚexistsr+   Úpropertyr   r2   r
   r
   r
   r   r)   %   s    
r)   c                 C   r   r   r   r   r
   r
   r   r   8   r   zDegenerateFiles.__init__c                 C   s>   t tƒ� | jj | jj¡W  d   ƒ S 1 sw   Y  d S r   )r   ÚAttributeErrorr	   r   r    r   r"   r
   r
   r   Ú_reader;   s   
$ÿzDegenerateFiles._readerc                 C   s   | j }t|dƒr
|S | S )zB
        Return the native reader if it supports files().
        Úfiles)r7   Úhasattr)r   Úreaderr
   r
   r   r   @   s   zDegenerateFiles._nativec                 C   r   r   )r   r7   )r   Úattrr
   r
   r   r   G   r   zDegenerateFiles.__getattr__c                 C   r'   r   r(   r"   r
   r
   r   r8   J   r$   zDegenerateFiles.filesN)r   r   r   r   r   ÚTraversabler)   r   r5   r7   r   r   r8   r
   r
   r
   r   r      s    
r   c                 C   s   t | jtƒS )z`
    Construct a package spec with traversable compatibility
    on the spec/loader/reader.
    )r   Ú__spec__r   )Úpackager
   r
   r   Ú	wrap_specN   s   r?   N)Ú
contextlibr   r,   r   r   r   r   r?   r
   r
   r
   r   Ú<module>   s    /