U ��.e�=�@s�dZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z m Z m Z ddlmZddlmZmZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd l m!Z!dd l"m#Z#m$Z$m%Z%ddl&m'Z'ddl(m)Z)ddl*m+Z+m,Z,m-Z-ddl.m/Z/ddl0m1Z1e/�rhddl2m3Z3m4Z4m5Z5m6Z6m7Z7ddl8m9Z9e6e:e:e5e7e;e:ffZ�Z?e j@ded�ddddddgZAdZBdd�ZCd d!�ZDGd"d#�d#e�ZEGd$d%�d%e�ZFGd&d'�d'e jG�ZHdS)(zhPipSession and supporting code, containing all pip-specific network request configuration and behavior. �N)�requests�six�urllib3)�CacheControlAdapter)� BaseAdapter� HTTPAdapter)�Response)�CaseInsensitiveDict)�parse)�InsecureRequestWarning)� __version__)�MultiDomainBasicAuth)� SafeFileCache)�HAS_TLS� ipaddress�ssl)�check_path_owner)�libc_ver)�build_url_from_netloc�get_installed_version� parse_netloc)�MYPY_CHECK_RUNNING)� url_to_path)�Iterator�List�Optional�Tuple�Union)�Link�ignore)�category)Zhttps�*r!)r!Z localhostr!)r!z 127.0.0.0/8r!)r!z::1/128r!)�filer!N)Zsshr!r!)Z BUILD_BUILDIDZBUILD_IDZCIZ PIP_IS_CIcCstdd�tD��S)z? Return whether it looks like pip is running under CI. css|]}|tjkVqdS�N)�os�environ)�.0�name�r(�A/usr/lib/python3.8/site-packages/pip/_internal/network/session.py� asz looks_like_ci..)�any�CI_ENVIRONMENT_VARIABLESr(r(r(r)� looks_like_ciYsr-cCsBdtd�t��dt��id�}|dddkr@t��|dd<n�|dddkr�tjjd krltjd d �}ntj}d �d d�|D��|dd<nB|dddkr�t��|dd<n |dddkr�t��|dd<tj�d��rHddl m }t t dd�t dddg|�����}t t dd�t ddgt����}|�r:||d<|�rH||d<tj�d��rzt��d�rzdt��dd�|d<t���r�t��|�di�d<t���r�t��|�di�d<t���r�t��|d<t�r�tj|d <td!�}|d k �r�||d"<t��rd#nd |d$<tj�d%�}|d k �r(||d&<d'j|tj|d(d#d)�d*�S)+z6 Return a string representing the user agent. �pip)r'�versionr')Z installer�python�implementationr1ZCPythonr/ZPyPy�finalN��.cSsg|] }t|��qSr()�str)r&�xr(r(r)� xszuser_agent..ZJythonZ IronPythonZlinuxr)�distrocSs|dS�N�r(�r6r(r(r)���zuser_agent..�idcSs|dSr9r(r;r(r(r)r<�r=�lib�libcr8�darwinZmacOS�system�releaseZcpuZopenssl_versionZ setuptools�setuptools_versionTZciZPIP_USER_AGENT_USER_DATA� user_dataz9{data[installer][name]}/{data[installer][version]} {json})�,�:)Z separatorsZ sort_keys)�data�json) r �platformZpython_versionZpython_implementation�sys�pypy_version_info� releaselevel�join� startswith� pip._vendorr8�dict�filter�zipZlinux_distributionrZmac_verrB� setdefaultrC�machinerrZOPENSSL_VERSIONrr-r$r%�get�formatrI�dumps)rHrLr8Z distro_infosr@rDrEr(r(r)� user_agentdsl��  � ��        �rYc@seZdZddd�Zdd�ZdS)�LocalFSAdapterNc Cs�t|j�}t�}d|_|j|_zt�|�} Wn.tk rZ} zd|_| |_W5d} ~ XYnPXtj j | j dd�} t � |�dp~d} t| | j| d��|_t|d�|_|jj|_|S) N��i�T)Zusegmtrz text/plain)z Content-TypezContent-Lengthz Last-Modified�rb)r�urlrZ status_coder$�stat�OSError�raw�emailZutilsZ formatdate�st_mtime� mimetypesZ guess_typer �st_size�headers�open�close) �self�request�stream�timeout�verify�certZproxies�pathnameZrespZstats�excZmodifiedZ content_typer(r(r)�send�s& �   zLocalFSAdapter.sendcCsdSr#r()rhr(r(r)rg�szLocalFSAdapter.close)NNNNN)�__name__� __module__� __qualname__rprgr(r(r(r)rZ�s� rZc@seZdZdd�ZdS)�InsecureHTTPAdaptercCsd|_d|_dS)NZ CERT_NONE)Z cert_reqsZca_certs)rhZconnr]rlrmr(r(r)� cert_verify�szInsecureHTTPAdapter.cert_verifyN)rqrrrsrur(r(r(r)rt�srtcsFeZdZdZ�fdd�Zd dd�Zdd�Zd d �Z�fd d �Z�Z S)� PipSessionNc s|�dd�}|�dd�}|�dg�}|�dd�}tt|�j||�g|_t�|jd<t|d�|_t j |d d d d gd d�}|r�t |�s�t � d|�d}|r�tt|�|d�}n t|d�}t|d�}||_|�d|�|�d|�|�dt��|D]} |j| dd�q�dS)zj :param trusted_hosts: Domains not to emit warnings for when not using HTTPS. �retriesr�cacheN� trusted_hosts� index_urlsz User-Agent)rzi�i�iig�?)ZtotalZstatus_forcelistZbackoff_factorz�The directory '%s' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.)rx� max_retries)r{zhttps://zhttp://zfile://T)�suppress_logging)�pop�superrv�__init__�pip_trusted_originsrYrer ZauthrZRetryr�logger�warningrrrrt�_insecure_adapter�mountrZ�add_trusted_host) rh�args�kwargsrwrxryrzZsecure_adapterZinsecure_adapter�host�� __class__r(r)r�s@       � ��    zPipSession.__init__FcCs�|s.d�|�}|dk r$|d�|�7}t�|�t|�}||jkrL|j�|�|�t|�d|j�|ds�|�t|�d|j�dS)z� :param host: It is okay to provide a host that has previously been added. :param source: An optional source string, for logging where the host string came from. zadding trusted host: {!r}Nz (from {})�/r:rG) rWr��inforr��appendr�rr�)rhr��sourcer|�msgZ host_portr(r(r)r�3s     �zPipSession.add_trusted_hostccs<tD] }|Vq|jD] \}}d||dkr.dn|fVqdS)Nr!)�SECURE_ORIGINSr�)rh� secure_originr��portr(r(r)�iter_secure_originsMszPipSession.iter_secure_originsc Cs t�t|��}|j|j|j}}}|�dd�d}|��D]�}|\}}} ||kr\|dkr\qsV              �  O!