U
    g3"                     @  s.  U d dl m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
mZ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 ddlmZmZmZmZ ddlmZ ddlmZm Z  ej!rddlm"Z"m#Z# G dd dZ$G dd de$Z%ej!r*e$dd Z&de'd< e%dd Z(de'd< dS )    )annotationsN)HTTPException)ResponseNotReady   )
_TYPE_BODY)HTTPConnectionProxyConfigport_by_scheme)TimeoutError)BaseHTTPResponse)_TYPE_SOCKET_OPTIONS)_DEFAULT_TIMEOUT_TYPE_TIMEOUT)Url   )_RequestError_TimeoutErrorsend_requestsend_streaming_request)EmscriptenRequest)EmscriptenHttpResponseWrapperEmscriptenResponse)BaseHTTPConnectionBaseHTTPSConnectionc                   @  sZ  e Zd ZU ed Zded< ded< ded< ded	< d
ed< d
ed< ded< ded< ded< ded< dZded< dZded< ded< d>edddddddd
d dd
dddd!d"	d#d$Z	d?dd%d&dd!d'd(d)Z
d!d*d+d,Zd@dd-d-d-d.ddd/d&ddddd!d0	d1d2Zd3d*d4d5Zd!d*d6d7Zedd*d8d9Zedd*d:d;Zedd*d<d=ZdS )AEmscriptenHTTPConnectionhttpztyping.ClassVar[int]default_portz%typing.ClassVar[_TYPE_SOCKET_OPTIONS]default_socket_optionszNone | floattimeoutstrhostintport	blocksizetuple[str, int] | Nonesource_addressz_TYPE_SOCKET_OPTIONS | Nonesocket_options
Url | NoneproxyProxyConfig | Noneproxy_configFboolis_verifiedNzbool | Noneproxy_is_verifiedzEmscriptenResponse | None	_responser   i    )r   r%   r#   r&   r(   r*   r   None)	r    r"   r   r%   r#   r&   r(   r*   returnc          	      C  sZ   || _ || _t|tr|nd| _d| _d| _d | _d | _d | _	|| _
d | _d | _d| _d S )Ng        r   TF)r    r"   
isinstancefloatr   scheme_closedr.   r(   r*   r#   r%   r&   r,   )	selfr    r"   r   r%   r#   r&   r(   r*    r6   I/tmp/pip-unpacked-wheel-f4zjg0cl/urllib3/contrib/emscripten/connection.py__init__-   s    z!EmscriptenHTTPConnection.__init__
int | Noneztyping.Mapping[str, str] | None)r    r"   headersr3   r0   c                 C  s   d S Nr6   )r5   r    r"   r:   r3   r6   r6   r7   
set_tunnelH   s    z#EmscriptenHTTPConnection.set_tunnel)r0   c                 C  s   d S r;   r6   r5   r6   r6   r7   connectQ   s    z EmscriptenHTTPConnection.connectT)chunkedpreload_contentdecode_contentenforce_content_lengthz_TYPE_BODY | None)	methodurlbodyr:   r?   r@   rA   rB   r0   c             
   C  s  d| _ |dr.| j d| j d| j | }t||| jr@| jnd|d}	|	| |rv| D ]\}
}|		|
| q`d | _
z&|st|	| _
| j
d krt|	| _
W nZ tk
r } zt|j|W 5 d }~X Y n. tk
r } zt|j|W 5 d }~X Y nX d S )NF/z://:r   )rD   rC   r   rA   )r4   
startswithr3   r    r"   r   r   Zset_bodyitemsZ
set_headerr.   r   r   r   r
   messager   r   )r5   rC   rD   rE   r:   r?   r@   rA   rB   requestkver6   r6   r7   rK   T   s.    



z EmscriptenHTTPConnection.requestr   c                 C  s*   | j d k	r t| j | j jj| dS t d S )N)Zinternal_responserD   
connection)r.   r   rK   rD   r   r=   r6   r6   r7   getresponse|   s    
z$EmscriptenHTTPConnection.getresponsec                 C  s   d| _ d | _d S )NT)r4   r.   r=   r6   r6   r7   close   s    zEmscriptenHTTPConnection.closec                 C  s   | j S )zWhether the connection either is brand new or has been previously closed.
        If this property is True then both ``is_connected`` and ``has_connected_to_proxy``
        properties must be False.
        )r4   r=   r6   r6   r7   	is_closed   s    z"EmscriptenHTTPConnection.is_closedc                 C  s   dS )zLWhether the connection is actively connected to any origin (proxy or target)Tr6   r=   r6   r6   r7   is_connected   s    z%EmscriptenHTTPConnection.is_connectedc                 C  s   dS )zWhether the connection has successfully connected to its proxy.
        This returns False if no proxy is in use. Used to determine whether
        errors are coming from the proxy layer or from tunnelling to the target origin.
        Fr6   r=   r6   r6   r7   has_connected_to_proxy   s    z/EmscriptenHTTPConnection.has_connected_to_proxy)r   )r   Nr   )NN)__name__
__module____qualname__r	   r   __annotations__r,   r-   r   r8   r<   r>   rK   rP   rQ   propertyrR   rS   rT   r6   r6   r6   r7   r      sV   
 "   	  
"(
r   c                      s2  e Zd ZU ed ZdZded< dZded< dZded< dZ	ded	< ded
< ded< ded< ded< dZ
ded< dZded< dZded< ded< dZded< d'eddejdddddddddddddddddddddddddddddddddddddddd d! fd"d#Zd(dddddddddd d$
d%d&Z  ZS ))EmscriptenHTTPSConnectionhttpsNzint | str | None	cert_reqsz
str | Noneca_certsca_cert_dirzNone | str | bytesca_cert_data	cert_filekey_filekey_passwordztyping.Any | Nonessl_contextssl_versionr9   ssl_minimum_versionssl_maximum_versionz"None | str | typing.Literal[False]assert_hostnameassert_fingerprintr   i @  )r   r%   r#   r&   r(   r*   r\   rg   rh   server_hostnamerc   r]   r^   r_   re   rf   rd   r`   ra   rb   r   r!   r   r$   zNone | _TYPE_SOCKET_OPTIONSr'   r)   r/   )r    r"   r   r%   r#   r&   r(   r*   r\   rg   rh   ri   rc   r]   r^   r_   re   rf   rd   r`   ra   rb   r0   c             
     s   t  j||||||||d d| _|| _|| _|| _|| _|| _|
| _|| _	|| _
|| _|| _|oltj|| _|o~tj|| _|| _d | _d| _d S )N)r"   r   r%   r#   r&   r(   r*   r[   T)superr8   r3   ra   r`   rb   rc   ri   rg   rh   rd   re   rf   ospath
expanduserr]   r^   r_   r\   r,   )r5   r    r"   r   r%   r#   r&   r(   r*   r\   rg   rh   ri   rc   r]   r^   r_   re   rf   rd   r`   ra   rb   	__class__r6   r7   r8      s4    
z"EmscriptenHTTPSConnection.__init__)
ra   r`   r\   rb   r]   rg   rh   r^   r_   r0   c
           
      C  s   d S r;   r6   )
r5   ra   r`   r\   rb   r]   rg   rh   r^   r_   r6   r6   r7   set_cert   s    z"EmscriptenHTTPSConnection.set_cert)r   )	NNNNNNNNN)rU   rV   rW   r	   r   r\   rX   r]   r^   r_   rd   re   rf   rh   r   r   r   r8   rp   __classcell__r6   r6   rn   r7   rZ      s^   
 B=         rZ    r   _supports_http_protocolr   _supports_https_protocol))
__future__r   rk   typinghttp.clientr   r   Z_base_connectionr   rO   r   r   r	   
exceptionsr
   responser   Zutil.connectionr   Zutil.timeoutr   r   Zutil.urlr   fetchr   r   r   r   rK   r   r   r   TYPE_CHECKINGr   r   r   rZ   rs   rX   rt   r6   r6   r6   r7   <module>   s.     \