ó
j·Ã^c           @   sØ   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 d  d l	 m
 Z
 d  d l m Z d  d l m Z m Z d  d l m Z e r¯ d  d l m Z n  e j e ƒ Z d	 e f d
 „  ƒ  YZ d S(   iÿÿÿÿN(   t   canonicalize_name(   t   parse(   t   PyPI(   t   has_tls(   t   normalize_patht   redact_auth_from_url(   t   MYPY_CHECK_RUNNING(   t   Listt   SearchScopec           B   s8   e  Z d  Z e d „  ƒ Z d „  Z d „  Z d „  Z RS(   sF   
    Encapsulates the locations that pip is configured to search.
    c         C   sÈ   g  } xT | D]L } | j  d ƒ rL t | ƒ } t j j | ƒ rL | } qL n  | j | ƒ q Wt ƒ  sµ xL t j | | ƒ D]5 } t	 j
 | ƒ } | j d k ry t j d ƒ Pqy qy Wn  |  d | d | ƒ S(   sQ   
        Create a SearchScope object after normalizing the `find_links`.
        t   ~t   httpssi   pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.t
   find_linkst
   index_urls(   t
   startswithR   t   ost   patht   existst   appendR   t	   itertoolst   chaint   urllib_parset   urlparset   schemet   loggert   warning(   t   clsR   R   t   built_find_linkst   linkt   new_linkt   parsed(    (    s2   site-packages/pip/_internal/models/search_scope.pyt   create   s"    	c         C   s   | |  _  | |  _ d  S(   N(   R   R   (   t   selfR   R   (    (    s2   site-packages/pip/_internal/models/search_scope.pyt   __init__D   s    	c         C   sú   g  } g  } |  j  rµ |  j  t j g k rµ xf |  j  D][ } t | ƒ } t j | ƒ } | j r‚ | j r‚ t j	 d j
 | ƒ ƒ n  | j | ƒ q4 W| j d j
 d j | ƒ ƒ ƒ n  |  j rí | j d j
 d j d „  |  j Dƒ ƒ ƒ ƒ n  d j | ƒ S(   Ns:   The index url "{}" seems invalid, please provide a scheme.s   Looking in indexes: {}s   , s   Looking in links: {}c         s   s   |  ] } t  | ƒ Vq d  S(   N(   R   (   t   .0t   url(    (    s2   site-packages/pip/_internal/models/search_scope.pys	   <genexpr>k   s    s   
(   R   R   t
   simple_urlR   R   t   urlsplitR   t   netlocR   R   t   formatR   t   joinR   (   R   t   linest   redacted_index_urlsR"   t   redacted_index_urlt   purl(    (    s2   site-packages/pip/_internal/models/search_scope.pyt   get_formatted_locationsM   s$    	c            s/   ‡  f d †  } g  |  j  D] } | | ƒ ^ q S(   s²   Returns the locations found via self.index_urls

        Checks the url_name on the main (first in the list) index and
        use this url_name to produce all locations
        c            sA   t  j |  t j t ˆ  ƒ ƒ ƒ } | j d ƒ s= | d } n  | S(   Nt   /(   t	   posixpathR'   R   t   quoteR    t   endswith(   R"   t   loc(   t   project_name(    s2   site-packages/pip/_internal/models/search_scope.pyt   mkurl_pypi_urlw   s    (   R   (   R   R2   R3   R"   (    (   R2   s2   site-packages/pip/_internal/models/search_scope.pyt   get_index_urls_locationso   s    (   t   __name__t
   __module__t   __doc__t   classmethodR   R    R,   R4   (    (    (    s2   site-packages/pip/_internal/models/search_scope.pyR      s
   )			"(   R   t   loggingR   R.   t   pip._vendor.packaging.utilsR    t   pip._vendor.six.moves.urllibR   R   t   pip._internal.models.indexR   t   pip._internal.utils.compatR   t   pip._internal.utils.miscR   R   t   pip._internal.utils.typingR   t   typingR   t	   getLoggerR5   R   t   objectR   (    (    (    s2   site-packages/pip/_internal/models/search_scope.pyt   <module>   s   