ó
M”3\c           @   sÁ  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 j	 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 j d e j ƒ Z e j d	 e j ƒ Z d
 Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e j f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d d d „ Z  d d „ Z! d d „ Z" d d „ Z# e$ d k r½d d l% Z% e% j% e# d ƒ ƒ n  d S(   s7   Discover and load entry points from installed packages.iÿÿÿÿ(   t   contextmanagerN(   t   import_modulei    i   (   t   configparsersY   
(?P<modulename>\w+(\.\w+)*)
(:(?P<objectname>\w+(\.\w+)*))?
\s*
(\[(?P<extras>.+)\])?
$
sC   
(?P<dist_version>[^/\\]+)\.(dist|egg)-info
[/\\]entry_points.txt$
s   0.3t   BadEntryPointc           B   s5   e  Z d  Z d „  Z d „  Z e e d „  ƒ ƒ Z RS(   s0   Raised when an entry point can't be parsed.
    c         C   s   | |  _  d  S(   N(   t   epstr(   t   selfR   (    (    s*   lib/python2.7/site-packages/entrypoints.pyt   __init__'   s    c         C   s   d |  j  S(   Ns#   Couldn't parse entry point spec: %r(   R   (   R   (    (    s*   lib/python2.7/site-packages/entrypoints.pyt   __str__*   s    c          c   s6   y	 d  VWn& t  k
 r1 }  t j t |  ƒ ƒ n Xd  S(   N(   R   t   warningst   warnt   str(   t   e(    (    s*   lib/python2.7/site-packages/entrypoints.pyt   err_to_warnings-   s    	(   t   __name__t
   __module__t   __doc__R   R   t   staticmethodR    R   (    (    (    s*   lib/python2.7/site-packages/entrypoints.pyR   $   s
   		t   NoSuchEntryPointc           B   s    e  Z d  Z d „  Z d „  Z RS(   sC   Raised by :func:`get_single` when no matching entry point is found.c         C   s   | |  _  | |  _ d  S(   N(   t   groupt   name(   R   R   R   (    (    s*   lib/python2.7/site-packages/entrypoints.pyR   7   s    	c         C   s   d j  |  j |  j ƒ S(   Ns'   No {!r} entry point found in group {!r}(   t   formatR   R   (   R   (    (    s*   lib/python2.7/site-packages/entrypoints.pyR   ;   s    (   R   R   R   R   R   (    (    (    s*   lib/python2.7/site-packages/entrypoints.pyR   5   s   	t   CaseSensitiveConfigParserc           B   s   e  Z e e ƒ Z RS(    (   R   R   R   R
   t   optionxform(    (    (    s*   lib/python2.7/site-packages/entrypoints.pyR   ?   s   t
   EntryPointc           B   s;   e  Z d d d  „ Z d „  Z d „  Z e d d „ ƒ Z RS(   c         C   s1   | |  _  | |  _ | |  _ | |  _ | |  _ d  S(   N(   R   t   module_namet   object_namet   extrast   distro(   R   R   R   R   R   R   (    (    s*   lib/python2.7/site-packages/entrypoints.pyR   D   s
    				c         C   s    d |  j  |  j |  j |  j f S(   Ns   EntryPoint(%r, %r, %r, %r)(   R   R   R   R   (   R   (    (    s*   lib/python2.7/site-packages/entrypoints.pyt   __repr__K   s    c         C   sQ   t  |  j ƒ } | } |  j rM x, |  j j d ƒ D] } t | | ƒ } q1 Wn  | S(   s:   Load the object to which this entry point refers.
        t   .(   R   R   R   t   splitt   getattr(   R   t   modt   objt   attr(    (    s*   lib/python2.7/site-packages/entrypoints.pyt   loadO   s    	c         C   sz   t  j | ƒ } | rj | j d d d ƒ \ } } } | d k	 rT t j d | ƒ } n  |  | | | | | ƒ St | ƒ ‚ d S(   s‚  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.
        t
   modulenamet
   objectnameR   s   ,\s*N(   t   entry_point_patternt   matchR   t   Nonet   reR   R   (   t   clsR   R   R   t   mR    R!   R   (    (    s*   lib/python2.7/site-packages/entrypoints.pyt   from_stringY   s    
N(   R   R   R(   R   R   R#   t   classmethodR,   (    (    (    s*   lib/python2.7/site-packages/entrypoints.pyR   C   s
   		
t   Distributionc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   R   t   version(   R   R   R/   (    (    s*   lib/python2.7/site-packages/entrypoints.pyR   m   s    	c         C   s   d |  j  |  j f S(   Ns   Distribution(%r, %r)(   R   R/   (   R   (    (    s*   lib/python2.7/site-packages/entrypoints.pyR   q   s    (   R   R   R   R   (    (    (    s*   lib/python2.7/site-packages/entrypoints.pyR.   l   s   	t   firstc         c   sù  |  d  k r t j }  n  t ƒ  } xÑ|  D]É} | j d ƒ j d ƒ rÈt j | ƒ } d | k r® t | j	 d ƒ d  Œ  } | d k r› | j
 | k r› q( n  | j | j
 ƒ n d  } t j | ƒ rt j | d d ƒ } t j | ƒ rÅt d d ƒ } | j | g ƒ | | f VqÅq÷t j | ƒ r÷t j | ƒ } y | j d
 ƒ }	 Wn t k
 r^q( n Xt d d ƒ } | j |	 ƒ 8 }
 t j |
 ƒ } | j | d t j | d d ƒ ƒWd  QX| | f Vq÷n/t j | ƒ r÷t j | ƒ } x| j ƒ  D]ô }	 t j |	 j ƒ } | sqön  | j d ƒ } d | k rt | j	 d d ƒ Œ  } | d k rn| j
 | k rnqön  | j | j
 ƒ n d  } t d d ƒ } | j |	 ƒ 8 }
 t j |
 ƒ } | j | d t j | |	 j ƒ ƒWd  QX| | f VqöWWd  QXn  x÷ t j  t! j" t j | d d ƒ ƒ t! j" t j | d d ƒ ƒ ƒ D]³ }  t j# t j t j$ |  ƒ ƒ ƒ d } d | k r½t | j	 d d ƒ Œ  } | d k rª| j
 | k rªq:n  | j | j
 ƒ n d  } t d d ƒ } | j |  g ƒ | | f Vq:Wq( Wd  S(   Ns   /\s   .eggt   -i   R0   s   EGG-INFOs   entry_points.txtt
   delimiterst   =s   EGG-INFO/entry_points.txtt   sourcet   dist_versioni   s   *.dist-infos
   *.egg-infoi    (   R3   (   R3   (   R3   (   R3   (%   R(   t   syst   patht   sett   rstript   endswitht   ospt   basenameR.   R   R   t   addt   isdirt   joint   isfileR   t   readt   zipfilet
   is_zipfilet   ZipFilet   getinfot   KeyErrort   opent   iot   TextIOWrappert	   read_filet   infolistt   file_in_zip_patternR'   t   filenameR   t	   itertoolst   chaint   globt   iglobt   splitextt   dirname(   R7   t   repeated_distrot   distro_names_seent   foldert   egg_nameR   t   ep_patht   cpt   zt   infot   ft   fut   zfR+   t   distro_name_version(    (    s*   lib/python2.7/site-packages/entrypoints.pyt   iter_files_distrosu   s€    	(	%%c      	   C   s†   xp t  d | ƒ D]_ \ } } |  | k r | | |  k r | |  | } t j ƒ   t j | | | ƒ SWd QXq q Wt |  | ƒ ‚ d S(   s‡   Find a single entry point.

    Returns an :class:`EntryPoint` object, or raises :exc:`NoSuchEntryPoint`
    if no match is found.
    R7   N(   R`   R   R   R   R,   R   (   R   R   R7   t   configR   R   (    (    s*   lib/python2.7/site-packages/entrypoints.pyt
   get_singleÍ   s     c         C   sF   i  } x9 t  |  d | ƒD]% } | j | k r | | | j <q q W| S(   sw   Find a group of entry points with unique names.

    Returns a dictionary of names to :class:`EntryPoint` objects.
    R7   (   t   get_group_allR   (   R   R7   t   resultt   ep(    (    s*   lib/python2.7/site-packages/entrypoints.pyt   get_group_namedÛ   s
    c         C   s‰   g  } x| t  d | ƒ D]k \ } } |  | k r xP | |  j ƒ  D]; \ } } t j ƒ  ! | j t j | | | ƒ ƒ Wd QXq? Wq q W| S(   sZ   Find all entry points in a group.

    Returns a list of :class:`EntryPoint` objects.
    R7   N(   R`   t   itemsR   R   t   appendR   R,   (   R   R7   Rd   Ra   R   R   R   (    (    s*   lib/python2.7/site-packages/entrypoints.pyRc   æ   s    -t   __main__t   console_scripts(&   R   t
   contextlibR    RP   t	   importlibR   RH   RN   t   os.pathR7   R;   R)   R6   R   RB   t   version_infoR   t	   backportst   compilet   VERBOSER&   RL   t   __version__t	   ExceptionR   R   t   ConfigParserR   t   objectR   R.   R(   R`   Rb   Rf   Rc   R   t   pprint(    (    (    s*   lib/python2.7/site-packages/entrypoints.pyt   <module>   s<   
)	X