U
    ½mœdØ  ã                   @   s˜   d dl Z 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)Úonly)ÚZipPathc                 C   s   t tj | ¡ƒS ©N)ÚiterÚcollectionsÚOrderedDictÚfromkeys)Úitems© r   úT/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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 )zf
        Workaround for `zipfile.Path.is_file` returning true
        for non-existent paths.
        )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    4   s    zZipReader.files)r"   r#   r$   r   r2   r<   r    Ú__classcell__r   r   r7   r   r%       s   r%   c                       sx   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	‡ fdd„Z
edd„ ƒZdd„ Zedd„ ƒZdd„ Z‡  Z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>E   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   sF   dd„ | j D ƒ}t d¡}tjt||d�|d�}t| jdd„ |D ƒƒS )Nc                 s   s    | ]}|  ¡ D ]
}|V  qqd S r   )Úiterdir)rA   r   Úchildr   r   r   rB   I   s     
  z*MultiplexedPath.iterdir.<locals>.<genexpr>r/   )Úkeyc                 s   s   | ]\}}|V  qd S r   r   )rA   r/   Zlocsr   r   r   rB   L   s     )rE   ÚoperatorÚ
attrgetterÚ	itertoolsÚgroupbyÚsortedrD   Ú_follow)r   ÚchildrenZby_nameÚgroupsr   r   r   rJ   H   s    
zMultiplexedPath.iterdirc                 C   s   t | › d�ƒ‚d S ©Nz is not a file©r4   r   r   r   r   Ú
read_bytesN   s    zMultiplexedPath.read_bytesc                 O   s   t | › d�ƒ‚d S rU   rV   ©r   r5   Úkwargsr   r   r   Ú	read_textQ   s    zMultiplexedPath.read_textc                 C   s   dS )NTr   r   r   r   r   r?   T   s    zMultiplexedPath.is_dirc                 C   s   dS )NFr   r   r   r   r   r9   W   s    zMultiplexedPath.is_filec                    s:   zt ƒ j|Ž W S  tjk
r4   | jd j|Ž  Y S X d S r0   )r1   r   r   ZTraversalErrorrE   )r   Zdescendantsr7   r   r   r   Z   s    zMultiplexedPath.joinpathc                 C   sf   t  |d¡\}}}z
t|ƒW S  tk
r`   z| |Ž W  Y S  tk
rZ   t|ƒ Y  Y S X Y nX dS )zö
        Construct a MultiplexedPath if needed.

        If children contains a sole element, return it.
        Otherwise, return a MultiplexedPath of the items.
        Unless one of the items is not a Directory, then return the first.
        é   N)rO   Úteer   Ú
ValueErrorrG   Únext)ÚclsrS   ÚsubdirsZone_dirZone_filer   r   r   rR   b   s    	
zMultiplexedPath._followc                 O   s   t | › d�ƒ‚d S rU   rV   rX   r   r   r   Úopenu   s    zMultiplexedPath.openc                 C   s   | j d jS r0   )rE   r/   r   r   r   r   r/   x   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   }   s     z+MultiplexedPath.__repr__.<locals>.<genexpr>zMultiplexedPath(ú))ÚjoinrE   )r   rH   r   r   r   Ú__repr__|   s    zMultiplexedPath.__repr__)r"   r#   r$   Ú__doc__r   rJ   rW   rZ   r?   r9   r   ÚclassmethodrR   ra   Úpropertyr/   re   r=   r   r   r7   r   r>   8   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   r]   r>   rC   r   )r   Únamespace_pathr   r   r   r   ‚   s    zNamespaceReader.__init__c                 C   s   t | j |¡ƒS r   r   r   r   r   r   r   ‡   s    zNamespaceReader.resource_pathc                 C   s   | j S r   r   r   r   r   r   r    �   s    zNamespaceReader.filesNr!   r   r   r   r   ri   �   s   ri   )r   rO   r   rM   Ú r   Ú
_itertoolsr   Z_compatr   r   ZTraversableResourcesr   r%   ZTraversabler>   ri   r   r   r   r   Ú<module>   s   I