o
    <[aF                     @   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
   1/var/www/Python-3.10.0/Lib/importlib/_adapters.py<lambda>   s    zSpecLoaderAdapter.<lambda>c                 C   s   || _ ||| _d S r   )r	   r   )selfr	   Z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                   @   s<   e Zd Zdd Zdd Ze ZZdd Zdd Z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)      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   r&   zDegenerateFiles.Path.namec                 C   s   t  r   )
ValueErrorr!   r
   r
   r   open4   s   zDegenerateFiles.Path.openN)
r   r   r   r"   r%   is_fileexistsr+   r   r.   r
   r
   r
   r   r)   %   s    r)   c                 C   r   r   r   r   r
   r
   r   r   7   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().
        filesN)r2   hasattr)r   readerr
   r
   r   r   ?   s   zDegenerateFiles._nativec                 C   r   r   )r   r2   )r   attrr
   r
   r   r   F   r   zDegenerateFiles.__getattr__c                 C   r'   r   r(   r!   r
   r
   r   r3   I   r#   zDegenerateFiles.filesN)r   r   r   r   r   Traversabler)   r   propertyr2   r   r   r3   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.
    N)r   __spec__r   )packager
   r
   r   	wrap_specM   s   r;   N)
contextlibr   r,   r   r   r   r   r;   r
   r
   r
   r   <module>   s    .