Format: application/x-python-code
⬇ Download File (12.1 KB)
   1  o
   2  
   3  7'hm9�@s>ddlmZddlZddlZddlZddlZddlmZmZddl	m
   4  Z
   5  ddlmZm
   6  Z
   7  mZmZmZmZmZddlmZddlmZdd	lmZd
   8  dlmZd
   9  dlmZd
  10  d
  11  lmZd
  12  dlm Z ej!e"e#fZ$ej%ej&e$e$fZ'ej(e$e$fZ)e�*d�Z+		dddd�Z,Gdd�de�Z-Gdd�de �Z.Gdd�de �Z/dS)�)�annotationsN�)�
  13  SOCKET_OPTION�AsyncNetworkBackend)�
  14  ProxyError)�URL�Origin�Request�Response�
  15  enforce_bytes�enforce_headers�enforce_url)�default_ssl_context)�	AsyncLock)�Trace�)�AsyncHTTPConnection)�AsyncConnectionPool)�AsyncHTTP11Connection)�AsyncConnectionInterfacezhttpcore.proxy�default_headers�+typing.Sequence[tuple[bytes, bytes]] | None�override_headers�return�list[tuple[bytes, bytes]]csT|durgnt|�}|durgnt|�}tdd�|D����fdd�|D�}||S)zh
  16      Append default_headers and override_headers, de-duplicating if a key exists
  17      in both cases.
  18      Ncss�|]	\}}|��VqdS�N��lower��.0�key�value�r"�PC:\Users\shubh\Videos\agent\nova\Lib\site-packages\httpcore/_async/http_proxy.py�	<genexpr>-s�z merge_headers.<locals>.<genexpr>cs$g|]\}}|���vr||f�qSr"rr�Zhas_overrider"r#�
  19  <listcomp>.s
  20  �z!merge_headers.<locals>.<listcomp>)�list�set)rrr"r%r#�
  21  merge_headers#s
  22  �r)csJeZdZdZ														d*d+�fd#d$�
  23  Zd,d(d)�Z�ZS)-�AsyncHTTPProxyzB
  24      A connection pool that sends requests via an HTTP proxy.
  25      N�
  26  TFr�	proxy_url�URL | bytes | str�
  27  proxy_auth�&tuple[bytes | str, bytes | str] | None�
  28  proxy_headers�+HeadersAsMapping | HeadersAsSequence | None�ssl_context�ssl.SSLContext | None�proxy_ssl_context�max_connections�
  29  int | None�max_keepalive_connections�keepalive_expiry�float | None�http1�bool�http2�retries�int�
  30  local_address�
  31  str | None�uds�network_backend�AsyncNetworkBackend | None�socket_options�%typing.Iterable[SOCKET_OPTION] | Noner�Nonec
  32  s�t�j|||||	|
  33  ||||
  34  |d�t|dd�|_|jjdkr&|dur&td��||_||_t|dd�|_	|dur_t
  35  |dd	d�}t
  36  |d
  37  d	d�}|d|}dt�|�}d
  38  |fg|j	|_	dSdS)a�
  39          A connection pool for making HTTP requests.
  40  
  41          Parameters:
  42              proxy_url: The URL to use when connecting to the proxy server.
  43                  For example `"http://127.0.0.1:8080/"`.
  44              proxy_auth: Any proxy authentication as a two-tuple of
  45                  (username, password). May be either bytes or ascii-only str.
  46              proxy_headers: Any HTTP headers to use for the proxy requests.
  47                  For example `{"Proxy-Authorization": "Basic <username>:<password>"}`.
  48              ssl_context: An SSL context to use for verifying connections.
  49                  If not specified, the default `httpcore.default_ssl_context()`
  50                  will be used.
  51              proxy_ssl_context: The same as `ssl_context`, but for a proxy server rather than a remote origin.
  52              max_connections: The maximum number of concurrent HTTP connections that
  53                  the pool should allow. Any attempt to send a request on a pool that
  54                  would exceed this amount will block until a connection is available.
  55              max_keepalive_connections: The maximum number of idle HTTP connections
  56                  that will be maintained in the pool.
  57              keepalive_expiry: The duration in seconds that an idle HTTP connection
  58                  may be maintained for before being expired from the pool.
  59              http1: A boolean indicating if HTTP/1.1 requests should be supported
  60                  by the connection pool. Defaults to True.
  61              http2: A boolean indicating if HTTP/2 requests should be supported by
  62                  the connection pool. Defaults to False.
  63              retries: The maximum number of retries when trying to establish
  64                  a connection.
  65              local_address: Local address to connect from. Can also be used to
  66                  connect using a particular address family. Using
  67                  `local_address="0.0.0.0"` will connect using an `AF_INET` address
  68                  (IPv4), while using `local_address="::"` will connect using an
  69                  `AF_INET6` address (IPv6).
  70              uds: Path to a Unix Domain Socket to use instead of TCP sockets.
  71              network_backend: A backend instance to use for handling network I/O.
  72          )r2r5r7r8r:r<rBr=r?rArDr,��name�httpNzCThe `proxy_ssl_context` argument is not allowed for the http schemer0rr.r�:sBasic sProxy-Authorization)
  73  �super�__init__r
  74  �
  75  _proxy_url�scheme�RuntimeError�_ssl_context�_proxy_ssl_contextr�_proxy_headersr�base64�	b64encode)�selfr,r.r0r2r4r5r7r8r:r<r=r?rArBrD�username�passwordZuserpass�
  76  authorization��	__class__r"r#rL;s>5���
  77  ��zAsyncHTTPProxy.__init__�originrrcCsV|jdkrt|jj|j||j|j|jd�St|jj|j||j	|j|j|j
  78  |j|jd�	S)NrI)�proxy_originr0�
  79  remote_originr8rBr4)	r\r0r]r2r4r8r:r<rB)rN�AsyncForwardHTTPConnectionrMr[rR�_keepalive_expiryZ_network_backendrQ�AsyncTunnelHTTPConnectionrP�_http1�_http2�rUr[r"r"r#�create_connection�s(
  80  ��z AsyncHTTPProxy.create_connection)NNNNr+NNTFrNNNN) r,r-r.r/r0r1r2r3r4r3r5r6r7r6r8r9r:r;r<r;r=r>r?r@rAr@rBrCrDrErrF)r[rrr)�__name__�
  81  __module__�__qualname__�__doc__rLrd�
  82  __classcell__r"r"rYr#r*6s$�Wr*c@s|eZdZ					d+d,dd�Zd-dd�Zd.dd�Zd/dd�Zd0dd �Zd1d!d"�Zd1d#d$�Z	d1d%d&�Z
  83  d1d'd(�Zd0d)d*�ZdS)2r^Nr\rr]r0r1r8r9rBrCrDrEr4r3rrFcCs2t|||||d�|_||_t|dd�|_||_dS)N�r[r8rBrDr2r0rG)r�_connection�
  84  _proxy_originrrR�_remote_origin)rUr\r]r0r8rBrDr4r"r"r#rL�s
  85  �
  86  z#AsyncForwardHTTPConnection.__init__�requestr	r
  87  c�s\�t|j|j�}t|jj|jj|jjt|j	�d�}t
  88  |j|||j|j
  89  d�}|j�|�IdHS)N�rN�host�port�target)�method�url�headers�content�
  90  extensions)r)rRrurrlrNrprq�bytesrtr	rs�streamrwrk�handle_async_request)rUrnrurtZ
  91  proxy_requestr"r"r#rz�s ���z/AsyncForwardHTTPConnection.handle_async_requestr[r;cC�
  92  ||jkSr�rmrcr"r"r#�can_handle_request��
  93  z-AsyncForwardHTTPConnection.can_handle_requestc���|j��IdHdSr�rk�aclose�rUr"r"r#r����z!AsyncForwardHTTPConnection.aclose�strcC�
  94  |j��Sr�rk�infor�r"r"r#r��r~zAsyncForwardHTTPConnection.infocCr�r�rk�is_availabler�r"r"r#r��r~z'AsyncForwardHTTPConnection.is_availablecCr�r�rk�has_expiredr�r"r"r#r��r~z&AsyncForwardHTTPConnection.has_expiredcCr�r�rk�is_idler�r"r"r#r��r~z"AsyncForwardHTTPConnection.is_idlecCr�r�rk�	is_closedr�r"r"r#r��r~z$AsyncForwardHTTPConnection.is_closedcC�d|jj�d|���d�S�N�<z [z]>�rZrer�r�r"r"r#�__repr__��z#AsyncForwardHTTPConnection.__repr__)NNNNN)r\rr]rr0r1r8r9rBrCrDrEr4r3rrF�rnr	rr
  95  �r[rrr;�rrF�rr��rr;�
  96  rerfrgrLrzr}r�r�r�r�r�r�r�r"r"r"r#r^�s �
  97  
  98  
  99  
 100  
 101  
 102  
 103  
 104  r^c@s�eZdZ								d0d1dd�Zd2dd�Zd3dd �Zd4d!d"�Zd5d$d%�Zd6d&d'�Zd6d(d)�Z	d6d*d+�Z
 105  d6d,d-�Zd5d.d/�ZdS)7r`NTFr\rr]r2r3r4r0rr8r9r:r;r<rBrCrDrErrFcCs^t|||	|
 106  |d�|_||_||_||_||_t|dd�|_||_||_	||_
 107  t�|_d|_
 108  dS)Nrjr0rGF)rrkrlrmrPrQrrRr_rarbr�
 109  _connect_lock�
 110  _connected)rUr\r]r2r4r0r8r:r<rBrDr"r"r#rL�s"
 111  �
 112  z"AsyncTunnelHTTPConnection.__init__rnr	r
 113  c
 114  �sL�|j�di�}|�dd�}|j4IdH��|j�sd|jj|jjf}t|jj	|jj|jj|d�}t
 115  d|fdg|j�}td|||jd�}|j
 116  �|�IdH}|jd	ksX|jd
 117  kry|j�dd�}	|	jd
 118  dd�}
 119  d|j|
 120  f}|j
 121  ��IdHt|��|jd}|jdur�t�n|j}
 122  |jr�ddgndg}|
 123  �|�|
 124  |jj�d
 125  �|d�}tdt||�4IdH�}|jdi|��IdH}||_Wd�IdHn1IdHs�wY|�d�}|duo�|��dk}|s�|jr�|js�ddlm}||j||j d�|_
 126  n
 127  t!|j||j d�|_
 128  d|_Wd�IdHn1IdH�swY|j
 129  �|�IdHS)N�timeout�connects%b:%drosHost)sAccepts*/*sCONNECT)rsrtrurw��i+Z
 130  reason_phrase��ascii�ignore)�errorsz%d %sZnetwork_streamzhttp/1.1�h2)r2�server_hostnamer��	start_tls�
 131  ssl_objectr)�AsyncHTTP2Connection)r[ryr8Tr")"rw�getr�r�rmrprqrrlrNr)rRr	rkrz�status�decoder�rrPrrb�set_alpn_protocolsr�loggerr��return_value�get_extra_info�selected_alpn_protocolrar<r�r_r)rUrnZtimeoutsr�rrZconnect_urlZconnect_headersZconnect_requestZconnect_responseZreason_bytesZ
 132  reason_str�msgryr2�alpn_protocols�kwargs�tracer�Zhttp2_negotiatedr�r"r"r#rz	s�����
 133  �
 134  
 135  ��
 136  �(�
 137  
 138  �
 139  ��*�Jz.AsyncTunnelHTTPConnection.handle_async_requestr[cCr{rr|rcr"r"r#r}Yr~z,AsyncTunnelHTTPConnection.can_handle_requestc�rrr�r�r"r"r#r�\r�z AsyncTunnelHTTPConnection.acloser�cCr�rr�r�r"r"r#r�_r~zAsyncTunnelHTTPConnection.infocCr�rr�r�r"r"r#r�br~z&AsyncTunnelHTTPConnection.is_availablecCr�rr�r�r"r"r#r�er~z%AsyncTunnelHTTPConnection.has_expiredcCr�rr�r�r"r"r#r�hr~z!AsyncTunnelHTTPConnection.is_idlecCr�rr�r�r"r"r#r�kr~z#AsyncTunnelHTTPConnection.is_closedcCr�r�r�r�r"r"r#r�nr�z"AsyncTunnelHTTPConnection.__repr__)NNNNTFNN)r\rr]rr2r3r4r3r0rr8r9r:r;r<r;rBrCrDrErrFr�r�r�r�r�r�r"r"r"r#r`�s&�
 140  
 141  P
 142  
 143  
 144  
 145  
 146  
 147  r`)NN)rrrrrr)0�
 148  __future__rrS�logging�ssl�typingZ_backends.baserr�_exceptionsrZ_modelsrrr	r
 149  rrr
 150  �_sslrZ_synchronizationr�_tracer�
 151  connectionrZconnection_poolrZhttp11rZ
 152  interfacesr�Unionrxr�Z	ByteOrStr�Sequence�TupleZHeadersAsSequence�MappingZHeadersAsMapping�	getLoggerr�r)r*r^r`r"r"r"r#�<module>s2$	
 153  �s@