U
    ƒIÀd#  ã                   @   s„   d dl Z 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 e e¡ZG dd„ dƒZdS )	é    N)ÚList)Úcanonicalize_name)ÚPyPI)Úhas_tls)Únormalize_pathÚredact_auth_from_urlc                   @   sx   e Zd ZdZdddgZeee ee ed dœdd„ƒZ	ee ee eddœd	d
„Z
edœdd„Zeee dœdd„ZdS )ÚSearchScopezF
    Encapsulates the locations that pip is configured to search.
    Ú
find_linksÚ
index_urlsÚno_index)r	   r
   r   Úreturnc                 C   s„   g }|D ]0}|  d¡r.t|ƒ}tj |¡r.|}| |¡ qtƒ svt ||¡D ](}t	j
 |¡}|jdkrLt d¡  qvqL| |||d�S )zQ
        Create a SearchScope object after normalizing the `find_links`.
        ú~Úhttpszipip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.©r	   r
   r   )Ú
startswithr   ÚosÚpathÚexistsÚappendr   Ú	itertoolsÚchainÚurllibÚparseÚurlparseÚschemeÚloggerÚwarning)Úclsr	   r
   r   Úbuilt_find_linksÚlinkÚnew_linkÚparsed© r"   úZ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pip/_internal/models/search_scope.pyÚcreate   s(    

ÿýzSearchScope.createNc                 C   s   || _ || _|| _d S ©Nr   )Úselfr	   r
   r   r"   r"   r#   Ú__init__C   s    zSearchScope.__init__)r   c                 C   s¦   g }g }| j rt| j tjgkrt| j D ]:}t|ƒ}tj |¡}|jsR|jsRt	 
d|¡ | |¡ q"| d d |¡¡¡ | jrœ| d d dd„ | jD ƒ¡¡¡ d |¡S )Nz:The index url "%s" seems invalid, please provide a scheme.zLooking in indexes: {}z, zLooking in links: {}c                 s   s   | ]}t |ƒV  qd S r%   )r   ©Ú.0Úurlr"   r"   r#   Ú	<genexpr>k   s     z6SearchScope.get_formatted_locations.<locals>.<genexpr>Ú
)r
   r   Ú
simple_urlr   r   r   Úurlsplitr   Únetlocr   r   r   ÚformatÚjoinr	   )r&   ÚlinesÚredacted_index_urlsr*   Úredacted_index_urlÚpurlr"   r"   r#   Úget_formatted_locationsM   s,    
þÿÿÿz#SearchScope.get_formatted_locations)Úproject_namer   c                    s(   t t dœ‡fdd„‰ ‡ fdd„| jD ƒS )z²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
        )r*   r   c                    s.   t  | tj tˆ ƒ¡¡}| d¡s*|d }|S )Nú/)Ú	posixpathr1   r   r   Úquoter   Úendswith)r*   Úloc)r7   r"   r#   Úmkurl_pypi_urlw   s     ÿ
z<SearchScope.get_index_urls_locations.<locals>.mkurl_pypi_urlc                    s   g | ]}ˆ |ƒ‘qS r"   r"   r(   )r=   r"   r#   Ú
<listcomp>„   s     z8SearchScope.get_index_urls_locations.<locals>.<listcomp>)Ústrr
   )r&   r7   r"   )r=   r7   r#   Úget_index_urls_locationsp   s    z$SearchScope.get_index_urls_locations)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__Úclassmethodr   r?   Úboolr$   r'   r6   r@   r"   r"   r"   r#   r      s   
û+û
#r   )r   Úloggingr   r9   Úurllib.parser   Útypingr   Zpip._vendor.packaging.utilsr   Úpip._internal.models.indexr   Úpip._internal.utils.compatr   Úpip._internal.utils.miscr   r   Ú	getLoggerrA   r   r   r"   r"   r"   r#   Ú<module>   s   
