U
    -c                     @   s   d dl Z d dlZd dlZddlmZ ddlmZ ddlmZ dd Z	G dd	 d	ej
ZG d
d dej
ZG dd dejZG dd dej
ZdS )    N   )abc)unique_everseen)ZipPathc                 C   s   t tj| S N)itercollectionsOrderedDictfromkeys)items r   U/tmp/pip-unpacked-wheel-izj_87as/pkg_resources/_vendor/importlib_resources/readers.pyremove_duplicates   s    r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )
FileReaderc                 C   s   t |jj| _d S r   )pathlibPathpathparent)selfloaderr   r   r   __init__   s    zFileReader.__init__c                 C   s   t | j|S z{
        Return the file system path to prevent
        `resources.path()` from creating a temporary
        copy.
        strr   joinpathr   resourcer   r   r   resource_path   s    zFileReader.resource_pathc                 C   s   | j S r   r   r   r   r   r   files   s    zFileReader.filesN__name__
__module____qualname__r   r   r    r   r   r   r   r      s   r   c                       s4   e Zd Zdd Z fddZdd Zdd Z  ZS )		ZipReaderc                 C   s4   | d\}}}|jdd| d | _|j| _d S )N.\/)
rpartitionprefixreplacearchive)r   r   module_namer   r   r   r       s    zZipReader.__init__c              
      sD   zt  |W S  tk
r> } zt|jd W 5 d }~X Y nX d S Nr   )superopen_resourceKeyErrorFileNotFoundErrorargs)r   r   exc	__class__r   r   r2   %   s    zZipReader.open_resourcec                 C   s   |   |}| o| S r   )r    r   is_fileexists)r   r   targetr   r   r   is_resource+   s    zZipReader.is_resourcec                 C   s   t | j| jS r   )r   r,   r*   r   r   r   r   r    1   s    zZipReader.files)r"   r#   r$   r   r2   r<   r    __classcell__r   r   r7   r   r%      s   r%   c                   @   sh   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
e
Zdd Zedd Zdd ZdS )MultiplexedPathz
    Given a series of Traversable objects, implement a merged
    version of the interface across all objects. Useful for
    namespace packages which may be multihomed at a single
    name.
    c                 G   sH   t ttjt|| _| js(d}t|tdd | jD sDtdd S )Nz.MultiplexedPath must contain at least one pathc                 s   s   | ]}|  V  qd S r   )is_dir.0r   r   r   r   	<genexpr>B   s     z+MultiplexedPath.__init__.<locals>.<genexpr>z)MultiplexedPath only supports directories)	listmapr   r   r   _pathsr4   allNotADirectoryError)r   pathsmessager   r   r   r   =   s    zMultiplexedPath.__init__c                 C   s"   dd | j D }t|tddS )Nc                 s   s    | ]}|  D ]
}|V  qqd S r   )iterdir)rA   r   filer   r   r   rB   F   s     
  z*MultiplexedPath.iterdir.<locals>.<genexpr>r/   )key)rE   r   operator
attrgetter)r   r    r   r   r   rJ   E   s    zMultiplexedPath.iterdirc                 C   s   t |  dd S Nz is not a filer4   r   r   r   r   
read_bytesI   s    zMultiplexedPath.read_bytesc                 O   s   t |  dd S rO   rP   r   r5   kwargsr   r   r   	read_textL   s    zMultiplexedPath.read_textc                 C   s   dS )NTr   r   r   r   r   r?   O   s    zMultiplexedPath.is_dirc                 C   s   dS )NFr   r   r   r   r   r9   R   s    zMultiplexedPath.is_filec                 C   s.   |   D ]}|j|kr|  S q| jd | S r0   )rJ   r/   rE   )r   childrK   r   r   r   r   U   s    

zMultiplexedPath.joinpathc                 O   s   t |  dd S rO   rP   rR   r   r   r   open_   s    zMultiplexedPath.openc                 C   s   | j d jS r0   )rE   r/   r   r   r   r   r/   b   s    zMultiplexedPath.namec                 C   s"   d dd | jD }d| dS )Nz, c                 s   s   | ]}d | d V  qdS )'Nr   r@   r   r   r   rB   g   s     z+MultiplexedPath.__repr__.<locals>.<genexpr>zMultiplexedPath())joinrE   )r   rH   r   r   r   __repr__f   s    zMultiplexedPath.__repr__N)r"   r#   r$   __doc__r   rJ   rQ   rT   r?   r9   r   __truediv__rV   propertyr/   rZ   r   r   r   r   r>   5   s   
r>   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )NamespaceReaderc                 C   s&   dt |krtdtt| | _d S )NZNamespacePathzInvalid path)r   
ValueErrorr>   rC   r   )r   namespace_pathr   r   r   r   l   s    zNamespaceReader.__init__c                 C   s   t | j|S r   r   r   r   r   r   r   q   s    zNamespaceReader.resource_pathc                 C   s   | j S r   r   r   r   r   r   r    y   s    zNamespaceReader.filesNr!   r   r   r   r   r^   k   s   r^   )r   r   rM    r   
_itertoolsr   _compatr   r   ZTraversableResourcesr   r%   ZTraversabler>   r^   r   r   r   r   <module>   s   6