
    h+                         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dS )z+
Interface adapters for low-level readers.
    N)BinaryIOList   )TraversableTraversableResourcesc                       e Zd ZdZej        d             Zej        d             Zej        d             Z	ej        d             Z
ed             ZdS )SimpleReaderzQ
    The minimum, low-level interface required from a resource
    provider.
    c                     dS )zP
        The name of the package for which this reader loads resources.
        N selfs    1/usr/lib/python3.11/importlib/resources/simple.pypackagezSimpleReader.package             c                     dS )zo
        Obtain an iterable of SimpleReader for available
        child containers (e.g. directories).
        Nr   r   s    r   childrenzSimpleReader.children   r   r   c                     dS )zL
        Obtain available named resources for this virtual package.
        Nr   r   s    r   	resourceszSimpleReader.resources"   r   r   c                     dS )z:
        Obtain a File-like for a named resource.
        Nr   )r   resources     r   open_binaryzSimpleReader.open_binary)   r   r   c                 B    | j                             d          d         S )N.)r   splitr   s    r   namezSimpleReader.name0   s    |!!#&&r**r   N)__name__
__module____qualname____doc__abcabstractpropertyr   abstractmethodr   r   r   propertyr   r   r   r   r	   r	      s         
 	   	   	   	   + + X+ + +r   r	   c                   2    e Zd ZdZd Zd Zd Zd	dZd ZdS )
ResourceHandlez9
    Handle to a named resource in a ResourceReader.
    c                 "    || _         || _        d S N)parentr   )r   r*   r   s      r   __init__zResourceHandle.__init__:   s    			r   c                     dS NTr   r   s    r   is_filezResourceHandle.is_file?       tr   c                     dS NFr   r   s    r   is_dirzResourceHandle.is_dirB       ur   rc                 x    | j         j                            | j                  }d|vrt	          j        |i |}|S )Nb)r*   readerr   r   ioTextIOWrapper)r   modeargskwargsstreams        r   openzResourceHandle.openE   s?    #//	::d??%t6v66Fr   c                      t          d          )NzCannot traverse into a resource)RuntimeError)r   r   s     r   joinpathzResourceHandle.joinpathK   s    <===r   N)r4   )	r   r   r    r!   r+   r.   r2   r>   rA   r   r   r   r'   r'   5   sn           
       > > > > >r   r'   c                   L    e Zd ZdZd Zd Zd Zd Zd Ze	d             Z
d Zd	S )
ResourceContainerzI
    Traversable container for a package's resources via its reader.
    c                     || _         d S r)   )r7   )r   r7   s     r   r+   zResourceContainer.__init__T   s    r   c                     dS r-   r   r   s    r   r2   zResourceContainer.is_dirX   r/   r   c                     dS r1   r   r   s    r   r.   zResourceContainer.is_file[   r3   r   c                       fd j         j        D             }t          t           j                                                   }t          j        ||          S )Nc              3   8   K   | ]}t          |          V  d S r)   )r'   ).0r   r   s     r   	<genexpr>z,ResourceContainer.iterdir.<locals>.<genexpr>_   s-      NNd++NNNNNNr   )r7   r   maprC   r   	itertoolschain)r   filesdirss   `  r   iterdirzResourceContainer.iterdir^   sQ    NNNN8MNNN$dk&:&:&<&<==ud+++r   c                     t                      r)   )IsADirectoryError)r   r;   r<   s      r   r>   zResourceContainer.openc   s    !!!r   c              #   J   K   | D ]}|                     d          E d {V  d S )N/)r   )compound_namesr   s     r   _flattenzResourceContainer._flattenf   sD      " 	' 	'Dzz#&&&&&&&&	' 	'r   c                     |s| S |                      |          }t          |           t          fd|                                 D                       j        | S )Nc              3   2   K   | ]}|j         k    |V  d S r)   )r   )rI   traversabletargets     r   rJ   z-ResourceContainer.joinpath.<locals>.<genexpr>p   s:       
 
'[=MQW=W=WK=W=W=W=W
 
r   )rV   nextrP   rA   )r   descendantsnamesrZ   s      @r   rA   zResourceContainer.joinpathk   sz     	Kk**et 
 
 
 
+/<<>>
 
 
 
 

E 	r   N)r   r   r    r!   r+   r2   r.   rP   r>   staticmethodrV   rA   r   r   r   rC   rC   O   s               , , ,
" " " ' ' \'    r   rC   c                       e Zd ZdZd ZdS )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)   )rC   r   s    r   rN   zTraversableReader.files|   s     &&&r   N)r   r   r    r!   rN   r   r   r   r`   r`   u   s-         ' ' ' ' 'r   r`   )r!   r"   r8   rL   typingr   r   r   r   ABCr	   r'   rC   r`   r   r   r   <module>rd      s    


 				     ! ! ! ! ! ! ! ! 2 2 2 2 2 2 2 2%+ %+ %+ %+ %+37 %+ %+ %+P> > > > >[ > > >4# # # # # # # #L' ' ' ' ',l ' ' ' ' 'r   