o
    éT•j  ã                   @   sx   d dl Z d dlZd dl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é   )Úabcc                 C   s   t tj | ¡ƒS ©N)ÚiterÚcollectionsÚOrderedDictÚfromkeys)Úitems© r
   ú(/usr/lib/python3.10/importlib/readers.pyÚremove_duplicates   ó   r   c                   @   ó$   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   ó   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   ó   zFileReader.resource_pathc                 C   ó   | j S r   ©r   ©r   r
   r
   r   Úfiles   ó   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              
      s6   zt ƒ  |¡W S  ty } zt|jd ƒ‚d }~ww ©Nr   )ÚsuperÚopen_resourceÚKeyErrorÚFileNotFoundErrorÚargs)r   r   Úexc©Ú	__class__r
   r   r6   !   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   )Úzipfiler   r0   r.   r"   r
   r
   r   r#   -   r   zZipReader.files)r&   r'   r(   r   r6   r@   r#   Ú__classcell__r
   r
   r;   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 ƒƒs"t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>>   s   € z+MultiplexedPath.__init__.<locals>.<genexpr>z)MultiplexedPath only supports directories)	ÚlistÚmapr   r   r   Ú_pathsr8   ÚallÚNotADirectoryError)r   ÚpathsÚmessager
   r
   r   r   9   s   ÿzMultiplexedPath.__init__c                 c   sB   � g }| j D ]}| ¡ D ]}|j|v rq| |j¡ |V  qqd S r   )rJ   Úiterdirr3   Úappend)r   Úvisitedr   Úfiler
   r
   r   rO   A   s   €

üÿzMultiplexedPath.iterdirc                 C   ó   t | › d�ƒ‚©Nz is not a file©r8   r"   r
   r
   r   Ú
read_bytesJ   ó   zMultiplexedPath.read_bytesc                 O   rS   rT   rU   ©r   r9   Úkwargsr
   r
   r   Ú	read_textM   rW   zMultiplexedPath.read_textc                 C   ó   dS )NTr
   r"   r
   r
   r   rD   P   ó   zMultiplexedPath.is_dirc                 C   r[   )NFr
   r"   r
   r
   r   r=   S   r\   zMultiplexedPath.is_filec                 C   s.   |   ¡ D ]}|j|kr|  S q| jd | S r4   )rO   r3   rJ   )r   ÚchildrR   r
   r
   r   r   V   s
   
ÿzMultiplexedPath.joinpathc                 O   rS   rT   rU   rX   r
   r
   r   Úopen`   rW   zMultiplexedPath.openc                 C   s   | j d jS r4   )rJ   r3   r"   r
   r
   r   r3   c   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
   rE   r
   r
   r   rG   h   s   € z+MultiplexedPath.__repr__.<locals>.<genexpr>zMultiplexedPath(ú))ÚjoinrJ   )r   rM   r
   r
   r   Ú__repr__g   s   zMultiplexedPath.__repr__N)r&   r'   r(   Ú__doc__r   rO   rV   rZ   rD   r=   r   Ú__truediv__r^   Úpropertyr3   rb   r
   r
   r
   r   rC   1   s    	
rC   c                   @   r   )ÚNamespaceReaderc                 C   s&   dt |ƒvr
tdƒ‚tt|ƒŽ | _d S )NÚNamespacePathzInvalid path)r   Ú
ValueErrorrC   rH   r   )r   Únamespace_pathr
   r
   r   r   m   s   zNamespaceReader.__init__c                 C   r   r   r   r   r
   r
   r   r   r   r   zNamespaceReader.resource_pathc                 C   r    r   r!   r"   r
   r
   r   r#   z   r$   zNamespaceReader.filesNr%   r
   r
   r
   r   rf   l   s    rf   )r   rA   r   Ú r   r   ÚTraversableResourcesr   r)   ÚTraversablerC   rf   r
   r
   r
   r   Ú<module>   s    ;