o
    ~¨ÊhF   ã                   @   sD  d Z ddlmZ ddlZddlmZ ddlZddlZddlm	Z
 ddlZddlZddlZddlZejd dkr<ddlZnddlmZ e dej¡Ze dej¡Zd	ZG d
d„ deƒZG dd„ deƒZG dd„ dejƒZG dd„ deƒZG dd„ deƒZddd„Zd dd„Z d dd„Z!d dd„Z"e#dkr ddl$Z$e$ $e"dƒ¡ dS dS )!z7Discover and load entry points from installed packages.é    )ÚcontextmanagerN)Úimport_moduleé   )ÚconfigparserzY
(?P<modulename>\w+(\.\w+)*)
(:(?P<objectname>\w+(\.\w+)*))?
\s*
(\[(?P<extras>.+)\])?
$
zC
(?P<dist_version>[^/\\]+)\.(dist|egg)-info
[/\\]entry_points.txt$
z0.3c                   @   s0   e Zd ZdZdd„ Zdd„ Zeedd„ ƒƒZdS )	ÚBadEntryPointz0Raised when an entry point can't be parsed.
    c                 C   s
   || _ d S ©N©Úepstr)Úselfr	   © r   ú=/var/www/html/env/lib/python3.10/site-packages/entrypoints.pyÚ__init__'   ó   
zBadEntryPoint.__init__c                 C   s
   d| j  S )Nz#Couldn't parse entry point spec: %rr   ©r
   r   r   r   Ú__str__*   r   zBadEntryPoint.__str__c               
   c   sD   � zd V  W d S  t y! }  zt t| ƒ¡ W Y d } ~ d S d } ~ ww r   )r   ÚwarningsÚwarnÚstr)Úer   r   r   Úerr_to_warnings-   s   €€ÿzBadEntryPoint.err_to_warningsN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ústaticmethodr   r   r   r   r   r   r   $   s    r   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚNoSuchEntryPointzCRaised by :func:`get_single` when no matching entry point is found.c                 C   ó   || _ || _d S r   )ÚgroupÚname)r
   r   r   r   r   r   r   7   ó   
zNoSuchEntryPoint.__init__c                 C   s   d  | j| j¡S )Nz'No {!r} entry point found in group {!r})Úformatr   r   r   r   r   r   r   ;   ó   zNoSuchEntryPoint.__str__N)r   r   r   r   r   r   r   r   r   r   r   5   s    r   c                   @   s   e Zd ZeeƒZdS )ÚCaseSensitiveConfigParserN)r   r   r   r   r   Úoptionxformr   r   r   r   r"   ?   s    r"   c                   @   s4   e Zd Zd
dd„Zdd„ Zdd„ Zeddd	„ƒZdS )Ú
EntryPointNc                 C   s"   || _ || _|| _|| _|| _d S r   )r   Úmodule_nameÚobject_nameÚextrasÚdistro)r
   r   r%   r&   r'   r(   r   r   r   r   D   s
   
zEntryPoint.__init__c                 C   s   d| j | j| j| jf S )NzEntryPoint(%r, %r, %r, %r))r   r%   r&   r(   r   r   r   r   Ú__repr__K   s   ÿzEntryPoint.__repr__c                 C   s4   t | jƒ}|}| jr| j d¡D ]}t||ƒ}q|S )z:Load the object to which this entry point refers.
        Ú.)r   r%   r&   ÚsplitÚgetattr)r
   ÚmodÚobjÚattrr   r   r   ÚloadO   s   
zEntryPoint.loadc                 C   sN   t  |¡}|r#| ddd¡\}}}|durt d|¡}| |||||ƒS t|ƒ‚)a‚  Parse an entry point from the syntax in entry_points.txt

        :param str epstr: The entry point string (not including 'name =')
        :param str name: The name of this entry point
        :param Distribution distro: The distribution in which the entry point was found
        :rtype: EntryPoint
        :raises BadEntryPoint: if *epstr* can't be parsed as an entry point.
        Ú
modulenameÚ
objectnamer'   Nz,\s*)Úentry_point_patternÚmatchr   Úrer+   r   )Úclsr	   r   r(   Úmr-   r.   r'   r   r   r   Úfrom_stringY   s   

zEntryPoint.from_string)NNr   )r   r   r   r   r)   r0   Úclassmethodr8   r   r   r   r   r$   C   s    

r$   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚDistributionc                 C   r   r   ©r   Úversion)r
   r   r<   r   r   r   r   m   r   zDistribution.__init__c                 C   s   d| j | jf S )NzDistribution(%r, %r)r;   r   r   r   r   r)   q   r!   zDistribution.__repr__N)r   r   r   r   r)   r   r   r   r   r:   l   s    r:   Úfirstc                 c   s  � | d u rt j} tƒ }| D �]z}| d¡ d¡r­t |¡}d|v r=t| d¡d d… Ž }|dkr6|j	|v r6q| 
|j	¡ nd }t |¡rat |dd¡}t |¡r`tdd	�}| |g¡ ||fV  nÍt |¡r¬t |¡}z| d
¡}	W n	 ty{   Y qw tdd	�}| |	¡�}
t |
¡}|j|t |dd¡d� W d   ƒ n1 s¢w   Y  ||fV  n�t |¡�r.t |¡�m}| ¡ D ]`}	t |	j¡}|sÈq½| d¡}d|v rêt| dd¡Ž }|dkrã|j	|v rãq½| 
|j	¡ nd }tdd	�}| |	¡�}
t |
¡}|j|t ||	j¡d� W d   ƒ n	1 �sw   Y  ||fV  q½W d   ƒ n	1 �s)w   Y  t t  !t |dd¡¡t  !t |dd¡¡¡D ]C} t "t t #| ¡¡¡d }d|v �rtt| dd¡Ž }|dk�rm|j	|v �rm�qD| 
|j	¡ nd }tdd	�}| | g¡ ||fV  �qDqd S )Nz/\z.eggú-é   r=   zEGG-INFOzentry_points.txt)ú=)Ú
delimiterszEGG-INFO/entry_points.txt)ÚsourceÚdist_versioné   z*.dist-infoz
*.egg-infor   )$ÚsysÚpathÚsetÚrstripÚendswithÚospÚbasenamer:   r+   r   ÚaddÚisdirÚjoinÚisfiler"   ÚreadÚzipfileÚ
is_zipfileÚZipFileÚgetinfoÚKeyErrorÚopenÚioÚTextIOWrapperÚ	read_fileÚinfolistÚfile_in_zip_patternr4   Úfilenamer   Ú	itertoolsÚchainÚglobÚiglobÚsplitextÚdirname)rF   Úrepeated_distroÚdistro_names_seenÚfolderÚegg_namer(   Úep_pathÚcpÚzÚinfoÚfÚfuÚzfr7   Údistro_name_versionr   r   r   Úiter_files_distrosu   s˜   €






€

ÿ

ÿþ
€



þìÿþ


ðÄro   c              	   C   sx   t |d�D ]1\}}| |v r6|||  v r6||  | }t ¡ � t |||¡W  d  ƒ   S 1 s1w   Y  qt| |ƒ‚)z‡Find a single entry point.

    Returns an :class:`EntryPoint` object, or raises :exc:`NoSuchEntryPoint`
    if no match is found.
    ©rF   N)ro   r   r   r$   r8   r   )r   r   rF   Úconfigr(   r	   r   r   r   Ú
get_singleÍ   s   
$ÿ€
rr   c                 C   s.   i }t | |d�D ]}|j|vr|||j< q|S )zwFind a group of entry points with unique names.

    Returns a dictionary of names to :class:`EntryPoint` objects.
    rp   )Úget_group_allr   )r   rF   ÚresultÚepr   r   r   Úget_group_namedÛ   s   

€rv   c              
   C   sv   g }t |d�D ]1\}}| |v r8||   ¡ D ]"\}}t ¡ � | t |||¡¡ W d  ƒ n1 s2w   Y  qq|S )zZFind all entry points in a group.

    Returns a list of :class:`EntryPoint` objects.
    rp   N)ro   Úitemsr   r   Úappendr$   r8   )r   rF   rt   rq   r(   r   r	   r   r   r   rs   æ   s   
ÿ€rs   Ú__main__Úconsole_scripts)Nr=   r   )%r   Ú
contextlibr   r_   Ú	importlibr   rW   r]   Úos.pathrF   rJ   r5   rE   r   rQ   Úversion_infor   Ú	backportsÚcompileÚVERBOSEr3   r[   Ú__version__Ú	Exceptionr   r   ÚConfigParserr"   Úobjectr$   r:   ro   rr   rv   rs   r   Úpprintr   r   r   r   Ú<module>   sD    
úý
)
	
X

þ