o
     JAf                     @   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 r   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   r5   !   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   r/   r-   r!   r
   r
   r   r"   -   r   zZipReader.files)r%   r&   r'   r   r5   r?   r"   __classcell__r
   r
   r:   r   r(      s
    r(   c                   @   sf   e 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 )MultiplexedPathc                 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   _pathsr7   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   )rI   iterdirr2   append)r   Zvisitedr   filer
   r
   r   rN   A   s   

zMultiplexedPath.iterdirc                 C      t |  dNz is not a filer7   r!   r
   r
   r   
read_bytesJ      zMultiplexedPath.read_bytesc                 O   rQ   rR   rS   r   r8   kwargsr
   r
   r   	read_textM   rU   zMultiplexedPath.read_textc                 C      dS )NTr
   r!   r
   r
   r   rC   P      zMultiplexedPath.is_dirc                 C   rY   )NFr
   r!   r
   r
   r   r<   S   rZ   zMultiplexedPath.is_filec                 C   s.   |   D ]}|j|kr|  S q| jd | S r3   )rN   r2   rI   )r   childrP   r
   r
   r   r   V   s
   
zMultiplexedPath.joinpathc                 O   rQ   rR   rS   rV   r
   r
   r   open`   rU   zMultiplexedPath.openc                 C   s   | j d jS r3   )rI   r2   r!   r
   r
   r   r2   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
   rD   r
   r
   r   rF   h   s    z+MultiplexedPath.__repr__.<locals>.<genexpr>zMultiplexedPath())joinrI   )r   rL   r
   r
   r   __repr__g   s   zMultiplexedPath.__repr__N)r%   r&   r'   r   rN   rT   rX   rC   r<   r   __truediv__r\   propertyr2   r`   r
   r
   r
   r   rB   1   s    	
rB   c                   @   r   )NamespaceReaderc                 C   s&   dt |vr
tdtt| | _d S )NZNamespacePathzInvalid path)r   
ValueErrorrB   rG   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   rc   l   s    rc   )r   r@   r    r   r   ZTraversableResourcesr   r(   ZTraversablerB   rc   r
   r
   r
   r   <module>   s    ;