o
     zqf                     @   s   d dl Z 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mZ g dZG dd de jdZG d	d
 d
eZeG dd deZG dd deZdS )    N)AnyBinaryIOIterableIteratorNoReturnTextOptional   )runtime_checkableProtocolStrPath)ResourceReaderTraversableTraversableResourcesc                   @   sp   e Zd ZdZejdedefddZejdedefddZ	ejdede
fd	d
Zejdee fddZdS )r   zDAbstract base class for loaders to provide resource reading support.resourcereturnc                 C      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    r   i/root/parts/websockify/install/lib/python3.10/site-packages/setuptools/_vendor/importlib_resources/abc.pyopen_resource   s   
zResourceReader.open_resourcec                 C   r   )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   r   r   r   resource_path   s   zResourceReader.resource_pathpathc                 C   r   )zjReturn True if the named 'path' is a resource.

        Files are resources, directories are not.
        r   r   r   r   r   r   is_resource)   s   zResourceReader.is_resourcec                 C   r   )z+Return an iterable of entries in `package`.r   r   r   r   r   contents1   s   zResourceReader.contentsN)__name__
__module____qualname____doc__abcabstractmethodr   r   r   r   boolr   r   strr   r   r   r   r   r      s    r   )	metaclassc                   @   s   e Zd ZdS )TraversalErrorN)r    r!   r"   r   r   r   r   r)   7   s    r)   c                   @   s   e Zd ZdZejded  fddZdefddZ	dde
e defd	d
ZejdefddZejdefddZdedd fddZdedd fddZejdddZeejdefd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                 C      dS )z3
        Yield Traversable objects in self
        Nr   r   r   r   r   iterdirE       zTraversable.iterdirc                 C   s6   |  d}| W  d   S 1 sw   Y  dS )z0
        Read contents of self as bytes
        rbNopenread)r   strmr   r   r   
read_bytesK   s   $zTraversable.read_bytesNencodingc                 C   s8   | j |d}| W  d   S 1 sw   Y  dS )z/
        Read contents of self as text
        )r3   Nr.   )r   r3   r1   r   r   r   	read_textR   s   $zTraversable.read_textc                 C   r*   )z4
        Return True if self is a directory
        Nr   r   r   r   r   is_dirY   r,   zTraversable.is_dirc                 C   r*   )z/
        Return True if self is a file
        Nr   r   r   r   r   is_file_   r,   zTraversable.is_filedescendantsc                    sz   |s| S t jdd ttj|D }t|  fdd|  D }zt|}W n ty7   t	d t
|w |j| 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`` (``/``).
        c                 s       | ]}|j V  qd S N)parts).0r   r   r   r   	<genexpr>o   s    
z'Traversable.joinpath.<locals>.<genexpr>c                 3   s    | ]
}|j  kr|V  qd S r9   name)r;   traversabletargetr   r   r<   s   s    z"Target not found during traversal.)	itertoolschainfrom_iterablemappathlibPurePosixPathnextr+   StopIterationr)   listjoinpath)r   r7   namesmatchesmatchr   r@   r   rK   e   s"   



zTraversable.joinpathchildc                 C   s
   |  |S )z2
        Return Traversable child in self
        )rK   )r   rO   r   r   r   __truediv__~   s   
zTraversable.__truediv__rc                 O   r*   )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kwargsr   r   r   r/      r,   zTraversable.openc                 C   r*   )zM
        The base name of this object without any parent references.
        Nr   r   r   r   r   r>      r,   zTraversable.namer9   )rQ   )r    r!   r"   r#   r$   r%   r   r+   bytesr2   r   r'   r4   r&   r5   r6   r   rK   rP   r/   propertyr>   r   r   r   r   r   ;   s"    	r   c                   @   sj   e Zd ZdZejdddZdedej	fddZ
dedefd	d
ZdedefddZdee fddZdS )r   zI
    The required interface for providing traversable
    resources.
    r   r   c                 C   r*   )z3Return a Traversable object for the loaded package.Nr   r   r   r   r   files   r,   zTraversableResources.filesr   c                 C   s   |   |dS )Nr-   )rW   rK   r/   r   r   r   r   r      s   z"TraversableResources.open_resourcec                 C   s   t |r9   r   r   r   r   r   r      s   z"TraversableResources.resource_pathr   c                 C   s   |   | S r9   )rW   rK   r6   r   r   r   r   r      s   z TraversableResources.is_resourcec                 C   s   dd |    D S )Nc                 s   r8   r9   r=   )r;   itemr   r   r   r<      s    z0TraversableResources.contents.<locals>.<genexpr>)rW   r+   r   r   r   r   r      s   zTraversableResources.contentsN)r   r   )r    r!   r"   r#   r$   r%   rW   r   ioBufferedReaderr   r   r   r   r&   r   r   r'   r   r   r   r   r   r      s    r   )r$   rY   rB   rF   typingr   r   r   r   r   r   r   _compatr
   r   r   __all__ABCMetar   	Exceptionr)   r   r   r   r   r   r   <module>   s    $*Z