U
    ï¤ùd
  ã                   @   s„   d Z ddlZddlZddlZddlmZmZ ddlmZmZ G dd„ dej	ƒZ
G dd	„ d	eƒZG d
d„ deƒZG dd„ dee
ƒZdS )z+
Interface adapters for low-level readers.
é    N)ÚBinaryIOÚListé   )ÚTraversableÚTraversableResourcesc                   @   sz   e Zd ZdZeejedœdd„ƒƒZeje	d  dœdd„ƒZ
eje	e dœdd„ƒZejeed	œd
d„ƒZedd„ ƒZdS )ÚSimpleReaderzQ
    The minimum, low-level interface required from a resource
    provider.
    )Úreturnc                 C   s   dS )zP
        The name of the package for which this reader loads resources.
        N© ©Úselfr	   r	   ú>/tmp/pip-unpacked-wheel-6jp1x26f/importlib_resources/simple.pyÚpackage   s    zSimpleReader.packagec                 C   s   dS )zo
        Obtain an iterable of SimpleReader for available
        child containers (e.g. directories).
        Nr	   r
   r	   r	   r   Úchildren   s    zSimpleReader.childrenc                 C   s   dS )zL
        Obtain available named resources for this virtual package.
        Nr	   r
   r	   r	   r   Ú	resources!   s    zSimpleReader.resources)Úresourcer   c                 C   s   dS )z:
        Obtain a File-like for a named resource.
        Nr	   )r   r   r	   r	   r   Úopen_binary'   s    zSimpleReader.open_binaryc                 C   s   | j  d¡d S )NÚ.éÿÿÿÿ)r   Úsplitr
   r	   r	   r   Úname-   s    zSimpleReader.nameN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚpropertyÚabcÚabstractmethodÚstrr   r   r   r   r   r   r   r	   r	   r	   r   r      s   r   c                   @   s>   e Zd ZdZedœdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dS )ÚResourceContainerzI
    Traversable container for a package's resources via its reader.
    ©Úreaderc                 C   s
   || _ d S ©Nr   )r   r    r	   r	   r   Ú__init__7   s    zResourceContainer.__init__c                 C   s   dS ©NTr	   r
   r	   r	   r   Úis_dir:   s    zResourceContainer.is_dirc                 C   s   dS ©NFr	   r
   r	   r	   r   Úis_file=   s    zResourceContainer.is_filec                    s2   ‡ fdd„ˆ j jD ƒ}ttˆ j  ¡ ƒ}t ||¡S )Nc                 3   s   | ]}t ˆ |ƒV  qd S r!   )ÚResourceHandle)Ú.0r   r
   r	   r   Ú	<genexpr>A   s     z,ResourceContainer.iterdir.<locals>.<genexpr>)r    r   Úmapr   r   Ú	itertoolsÚchain)r   ÚfilesÚdirsr	   r
   r   Úiterdir@   s    zResourceContainer.iterdirc                 O   s
   t ƒ ‚d S r!   )ÚIsADirectoryError)r   ÚargsÚkwargsr	   r	   r   ÚopenE   s    zResourceContainer.openN)
r   r   r   r   r   r"   r$   r&   r/   r3   r	   r	   r	   r   r   2   s   r   c                   @   sB   e Zd ZdZeedœdd„Zdd„ Zdd„ Zdd
d„Z	dd„ Z
dS )r'   z9
    Handle to a named resource in a ResourceReader.
    ©Úparentr   c                 C   s   || _ || _d S r!   r4   )r   r5   r   r	   r	   r   r"   N   s    zResourceHandle.__init__c                 C   s   dS r#   r	   r
   r	   r	   r   r&   R   s    zResourceHandle.is_filec                 C   s   dS r%   r	   r
   r	   r	   r   r$   U   s    zResourceHandle.is_dirÚrc                 O   s(   | j j | j¡}d|kr$tj||Ž}|S )NÚb)r5   r    r   r   ÚioÚTextIOWrapper)r   Úmoder1   r2   Ústreamr	   r	   r   r3   X   s    zResourceHandle.openc                 C   s   t dƒ‚d S )NzCannot traverse into a resource)ÚRuntimeError)r   r   r	   r	   r   Újoinpath^   s    zResourceHandle.joinpathN)r6   )r   r   r   r   r   r   r"   r&   r$   r3   r=   r	   r	   r	   r   r'   I   s   
r'   c                   @   s   e Zd ZdZdd„ ZdS )ÚTraversableReaderzÄ
    A TraversableResources based on SimpleReader. Resource providers
    may derive from this class to provide the TraversableResources
    interface by supplying the SimpleReader interface.
    c                 C   s   t | ƒS r!   )r   r
   r	   r	   r   r-   i   s    zTraversableReader.filesN)r   r   r   r   r-   r	   r	   r	   r   r>   b   s   r>   )r   r   r8   r+   Útypingr   r   r   r   ÚABCr   r   r'   r>   r	   r	   r	   r   Ú<module>   s   %