
    f jm9                       d dl mZ d dlZd dlZd dlZd dlZddlmZmZ ddl	m
Z
 ddlmZ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  ej!        e"e#f         Z$ej%        ej&        e$e$f                  Z'ej(        e$e$f         Z) ej*        d          Z+	 	 dddZ, G d de          Z- G d de           Z. G d de           Z/dS )    )annotationsN   )SOCKET_OPTIONAsyncNetworkBackend)
ProxyError)URLOriginRequestResponseenforce_bytesenforce_headersenforce_url)default_ssl_context)	AsyncLock)Trace   )AsyncHTTPConnection)AsyncConnectionPool)AsyncHTTP11Connection)AsyncConnectionInterfacezhttpcore.proxydefault_headers+typing.Sequence[tuple[bytes, bytes]] | Noneoverride_headersreturnlist[tuple[bytes, bytes]]c                    | g nt          |           } |g nt          |          }t          d |D                       fd| D             } | |z   S )zh
    Append default_headers and override_headers, de-duplicating if a key exists
    in both cases.
    Nc              3  D   K   | ]\  }}|                                 V  d S Nlower).0keyvalues      nC:\Users\Terasoftware\OneDrive\Desktop\faahhh\fyndo\fyndo\venv\Lib\site-packages\httpcore/_async/http_proxy.py	<genexpr>z merge_headers.<locals>.<genexpr>-   s.      FFzsEsyy{{FFFFFF    c                J    g | ]\  }}|                                 v||f S  r   )r!   r"   r#   has_overrides      r$   
<listcomp>z!merge_headers.<locals>.<listcomp>.   sD       C99;;l*	e  r&   )listset)r   r   r)   s     @r$   merge_headersr-   #   s     ,Nbbo9N9NO-Qrr4@P;Q;QFF5EFFFFFL   )  O
 ---r&   c                  J     e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 d(d) fd#Zd*d'Z xZS )+AsyncHTTPProxyzB
    A connection pool that sends requests via an HTTP proxy.
    N
   TFr   	proxy_urlURL | bytes | str
proxy_auth&tuple[bytes | str, bytes | str] | Noneproxy_headers+HeadersAsMapping | HeadersAsSequence | Nonessl_contextssl.SSLContext | Noneproxy_ssl_contextmax_connections
int | Nonemax_keepalive_connectionskeepalive_expiryfloat | Nonehttp1boolhttp2retriesintlocal_address
str | Noneudsnetwork_backendAsyncNetworkBackend | Nonesocket_options%typing.Iterable[SOCKET_OPTION] | Noner   Nonec                   t                                          |||||	|
|||||           t          |d          | _        | j        j        dk    r|t          d          || _        || _        t          |d          | _	        |at          |d         d	          }t          |d
         d	          }|dz   |z   }dt          j        |          z   }d|fg| j	        z   | _	        dS dS )a  
        A connection pool for making HTTP requests.

        Parameters:
            proxy_url: The URL to use when connecting to the proxy server.
                For example `"http://127.0.0.1:8080/"`.
            proxy_auth: Any proxy authentication as a two-tuple of
                (username, password). May be either bytes or ascii-only str.
            proxy_headers: Any HTTP headers to use for the proxy requests.
                For example `{"Proxy-Authorization": "Basic <username>:<password>"}`.
            ssl_context: An SSL context to use for verifying connections.
                If not specified, the default `httpcore.default_ssl_context()`
                will be used.
            proxy_ssl_context: The same as `ssl_context`, but for a proxy server rather than a remote origin.
            max_connections: The maximum number of concurrent HTTP connections that
                the pool should allow. Any attempt to send a request on a pool that
                would exceed this amount will block until a connection is available.
            max_keepalive_connections: The maximum number of idle HTTP connections
                that will be maintained in the pool.
            keepalive_expiry: The duration in seconds that an idle HTTP connection
                may be maintained for before being expired from the pool.
            http1: A boolean indicating if HTTP/1.1 requests should be supported
                by the connection pool. Defaults to True.
            http2: A boolean indicating if HTTP/2 requests should be supported by
                the connection pool. Defaults to False.
            retries: The maximum number of retries when trying to establish
                a connection.
            local_address: Local address to connect from. Can also be used to
                connect using a particular address family. Using
                `local_address="0.0.0.0"` will connect using an `AF_INET` address
                (IPv4), while using `local_address="::"` will connect using an
                `AF_INET6` address (IPv6).
            uds: Path to a Unix Domain Socket to use instead of TCP sockets.
            network_backend: A backend instance to use for handling network I/O.
        )r7   r:   r<   r=   r?   rA   rG   rB   rD   rF   rI   r1   name   httpNzCThe `proxy_ssl_context` argument is not allowed for the http schemer5   r   r3   r      :s   Basic s   Proxy-Authorization)super__init__r   
_proxy_urlschemeRuntimeError_ssl_context_proxy_ssl_contextr   _proxy_headersr   base64	b64encode)selfr1   r3   r5   r7   r9   r:   r<   r=   r?   rA   rB   rD   rF   rG   rI   usernamepassworduserpassauthorization	__class__s                       r$   rR   zAsyncHTTPProxy.__init__;   s:   j 	#+&?-+') 	 	
 	
 	
 &ikBBBO"g-	2C	 U   ("3-m/RRR 	$$Z]FFFH$Z]FFFH$1H%(8(B(BBM'7###$D	$ 	$r&   originr	   r   c                   |j         dk    r3t          | j        j        | j        || j        | j        | j                  S t          | j        j        | j        || j	        | j        | j        | j
        | j        | j        	  	        S )NrO   )proxy_originr5   remote_originr=   rG   r9   )	rc   r5   rd   r7   r9   r=   r?   rA   rG   )rT   AsyncForwardHTTPConnectionrS   ra   rX   _keepalive_expiry_network_backendrW   AsyncTunnelHTTPConnectionrV   _http1_http2r[   ra   s     r$   create_connectionz AsyncHTTPProxy.create_connection   s    =G# 	-!_3"1$!%!7 $ 5"&"9    )/- )"5!3++ 1

 

 

 
	
r&   )NNNNr0   NNTFr   NNNN) r1   r2   r3   r4   r5   r6   r7   r8   r9   r8   r:   r;   r<   r;   r=   r>   r?   r@   rA   r@   rB   rC   rD   rE   rF   rE   rG   rH   rI   rJ   r   rK   )ra   r	   r   r   )__name__
__module____qualname____doc__rR   rl   __classcell__)r`   s   @r$   r/   r/   6   s          >BEI-137&(04)-$(6:@D!U$ U$ U$ U$ U$ U$ U$n
 
 
 
 
 
 
 
r&   r/   c                  j    e Zd Z	 	 	 	 	 d!d"dZd#dZd$dZd%dZd&dZd'dZd'dZ	d'dZ
d'dZd&d ZdS )(re   Nrc   r	   rd   r5   r6   r=   r>   rG   rH   rI   rJ   r9   r8   r   rK   c                    t          |||||          | _        || _        t          |d          | _        || _        d S )Nra   r=   rG   rI   r7   r5   rM   )r   _connection_proxy_originr   rX   _remote_origin)r[   rc   rd   r5   r=   rG   rI   r9   s           r$   rR   z#AsyncForwardHTTPConnection.__init__   sW     /-+))
 
 
 *-m/RRR+r&   requestr
   r   c                F  K   t          | j        |j                  }t          | j        j        | j        j        | j        j        t          |j	                            }t          |j        |||j        |j                  }| j                            |           d {V S )NrT   hostporttarget)methodurlheaderscontent
extensions)r-   rX   r   r   rv   rT   r{   r|   bytesr   r
   r~   streamr   ru   handle_async_request)r[   rx   r   r   proxy_requests        r$   r   z/AsyncForwardHTTPConnection.handle_async_request   s       3W_EE%,#(#(%%	
 
 
  >N)
 
 
 %::=IIIIIIIIIr&   ra   r@   c                    || j         k    S r   rw   rk   s     r$   can_handle_requestz-AsyncForwardHTTPConnection.can_handle_request       ,,,r&   c                H   K   | j                                          d {V  d S r   ru   acloser[   s    r$   r   z!AsyncForwardHTTPConnection.aclose   3      %%'''''''''''r&   strc                4    | j                                         S r   ru   infor   s    r$   r   zAsyncForwardHTTPConnection.info       $$&&&r&   c                4    | j                                         S r   ru   is_availabler   s    r$   r   z'AsyncForwardHTTPConnection.is_available       ,,...r&   c                4    | j                                         S r   ru   has_expiredr   s    r$   r   z&AsyncForwardHTTPConnection.has_expired       ++---r&   c                4    | j                                         S r   ru   is_idler   s    r$   r   z"AsyncForwardHTTPConnection.is_idle       '')))r&   c                4    | j                                         S r   ru   	is_closedr   s    r$   r   z$AsyncForwardHTTPConnection.is_closed       ))+++r&   c                L    d| j         j         d|                                  dS N<z [z]>r`   rm   r   r   s    r$   __repr__z#AsyncForwardHTTPConnection.__repr__   (    =4>*==diikk====r&   )NNNNN)rc   r	   rd   r	   r5   r6   r=   r>   rG   rH   rI   rJ   r9   r8   r   rK   rx   r
   r   r   ra   r	   r   r@   r   rK   r   r   r   r@   rm   rn   ro   rR   r   r   r   r   r   r   r   r   r   r(   r&   r$   re   re      s        
 FJ)-6:@D37, , , , ,*J J J J"- - - -( ( ( (' ' ' '/ / / /. . . .* * * *, , , ,> > > > > >r&   re   c                  p    e Zd Z	 	 	 	 	 	 	 	 d&d'dZd(dZd)dZd*dZd+d Zd,d!Zd,d"Z	d,d#Z
d,d$Zd+d%ZdS )-rh   NTFrc   r	   rd   r7   r8   r9   r5   r   r=   r>   r?   r@   rA   rG   rH   rI   rJ   r   rK   c                    t          |||	|
|          | _        || _        || _        || _        || _        t          |d          | _        || _        || _	        || _
        t                      | _        d| _        d S )Nrt   r5   rM   F)r   ru   rv   rw   rV   rW   r   rX   rf   ri   rj   r   _connect_lock
_connected)r[   rc   rd   r7   r9   r5   r=   r?   rA   rG   rI   s              r$   rR   z"AsyncTunnelHTTPConnection.__init__   s     6I-+))6
 6
 6
 *+'"3-m/RRR!1&[[r&   rx   r
   r   c                  K   |j                             di           }|                    dd           }| j        4 d {V  | j        svd| j        j        | j        j        fz  }t          | j        j	        | j        j        | j        j        |          }t          d|fdg| j                  }t          d|||j                   }| j                            |           d {V }|j        d	k     s|j        d
k    rl|j                             dd          }	|	                    dd          }
d|j        |
fz  }| j                                         d {V  t%          |          |j         d         }| j        t)                      n| j        }| j        rddgndg}|                    |           || j        j                            d          |d}t/          dt0          ||          4 d {V } |j        di | d {V }||_        d d d           d {V  n# 1 d {V swxY w Y   |                    d          }|d uo|                                dk    }|s| j        r+| j        s$ddlm}  || j        || j                   | _        n!tC          | j        || j                   | _        d| _        	 d d d           d {V  n# 1 d {V swxY w Y   | j                            |           d {V S )Ntimeoutconnects   %b:%drz   s   Host)s   Accepts   */*s   CONNECT)r~   r   r   r      i+  reason_phraser&   asciiignore)errorsz%d %snetwork_streamzhttp/1.1h2)r7   server_hostnamer   	start_tls
ssl_objectr   )AsyncHTTP2Connection)ra   r   r=   Tr(   )"r   getr   r   rw   r{   r|   r   rv   rT   r-   rX   r
   ru   r   statusdecoder   r   rV   r   rj   set_alpn_protocolsr   loggerr   return_valueget_extra_infoselected_alpn_protocolri   rA   r   rf   r   )r[   rx   timeoutsr   r}   connect_urlconnect_headersconnect_requestconnect_responsereason_bytes
reason_strmsgr   r7   alpn_protocolskwargstracer   http2_negotiatedr   s                       r$   r   z.AsyncTunnelHTTPConnection.handle_async_request	  s     %)))R88,,y$//% I	' I	' I	' I	' I	' I	' I	' I	'? H'!T%8%=t?R?W$XX!-4+0+0!	   #0v&(;<d>Q# # #*%#+&1	# # # *.)9)N)N#* * $ $ $ $ $ $  $*S0 *4D4Kc4Q *#3#>#B#B?TW#X#XL!-!4!4WX!4!N!NJ!%5%<j$IIC*11333333333$S//))45EF
 (+')))* 
 8<{!T*d!3!3..~>>> $/'+':'?'F'Fw'O'O& 
 !fgvFF 0 0 0 0 0 0 0%#36#3#=#=f#=#=======F)/E&0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 $22<@@
d* D"99;;tC ! $  DK ;;;;;;';';#2%)-)?( ( (D$$ (=#2%)-)?( ( (D$ #'&SI	' I	' I	' I	' I	' I	' I	' I	' I	' I	' I	' I	' I	' I	' I	' I	' I	' I	' I	' I	' I	' I	' I	' I	' I	' I	' I	'T %::7CCCCCCCCCs8   F4K5H"K"
H,	,K/H,	0BK
K Kra   c                    || j         k    S r   r   rk   s     r$   r   z,AsyncTunnelHTTPConnection.can_handle_requestY  r   r&   c                H   K   | j                                          d {V  d S r   r   r   s    r$   r   z AsyncTunnelHTTPConnection.aclose\  r   r&   r   c                4    | j                                         S r   r   r   s    r$   r   zAsyncTunnelHTTPConnection.info_  r   r&   c                4    | j                                         S r   r   r   s    r$   r   z&AsyncTunnelHTTPConnection.is_availableb  r   r&   c                4    | j                                         S r   r   r   s    r$   r   z%AsyncTunnelHTTPConnection.has_expirede  r   r&   c                4    | j                                         S r   r   r   s    r$   r   z!AsyncTunnelHTTPConnection.is_idleh  r   r&   c                4    | j                                         S r   r   r   s    r$   r   z#AsyncTunnelHTTPConnection.is_closedk  r   r&   c                L    d| j         j         d|                                  dS r   r   r   s    r$   r   z"AsyncTunnelHTTPConnection.__repr__n  r   r&   )NNNNTFNN)rc   r	   rd   r	   r7   r8   r9   r8   r5   r   r=   r>   r?   r@   rA   r@   rG   rH   rI   rJ   r   rK   r   r   r   r   r   r   r(   r&   r$   rh   rh      s       
 .237EI)-6:@D         >ND ND ND ND`- - - -( ( ( (' ' ' '/ / / /. . . .* * * *, , , ,> > > > > >r&   rh   )NN)r   r   r   r   r   r   )0
__future__r   rY   loggingssltyping_backends.baser   r   _exceptionsr   _modelsr   r	   r
   r   r   r   r   _sslr   _synchronizationr   _tracer   
connectionr   connection_poolr   http11r   
interfacesr   Unionr   r   	ByteOrStrSequenceTupleHeadersAsSequenceMappingHeadersAsMapping	getLoggerr   r-   r/   re   rh   r(   r&   r$   <module>r      sQ   " " " " " "   



  ? ? ? ? ? ? ? ? $ $ $ $ $ $                  ' & & & & & ( ( ( ( ( (       + + + + + + 0 0 0 0 0 0 ) ) ) ) ) ) 0 0 0 0 0 0L$	OFLI1E$FG >)Y"67  
	+	,	, DHDH. . . . .&p
 p
 p
 p
 p
( p
 p
 p
f=> => => => =>!9 => => =>@F> F> F> F> F> 8 F> F> F> F> F>r&   