U
    bY$                     @   s*  d dl mZmZmZmZ d dlZd dlmZmZ d dl	m
Z
mZmZ d dlZd dlZddlmZmZmZmZmZm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 d
dlm Z  d
dl!m"Z" d
dl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ee+Z,dd Z-e"ddddZ.dd Z/G dd de0Z1dS )    )absolute_importdivisionprint_functionunicode_literalsN)DEBUG	getLogger)basenameexistsjoin   )ConnectionError	HTTPErrorInsecureRequestWarningInvalidSchemaSSLErrorRequestsProxyError)CondaSession   )rm_rf   )
CondaError)dals)	stringify)context)time_recorder)BasicClobberErrorCondaDependencyErrorCondaHTTPErrorCondaSSLErrorChecksumMismatchErrormaybe_raise
ProxyErrorc                   C   s   t dt d S )Nignore)warningssimplefilterr    r%   r%   Alib/python3.8/site-packages/conda/gateways/connection/download.pydisable_ssl_verify_warning"   s    r'   downloadc                 C   s  t |rtt|| tt tjs&t  zTtjtjf}t }|j	| d|j
|d}ttrltt|dd |  t|j	dd}	d  }
 }}|rtd}
d}|}n|r|rtdnd }
d}|}d}zt|d	}d}|d
D ]}|j }z|| W n8 tk
r< } zd}t|||jdW 5 d }~X Y nX |
oL|
| |t|7 }|	rd|  krt|	krn q|r|||	  qW 5 Q R X |	r||	krtd}t|| ||	|dW nD tt fk
r } z |jdkrtd|   W 5 d }~X Y nX |r@|
! }||kr@td|| || t"| |||||d k	rx|}||krxtd| || t"| |d||W n4 t#k
r   t$ Y n t%k
r } z&dt&|krtd}t'|n W 5 d }~X Y n t(k
rL } zPzdd l)}W n* t*k
r&   t+td| dY nX t+td| dW 5 d }~X Y nf t,t-fk
r } zBtd}t.|| t/|j0dd t/|j0dd t/|j0dd |j0|dW 5 d }~X Y nX d S )NTstreamproxiestimeout   Zcontent_max_lenzContent-Lengthr   sha256md5wbi @  z5Failed to write to %(target_path)s
  errno: %(errno)d)target_patherrnoa  
                Downloaded bytes did not match Content-Length
                  url: %(url)s
                  target_path: %(target_path)s
                  Content-Length: %(content_length)d
                  downloaded bytes: %(downloaded_bytes)d
                )urlr2   content_lengthZdownloaded_bytesh   z%s, trying againz'%s mismatch for download: %s (%s != %s)z)size mismatch for download: %s (%s != %s)sizeSOCKSQ  
                Requests has identified that your current working environment is configured
                to use a SOCKS proxy, but pysocks is not installed.  To proceed, remove your
                proxy configuration, run `conda install pysocks`, and then you can re-enable
                your proxy configuration.
                z
                    OpenSSL appears to be unavailable on this machine. OpenSSL is required to
                    download and install packages.

                    Exception: z
                    z}
                    Encountered an SSL error. Most likely a certificate verification issue.

                    Exception: z
        An HTTP error occurred when trying to retrieve this URL.
        HTTP errors are often intermittent, and a simple retry will get you on your way.
        status_codereasonelapsedZ	caused_by)1r	   r    r   r   
ssl_verifyr'   remote_connect_timeout_secsremote_read_timeout_secsr   getr+   logisEnabledForr   debugr   raise_for_statusintZheadershashlibnewopenZiter_contentrawtellwriteIOErrorr   r3   updatelenr   OSErrorZ	hexdigestr   r   r!   r   strr   r   sslImportErrorr   r   r   r   getattrresponse)r4   Ztarget_full_pathr0   r/   r7   Zprogress_update_callbackr,   sessionZrespr5   Zchecksum_builderZchecksum_typeZchecksumZsize_builderZfhZstreamed_byteschunkemessageZactual_checksumZactual_sizerR   help_messager%   r%   r&   r(   &   s    


"

       




c                 C   s8  t jst  zNt jt jf}t }|j| d|j|d}t	t
rPtt|dd |  W n tk
rt   t Y n tk
r } z$dt|krtd}t|n W 5 d }~X Y n~ tttfk
r0 } zXt|jdd }|dkrtd	}ntd
}t|| |t|jdd t|jdd |j|dW 5 d }~X Y nX |jS )NTr)   r-   r.   r8   r9   r:   i  zv
            An HTTP error occurred when trying to retrieve this URL.
            The URL does not exist.
            z
            An HTTP error occurred when trying to retrieve this URL.
            HTTP errors are often intermittent, and a simple retry will get you on your way.
            r;   r<   r=   )r   r>   r'   r?   r@   r   rA   r+   rB   rC   r   rD   r   rE   r   r!   r   rQ   r   r   r   r   r   rT   rU   r   text)r4   r,   rV   rU   rX   rY   r:   rZ   r%   r%   r&   download_text   s<    



r\   c                   @   s*   e Zd ZdZd
ddZdd Zdd Zd	S )TmpDownloadz;
    Context manager to handle downloads to a tempfile
    Tc                 C   s   || _ || _d S N)r4   verbose)selfr4   r_   r%   r%   r&   __init__   s    zTmpDownload.__init__c                 C   sF   d| j krd | _| j S t | _t| jt| j }t| j | |S d S )Nz://)r4   tmp_dirtempfileZmkdtempr
   r   r(   )r`   Zdstr%   r%   r&   	__enter__   s    

zTmpDownload.__enter__c                 C   s   | j rt| j  d S r^   )rb   r   )r`   exc_type	exc_value	tracebackr%   r%   r&   __exit__   s    zTmpDownload.__exit__N)T)__name__
__module____qualname____doc__ra   rd   rh   r%   r%   r%   r&   r]      s   
r]   )NNNN)2Z
__future__r   r   r   r   rG   Zloggingr   r   os.pathr   r	   r
   rc   r#    r   r   r   r   r   r   rV   r   Zdisk.deleter   r   Z
auxlib.ishr   Zauxlib.logzr   Zbase.contextr   Z	common.ior   
exceptionsr   r   r   r   r   r    r!   ri   rB   r'   r(   r\   objectr]   r%   r%   r%   r&   <module>   s2    $
        -