
    h                         d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	m
Z
 d dlmZmZ d dlmZ eeej        e         f         Zg dZ G d de j                  Ze G d	 d
e                      Z G d de          ZdS )    N)AnyBinaryIOIterableIteratorNoReturnTextOptional)runtime_checkableProtocol)Union)ResourceReaderTraversableTraversableResourcesc                       e Zd ZdZej        dedefd            Zej        dedefd            Z	ej        dede
fd            Zej        dee         fd            Zd	S )
r   zDAbstract base class for loaders to provide resource reading support.resourcereturnc                     t           )zReturn an opened, file-like object for binary reading.

        The 'resource' argument is expected to represent only a file name.
        If the resource cannot be found, FileNotFoundError is raised.
        FileNotFoundErrorselfr   s     ./usr/lib/python3.11/importlib/resources/abc.pyopen_resourcezResourceReader.open_resource   s
          c                     t           )zReturn the file system path to the specified resource.

        The 'resource' argument is expected to represent only a file name.
        If the resource does not exist on the file system, raise
        FileNotFoundError.
        r   r   s     r   resource_pathzResourceReader.resource_path   s
      r   pathc                     t           )zjReturn True if the named 'path' is a resource.

        Files are resources, directories are not.
        r   r   r   s     r   is_resourcezResourceReader.is_resource*   s
      r   c                     t           )z+Return an iterable of entries in `package`.r   r   s    r   contentszResourceReader.contents2   s
      r   N)__name__
__module____qualname____doc__abcabstractmethodr   r   r   r   boolr    r   strr#    r   r   r   r      s        NN	 d 	 x 	  	  	  	  	
 d 
 t 
  
  
  
  	            	 (3-            r   r   )	metaclassc                   <   e Zd ZdZej        ded          fd            ZdefdZ	dde
e         defdZej        defd            Zej        defd	            Zej        d
edd fd            Zdedd fdZej        dd            Zej        defd            ZdS )r   z
    An object with a subset of pathlib.Path methods suitable for
    traversing directories and opening files.

    Any exceptions that occur when accessing the backing resource
    may propagate unaltered.
    r   c                     dS )z3
        Yield Traversable objects in self
        Nr,   r"   s    r   iterdirzTraversable.iterdirB         r   c                     |                      d          5 }|                                cddd           S # 1 swxY w Y   dS )z0
        Read contents of self as bytes
        rbNopenread)r   strms     r   
read_byteszTraversable.read_bytesH   s     YYt__ 	99;;	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   7;;Nencodingc                     |                      |          5 }|                                cddd           S # 1 swxY w Y   dS )z/
        Read contents of self as text
        )r9   Nr4   )r   r9   r7   s      r   	read_textzTraversable.read_textO   s     YYY)) 	T99;;	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   8<<c                     dS )z4
        Return True if self is a directory
        Nr,   r"   s    r   is_dirzTraversable.is_dirV   r1   r   c                     dS )z/
        Return True if self is a file
        Nr,   r"   s    r   is_filezTraversable.is_file\   r1   r   descendantsc                     dS )z
        Return Traversable resolved with any descendants applied.

        Each descendant should be a path segment relative to self
        and each may contain multiple levels separated by
        ``posixpath.sep`` (``/``).
        Nr,   )r   r@   s     r   joinpathzTraversable.joinpathb   r1   r   childc                 ,    |                      |          S )z2
        Return Traversable child in self
        )rB   )r   rC   s     r   __truediv__zTraversable.__truediv__l   s     }}U###r   rc                     dS )z
        mode may be 'r' or 'rb' to open as text or binary. Return a handle
        suitable for reading (same as pathlib.Path.open).

        When opening as text, accepts encoding parameters such as those
        accepted by io.TextIOWrapper.
        Nr,   )r   modeargskwargss       r   r5   zTraversable.openr   r1   r   c                     dS )zM
        The base name of this object without any parent references.
        Nr,   r"   s    r   namezTraversable.name|   r1   r   N)rF   )r$   r%   r&   r'   r(   r)   r   r0   bytesr8   r	   r+   r;   r*   r=   r?   StrPathrB   rE   r5   abstractpropertyrL   r,   r   r   r   r   8   s         	-0    
E     (3- 3     	    
 	    
 	W     $ $] $ $ $ $ 	    	c      r   r   c                       e Zd ZdZej        dd            Zdedej	        fdZ
dedefdZdedefd	Zdee         fd
ZdS )r   zI
    The required interface for providing traversable
    resources.
    r   r   c                     dS )z3Return a Traversable object for the loaded package.Nr,   r"   s    r   fileszTraversableResources.files   r1   r   r   c                 v    |                                                      |                              d          S )Nr3   )rS   rB   r5   r   s     r   r   z"TraversableResources.open_resource   s,    zz||$$X..33D999r   c                      t          |          rM   r   r   s     r   r   z"TraversableResources.resource_path   s    )))r   r   c                 t    |                                                      |                                          S rM   )rS   rB   r?   r   s     r   r    z TraversableResources.is_resource   s*    zz||$$T**22444r   c                 b    d |                                                                  D             S )Nc              3   $   K   | ]}|j         V  d S rM   )rL   ).0items     r   	<genexpr>z0TraversableResources.contents.<locals>.<genexpr>   s$      ==d	======r   )rS   r0   r"   s    r   r#   zTraversableResources.contents   s*    ==djjll&:&:&<&<====r   N)r   r   )r$   r%   r&   r'   r(   r)   rS   rO   ioBufferedReaderr   r   r   r   r*   r    r   r+   r#   r,   r   r   r   r      s         
 	B B B B:g :"2C : : : :*c *h * * * *5 5D 5 5 5 5>(3- > > > > > >r   r   )r(   r\   ostypingr   r   r   r   r   r   r	   r
   r   r   r+   PathLikerO   __all__ABCMetar   r   r   r,   r   r   <module>rc      sI   



 				 				 N N N N N N N N N N N N N N N N N N . . . . . . . .       R[%%
&
C
C
C'  '  '  '  ' s{ '  '  '  ' T G G G G G( G G GT> > > > >> > > > > >r   