
    yPgH                         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ddlZ ej        dej                  Z ej        dej                  ZdZ G d d	e          Z G d
 de          Z G d dej                  Z G d de          Z G d de          ZddZddZddZddZ e!dk    rddl"Z" e"j"         e d                     dS dS )z7Discover and load entry points from installed packages.    )contextmanagerN)import_modulezY
(?P<modulename>\w+(\.\w+)*)
(:(?P<objectname>\w+(\.\w+)*))?
\s*
(\[(?P<extras>.+)\])?
$
zC
(?P<dist_version>[^/\\]+)\.(dist|egg)-info
[/\\]entry_points.txt$
z0.4c                   D    e Zd ZdZd Zd Zeed                         ZdS )BadEntryPointz0Raised when an entry point can't be parsed.
    c                     || _         d S Nepstr)selfr
   s     +lib/python3.11/site-packages/entrypoints.py__init__zBadEntryPoint.__init__$   s    


    c                     d| j         z  S )Nz#Couldn't parse entry point spec: %rr	   r   s    r   __str__zBadEntryPoint.__str__'   s    4tzAAr   c               #      K   	 d V  d S # t           $ r,} t          j        t          |                      Y d } ~ d S d } ~ ww xY wr   )r   warningswarnstr)es    r   err_to_warningszBadEntryPoint.err_to_warnings*   s_      	"EEEEE 	" 	" 	"M#a&&!!!!!!!!!	"s   
 
A !;A N)	__name__
__module____qualname____doc__r   r   staticmethodr   r    r   r   r   r   !   sd           B B B " " ^ \" " "r   r   c                       e Zd ZdZd Zd ZdS )NoSuchEntryPointzCRaised by :func:`get_single` when no matching entry point is found.c                 "    || _         || _        d S r   )groupname)r   r!   r"   s      r   r   zNoSuchEntryPoint.__init__4   s    
			r   c                 B    d                     | j        | j                  S )Nz'No {!r} entry point found in group {!r})formatr"   r!   r   s    r   r   zNoSuchEntryPoint.__str__8   s    8??	4:VVVr   N)r   r   r   r   r   r   r   r   r   r   r   2   s=        MM  W W W W Wr   r   c                   $    e Zd Z ee          ZdS )CaseSensitiveConfigParserN)r   r   r   r   r   optionxformr   r   r   r&   r&   <   s        ,s##KKKr   r&   c                   :    e Zd ZddZd Zd Zedd            ZdS )
EntryPointNc                 L    || _         || _        || _        || _        || _        d S r   )r"   module_nameobject_nameextrasdistro)r   r"   r+   r,   r-   r.   s         r   r   zEntryPoint.__init__A   s+    	&&r   c           	      H    d| j         d| j        d| j        d| j        d	S )NzEntryPoint(, ))r"   r+   r,   r.   r   s    r   __repr__zEntryPoint.__repr__H   s7     YYY((($*:*:*:DKKKI 	Ir   c                     t          | j                  }|}| j        r-| j                            d          D ]}t	          ||          }|S )z:Load the object to which this entry point refers.
        .)r   r+   r,   splitgetattr)r   modobjattrs       r   loadzEntryPoint.loadL   sZ     D,-- 	)(..s33 ) )c4((
r   c                     t                               |          }|rA|                    ddd          \  }}}|t          j        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!   rer5   r   )clsr
   r"   r.   mr7   r8   r-   s           r   from_stringzEntryPoint.from_stringV   sx      %%e,, 	' ww|\8LLCf!'6223tS#vv666&&&r   )NNr   )r   r   r   r   r2   r:   classmethodrC   r   r   r   r)   r)   @   si           I I I   ' ' ' [' ' 'r   r)   c                   0    e Zd Zd Zed             Zd ZdS )Distributionc                 "    || _         || _        d S r   r"   version)r   r"   rI   s      r   r   zDistribution.__init__j   s    	r   c                 X    d}d|v r|                     dd          \  }} | ||          S )zParse a distribution from a "name-version" string

        :param str name: The name-version string (entrypoints-0.3)
        Returns an :class:`Distribution` object
        N-   )r5   )rA   r"   rI   s      r   from_name_versionzDistribution.from_name_versionn   s;     $;; JJsA..MD's4!!!r   c                 (    d| j         d| j        dS )NzDistribution(r0   r1   rH   r   s    r   r2   zDistribution.__repr__z   s     )-DLLLAAr   N)r   r   r   r   rD   rM   r2   r   r   r   rF   rF   i   sR           	" 	" [	"B B B B Br   rF   firstc              #   (	  K   | t           j        } t                      }| D ]o}|                    d                              d          rt          j        |          }t                              |	                    d          d                   }|dk    r
|j
        |v r|                    |j
                   t          j        |          rXt          j        |dd          }t          j        |          r,t          d          }|                    |g           ||fV  n0t#          j        |          rt#          j        |          }	 |                    d	          }	n# t*          $ r Y Uw xY wt          d          }|                    |	          5 }
t/          j        |
          }|                    |t          j        |dd          
           d d d            n# 1 swxY w Y   ||fV  n\t#          j        |          rGt#          j        |          5 }|                                D ]}	t6                              |	j                  }|s%|                    d          }t                              |          }|dk    r
|j
        |v rd|                    |j
                   t          d          }|                    |	          5 }
t/          j        |
          }|                    |t          j        ||	j                  
           d d d            n# 1 swxY w Y   ||fV  	 d d d            n# 1 swxY w Y   t?          j         tC          j"        t          j        tC          j#        |          dd                    tC          j"        t          j        tC          j#        |          dd                              D ]} t          j$        t          j        t          j%        |                               d         }t                              |          }|dk    r
|j
        |v rj|                    |j
                   t          d          }|                    | g           ||fV  qd S )Nz/\z.eggr   rO   zEGG-INFOzentry_points.txt)=)
delimiterszEGG-INFO/entry_points.txt)sourcedist_versionz*.dist-infoz
*.egg-info)&syspathsetrstripendswithospbasenamerF   rM   r5   r"   addisdirjoinisfiler&   readzipfile
is_zipfileZipFilegetinfoKeyErroropenioTextIOWrapper	read_fileinfolistfile_in_zip_patternr?   filenamer!   	itertoolschainglobiglobescapesplitextdirname)rV   repeated_distrodistro_names_seenfolderegg_namer.   ep_pathcpzinfoffuzfrB   distro_name_versions                  r   iter_files_distrosr   ~   sO     |x  D D==((00 2	%|F++H!33HNN64J4J14MNNF7**(999!!&+...y   !(6:7IJJ:g&& %2fEEEBGGWI&&&f*$$$#F++ !OF++99%@AADD   H.&AAAVVD\\ AQ)!,,BLLCH
,>-@ -@L A A AA A A A A A A A A A A A A A A &j    '' 	%(( %BKKMM % %D+11$-@@A ! *+''.*A*A');;<OPPF'722!'0A!A!A %))&+6662fEEEB Q!-a00R0O0OPPPQ Q Q Q Q Q Q Q Q Q Q Q Q Q Q f*$$$$#%% % % % % % % % % % % % % % %* OJsxF 3 3]DVWWXXJsxF 3 3\CUVVWW
 
 	 	D #&,s|CK<M<M/N/N"O"OPQ"R!334GHHF7**(999!!&+...*f===BGGTFOOOf*	mD Ds]   E))
E76E7A G++G/	2G/	'B8MAL/	#M/L33M6L37MM	M	c                 $   t          |          D ]p\  }}| |v rg|||          v r]||          |         }t                                          5  t                              |||          cddd           c S # 1 swxY w Y   qt          | |          )zFind a single entry point.

    Returns an :class:`EntryPoint` object, or raises :exc:`NoSuchEntryPoint`
    if no match is found.
    rV   N)r   r   r   r)   rC   r   )r!   r"   rV   configr.   r
   s         r   
get_singler      s     -$777 C CVOO$&-"7"75M$'E..00 C C!--eT6BBC C C C C C C C C C C C C C C C C C 5$
'
''s   A66A:	=A:	c                 X    i }t          | |          D ]}|j        |vr
|||j        <   |S )zwFind a group of entry points with unique names.

    Returns a dictionary of names to :class:`EntryPoint` objects.
    r   )get_group_allr"   )r!   rV   resulteps       r   get_group_namedr      sC    
 FE--- ! !7&   F27OMr   c           
      >   g }t          |          D ]\  }}| |v r||                                          D ]e\  }}t                                          5  |                    t
                              |||                     ddd           n# 1 swxY w Y   f|S )zZFind all entry points in a group.

    Returns a list of :class:`EntryPoint` objects.
    r   N)r   itemsr   r   appendr)   rC   )r!   rV   r   r   r.   r"   r
   s          r   r   r      s    
 F,$777 O OF??%e}2244 O Oe"2244 O OMM*"8"8f"M"MNNNO O O O O O O O O O O O O O O Ms   0BBB__main__console_scripts)NrO   r   )#r   
contextlibr   ro   	importlibr   rg   rm   os.pathrV   rZ   r@   rU   r   ra   configparsercompileVERBOSEr>   rk   __version__	Exceptionr   r   ConfigParserr&   objectr)   rF   r   r   r   r   r   pprintr   r   r   <module>r      sV   = = & % % % % %  # # # # # # 				           				 



       bj " Z   !bj " Z  
 " " " " "I " " ""W W W W Wy W W W$ $ $ $ $ 9 $ $ $'' '' '' '' '' '' '' ''RB B B B B6 B B B*N N N N`( ( ( (	 	 	 	    zMMMFM-- 12233333 r   