
    Rh
                         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ej                        Z
 G d d	e      Z G d
 de      Z G d dee
      Zy)z+
Interface adapters for low-level readers.
    N)BinaryIOList   )TraversableTraversableResourcesc                       e Zd ZdZeej                  defd              Zej                  de	d    fd       Z
ej                  de	e   fd       Zej                  dedefd       Zed        Zy	)
SimpleReaderzQ
    The minimum, low-level interface required from a resource
    provider.
    returnc                      y)zP
        The name of the package for which this reader loads resources.
        N selfs    1/usr/lib/python3.12/importlib/resources/simple.pypackagezSimpleReader.package           c                      y)zo
        Obtain an iterable of SimpleReader for available
        child containers (e.g. directories).
        Nr   r   s    r   childrenzSimpleReader.children   r   r   c                      y)zL
        Obtain available named resources for this virtual package.
        Nr   r   s    r   	resourceszSimpleReader.resources!   r   r   resourcec                      y)z:
        Obtain a File-like for a named resource.
        Nr   )r   r   s     r   open_binaryzSimpleReader.open_binary'   r   r   c                 >    | j                   j                  d      d   S )N.)r   splitr   s    r   namezSimpleReader.name-   s    ||!!#&r**r   N)__name__
__module____qualname____doc__propertyabcabstractmethodstrr   r   r   r   r   r   r   r   r   r   r	   r	      s    
    
 	$~.   	49  
 	C H  
 + +r   r	   c                   4    e Zd ZdZdefdZd Zd Zd Zd Z	y)	ResourceContainerzI
    Traversable container for a package's resources via its reader.
    readerc                     || _         y N)r)   )r   r)   s     r   __init__zResourceContainer.__init__7   s	    r   c                      yNTr   r   s    r   is_dirzResourceContainer.is_dir:       r   c                      yNFr   r   s    r   is_filezResourceContainer.is_file=       r   c                       fd j                   j                  D        }t        t         j                   j	                               }t        j                  ||      S )Nc              3   6   K   | ]  }t        |        y wr+   )ResourceHandle).0r   r   s     r   	<genexpr>z,ResourceContainer.iterdir.<locals>.<genexpr>A   s     Nd+Ns   )r)   r   mapr(   r   	itertoolschain)r   filesdirss   `  r   iterdirzResourceContainer.iterdir@   sB    N8M8MN$dkk&:&:&<=ud++r   c                     t               r+   )IsADirectoryError)r   argskwargss      r   openzResourceContainer.openE   s    !!r   N)
r   r    r!   r"   r	   r,   r/   r3   r?   rD   r   r   r   r(   r(   2   s'    | ,
"r   r(   c                   :    e Zd ZdZdedefdZd Zd Zd
dZ	d Z
y	)r7   z9
    Handle to a named resource in a ResourceReader.
    parentr   c                      || _         || _        y r+   )rF   r   )r   rF   r   s      r   r,   zResourceHandle.__init__N   s    	r   c                      yr.   r   r   s    r   r3   zResourceHandle.is_fileR   r0   r   c                      yr2   r   r   s    r   r/   zResourceHandle.is_dirU   r4   r   c                     | j                   j                  j                  | j                        }d|vrt	        j
                  |g|i |}|S )Nb)rF   r)   r   r   ioTextIOWrapper)r   moderB   rC   streams        r   rD   zResourceHandle.openX   sF    ##//		:d?%%f>t>v>Fr   c                     t        d      )NzCannot traverse into a resource)RuntimeError)r   r   s     r   joinpathzResourceHandle.joinpath^   s    <==r   N)r)r   r    r!   r"   r(   r&   r,   r3   r/   rD   rR   r   r   r   r7   r7   I   s/    0  >r   r7   c                       e Zd ZdZd Zy)TraversableReaderz
    A TraversableResources based on SimpleReader. Resource providers
    may derive from this class to provide the TraversableResources
    interface by supplying the SimpleReader interface.
    c                     t        |       S r+   )r(   r   s    r   r=   zTraversableReader.filesi   s     &&r   N)r   r    r!   r"   r=   r   r   r   rU   rU   b   s    'r   rU   )r"   r$   rL   r;   typingr   r   r   r   ABCr	   r(   r7   rU   r   r   r   <module>rY      sS     	  ! 2"+377 "+J" ".>[ >2',l 'r   