o
    ­—ŽjV,  ã                	   @   s~  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	ddl
mZ ddlmZmZmZ e e¡ZdaG dd„ deƒZG dd	„ d	eƒZG d
d„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZedƒee	jeiZz&zd dlZW n e yŠ   d dl!ZY nw eeej"< eeej#< eeej$< [W n e e%fy§   Y nw dd„ Z&i Z'dd„ Z(e )e*dƒ¡Z+dd„ Z,dS )é    )Úunicode_literalsNé   )ÚDistlibException)Úcached_propertyÚget_cache_baseÚCachec                       s.   e Zd Zd‡ fdd„	Zdd„ Zdd„ Z‡  ZS )	ÚResourceCacheNc                    s0   |d u rt j tƒ tdƒ¡}tt| ƒ |¡ d S )Nzresource-cache)ÚosÚpathÚjoinr   ÚstrÚsuperr   Ú__init__)ÚselfÚbase©Ú	__class__© úZ/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/pip/_vendor/distlib/resources.pyr      s   zResourceCache.__init__c                 C   s   dS )zã
        Is the cache stale for the given resource?

        :param resource: The :class:`Resource` being cached.
        :param path: The path of the resource in the cache.
        :return: True if the cache is stale.
        Tr   ©r   Úresourcer
   r   r   r   Úis_stale"   s   	zResourceCache.is_stalec                 C   s¸   |j  |¡\}}|du r|}|S tj | j|  |¡|¡}tj |¡}tj |¡s-t 	|¡ tj 
|¡s6d}n|  ||¡}|rZt|dƒ�}| |j¡ W d  ƒ |S 1 sUw   Y  |S )z¤
        Get a resource into the cache,

        :param resource: A :class:`Resource` instance.
        :return: The pathname of the resource in the cache.
        NTÚwb)ÚfinderÚget_cache_infor	   r
   r   r   Úprefix_to_dirÚdirnameÚisdirÚmakedirsÚexistsr   ÚopenÚwriteÚbytes)r   r   Úprefixr
   Úresultr   ÚstaleÚfr   r   r   Úget-   s$   ô

ÿþzResourceCache.get©N)Ú__name__Ú
__module__Ú__qualname__r   r   r'   Ú__classcell__r   r   r   r   r      s    r   c                   @   s   e Zd Zdd„ ZdS )ÚResourceBasec                 C   s   || _ || _d S r(   )r   Úname)r   r   r.   r   r   r   r   I   s   
zResourceBase.__init__N)r)   r*   r+   r   r   r   r   r   r-   G   s    r-   c                   @   s@   e Zd ZdZdZdd„ Zedd„ ƒZedd„ ƒZed	d
„ ƒZ	dS )ÚResourcezÇ
    A class representing an in-package resource, such as a data file. This is
    not normally instantiated by user code, but rather by a
    :class:`ResourceFinder` which manages the resource.
    Fc                 C   ó   | j  | ¡S )z’
        Get the resource as a stream.

        This is not a property to make it obvious that it returns a new stream
        each time.
        )r   Ú
get_stream©r   r   r   r   Ú	as_streamV   s   zResource.as_streamc                 C   s   t d u rtƒ a t  | ¡S r(   )Úcacher   r'   r2   r   r   r   Ú	file_path_   s   
zResource.file_pathc                 C   r0   r(   )r   Ú	get_bytesr2   r   r   r   r"   f   ó   zResource.bytesc                 C   r0   r(   )r   Úget_sizer2   r   r   r   Úsizej   r7   zResource.sizeN)
r)   r*   r+   Ú__doc__Úis_containerr3   r   r5   r"   r9   r   r   r   r   r/   N   s    	

r/   c                   @   s   e Zd ZdZedd„ ƒZdS )ÚResourceContainerTc                 C   r0   r(   )r   Úget_resourcesr2   r   r   r   Ú	resourcesr   r7   zResourceContainer.resourcesN)r)   r*   r+   r;   r   r>   r   r   r   r   r<   o   s    r<   c                   @   sš   e Zd ZdZej d¡rdZndZdd„ Zdd„ Z	d	d
„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZeejjƒZdd„ ZdS ) ÚResourceFinderz4
    Resource finder for file system resources.
    Újava)ú.pycú.pyoz.class)rA   rB   c                 C   s.   || _ t|dd ƒ| _tj t|ddƒ¡| _d S )NÚ
__loader__Ú__file__Ú )ÚmoduleÚgetattrÚloaderr	   r
   r   r   )r   rF   r   r   r   r   �   s   zResourceFinder.__init__c                 C   ó   t j |¡S r(   )r	   r
   Úrealpath©r   r
   r   r   r   Ú_adjust_path†   ó   zResourceFinder._adjust_pathc                 C   s8   |   | j¡}||krdS | tj¡s|tj }| |¡S )NT)rL   r   Úendswithr	   ÚsepÚ
startswith)r   r
   r   r   r   r   Ú_is_in_base‰   s   

zResourceFinder._is_in_basec                 C   s\   t |tƒrd}nd}| |¡}| d| j¡ tjj|Ž }|  |¡}|  	|¡s,t
d| ƒ‚|S )Nó   /ú/r   z!Resource name escapes package: %r)Ú
isinstancer"   ÚsplitÚinsertr   r	   r
   r   rL   rQ   r   )r   Úresource_namerO   Úpartsr$   r   r   r   Ú
_make_path‘   s   



ÿzResourceFinder._make_pathc                 C   rI   r(   )r	   r
   r   rK   r   r   r   Ú_find£   rM   zResourceFinder._findc                 C   s
   d |j fS r(   )r
   ©r   r   r   r   r   r   ¦   s   
zResourceFinder.get_cache_infoc                 C   sF   |   |¡}|  |¡sd }|S |  |¡rt| |ƒ}nt| |ƒ}||_|S r(   )rY   rZ   Ú_is_directoryr<   r/   r
   )r   rW   r
   r$   r   r   r   Úfind©   s   


û
zResourceFinder.findc                 C   s   t |jdƒS ©NÚrb)r    r
   r[   r   r   r   r1   µ   rM   zResourceFinder.get_streamc                 C   s8   t |jdƒ�}| ¡ W  d   ƒ S 1 sw   Y  d S r^   )r    r
   Úread)r   r   r&   r   r   r   r6   ¸   s   $ÿzResourceFinder.get_bytesc                 C   s   t j |j¡S r(   )r	   r
   Úgetsizer[   r   r   r   r8   ¼   ó   zResourceFinder.get_sizec                    s*   ‡fdd„‰ t ‡ fdd„t |j¡D ƒƒS )Nc                    s   | dko
|   ˆ j¡ S )NÚ__pycache__)rN   Úskipped_extensions)r&   r2   r   r   ÚallowedÁ   s   z-ResourceFinder.get_resources.<locals>.allowedc                    s   g | ]}ˆ |ƒr|‘qS r   r   )Ú.0r&   )re   r   r   Ú
<listcomp>Ä   s    z0ResourceFinder.get_resources.<locals>.<listcomp>)Úsetr	   Úlistdirr
   r[   r   )re   r   r   r=   ¿   s   zResourceFinder.get_resourcesc                 C   s   |   |j¡S r(   )r\   r
   r[   r   r   r   r;   Æ   rM   zResourceFinder.is_containerc                 c   s�   � |   |¡}|d urD|g}|rF| d¡}|V  |jr@|j}|jD ]}|s'|}nd ||g¡}|   |¡}|jr<| |¡ q |V  q |sd S d S d S )Nr   rS   )r]   Úpopr;   r.   r>   r   Úappend)r   rW   r   ÚtodoÚrnamer.   Únew_nameÚchildr   r   r   ÚiteratorË   s(   €



òþzResourceFinder.iteratorN)r)   r*   r+   r:   ÚsysÚplatformrP   rd   r   rL   rQ   rY   rZ   r   r]   r1   r6   r8   r=   r;   Ústaticmethodr	   r
   r   r\   rp   r   r   r   r   r?   w   s&    r?   c                       s`   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Z‡  ZS )ÚZipResourceFinderz6
    Resource finder for resources in .zip files.
    c                    sZ   t t| ƒ |¡ | jj}dt|ƒ | _t| jdƒr| jj| _nt	j
| | _t| jƒ| _d S )Nr   Ú_files)r   rt   r   rH   ÚarchiveÚlenÚ
prefix_lenÚhasattrru   Ú	zipimportÚ_zip_directory_cacheÚsortedÚindex)r   rF   rv   r   r   r   r   å   s   zZipResourceFinder.__init__c                 C   s   |S r(   r   rK   r   r   r   rL   ð   s   zZipResourceFinder._adjust_pathc                 C   s¤   || j d … }|| jv rd}n+|r|d tjkr|tj }t | j|¡}z
| j|  |¡}W n ty9   d}Y nw |sGt 	d|| j
j¡ |S t 	d|| j
j¡ |S )NTéÿÿÿÿFz_find failed: %r %rz_find worked: %r %r)rx   ru   r	   rO   Úbisectr}   rP   Ú
IndexErrorÚloggerÚdebugrH   r#   )r   r
   r$   Úir   r   r   rZ   ó   s    

ÿÿzZipResourceFinder._findc                 C   s&   | j j}|jdt|ƒ d … }||fS )Nr   )rH   rv   r
   rw   )r   r   r#   r
   r   r   r   r     s   z ZipResourceFinder.get_cache_infoc                 C   s   | j  |j¡S r(   )rH   Úget_datar
   r[   r   r   r   r6   
  rb   zZipResourceFinder.get_bytesc                 C   s   t  |  |¡¡S r(   )ÚioÚBytesIOr6   r[   r   r   r   r1     ó   zZipResourceFinder.get_streamc                 C   s   |j | jd … }| j| d S )Né   )r
   rx   ru   r   r   r   r   r8     s   zZipResourceFinder.get_sizec                 C   s°   |j | jd … }|r|d tjkr|tj7 }t|ƒ}tƒ }t | j|¡}|t| jƒk rV| j|  |¡s6	 |S | j| |d … }| 	| 
tjd¡d ¡ |d7 }|t| jƒk s+|S )Nr~   r   r   )r
   rx   r	   rO   rw   rh   r   r}   rP   ÚaddrU   )r   r   r
   Úplenr$   rƒ   Úsr   r   r   r=     s   
ýûzZipResourceFinder.get_resourcesc                 C   sh   || j d … }|r|d tjkr|tj7 }t | j|¡}z| j|  |¡}W |S  ty3   d}Y |S w )Nr~   F)rx   r	   rO   r   r}   rP   r€   )r   r
   rƒ   r$   r   r   r   r\   #  s   
þþzZipResourceFinder._is_directory)r)   r*   r+   r:   r   rL   rZ   r   r6   r1   r8   r=   r\   r,   r   r   r   r   rt   à   s    rt   c                 C   s   |t t| ƒ< d S r(   )Ú_finder_registryÚtype)rH   Úfinder_makerr   r   r   Úregister_finder@  r‡   r�   c                 C   sŽ   | t v r
t |  }|S | tjvrt| ƒ tj|  }t|ddƒ}|du r&tdƒ‚t|ddƒ}t t|ƒ¡}|du r=td|  ƒ‚||ƒ}|t | < |S )zŸ
    Return a resource finder for a package.
    :param package: The name of the package.
    :return: A :class:`ResourceFinder` instance for the package.
    Ú__path__Nz8You cannot get a finder for a module, only for a packagerC   zUnable to locate finder for %r)	Ú_finder_cacherq   ÚmodulesÚ
__import__rG   r   rŒ   r'   r�   )Úpackager$   rF   r
   rH   rŽ   r   r   r   r   G  s    
ó
r   Ú	__dummy__c                 C   sR   d}t  | ¡ tj | ¡}t t|ƒ¡}|r't}tj	 
| d¡|_||_||ƒ}|S )z¬
    Return a resource finder for a path, which should represent a container.

    :param path: The path.
    :return: A :class:`ResourceFinder` instance for the path.
    NrE   )ÚpkgutilÚget_importerrq   Úpath_importer_cacher'   rŒ   r�   Ú_dummy_moduler	   r
   r   rD   rC   )r
   r$   rH   r   rF   r   r   r   Úfinder_for_pathc  s   
rš   )-Ú
__future__r   r   r…   Úloggingr	   r–   rq   Útypesrz   rE   r   Úutilr   r   r   Ú	getLoggerr)   r�   r4   r   Úobjectr-   r/   r<   r?   rt   r�   ÚzipimporterrŒ   Ú_frozen_importlib_externalÚ_fiÚImportErrorÚ_frozen_importlibÚSourceFileLoaderÚ
FileFinderÚSourcelessFileLoaderÚAttributeErrorr�   r‘   r   Ú
ModuleTyper   r™   rš   r   r   r   r   Ú<module>   sL   
-!iOÿ


ÿ