ó
Ð²Ebc           @   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   sD   e  Z d  Z d d g Z e d „  ƒ Z d „  Z d „  Z d „  Z RS(   sF   
    Encapsulates the locations that pip is configured to search.
    t
   find_linkst
   index_urlsc         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.R	   R
   (   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(    (    s>   /tmp/pip-build-UPPWic/pip/pip/_internal/models/search_scope.pyt   create   s"    	c         C   s   | |  _  | |  _ d  S(   N(   R	   R
   (   t   selfR	   R
   (    (    s>   /tmp/pip-build-UPPWic/pip/pip/_internal/models/search_scope.pyt   __init__F   s    	c         C   sô   g  } g  } |  j  r¯ |  j  t j g k r¯ x` |  j  D]U } t | ƒ } t j | ƒ } | j r| | j r| t j	 d | ƒ 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 "%s" 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(    (    s>   /tmp/pip-build-UPPWic/pip/pip/_internal/models/search_scope.pys	   <genexpr>m   s    s   
(   R
   R   t
   simple_urlR   R   t   urlsplitR   t   netlocR   R   R   t   formatt   joinR	   (   R   t   linest   redacted_index_urlsR"   t   redacted_index_urlt   purl(    (    s>   /tmp/pip-build-UPPWic/pip/pip/_internal/models/search_scope.pyt   get_formatted_locationsO   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(    s>   /tmp/pip-build-UPPWic/pip/pip/_internal/models/search_scope.pyt   mkurl_pypi_urly   s    (   R
   (   R   R2   R3   R"   (    (   R2   s>   /tmp/pip-build-UPPWic/pip/pip/_internal/models/search_scope.pyt   get_index_urls_locationsq   s    (	   t   __name__t
   __module__t   __doc__t	   __slots__t   classmethodR   R    R,   R4   (    (    (    s>   /tmp/pip-build-UPPWic/pip/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   (    (    (    s>   /tmp/pip-build-UPPWic/pip/pip/_internal/models/search_scope.pyt   <module>   s   