Format: application/x-python-code
⬇ Download File (15.6 KB)
   1  o
   2  
   3  7'hh[�@sddlmZddlZddlZddlZddlZddlZddlZddl	Zddl
   4  ZddlZddlZddl
   5  mZddlmZmZmZddlmZmZmZddlmZmZmZddlmZd	d
   6  lmZe�d�Z ddd�Z!Gdd�dej"�Z#Gdd�de�Z$Gdd�d�Z%dS)�)�annotationsN�)�
   7  NetworkStream)�ConnectionNotAvailable�LocalProtocolError�RemoteProtocolError)�Origin�Request�Response)�Lock�	Semaphore�ShieldCancellation)�Trace�)�ConnectionInterfacezhttpcore.http2�requestr	�return�boolcCstdd�|jD��S)Ncss,�|]\}}|��dkp|��dkVqdS)scontent-length�transfer-encodingN��lower��.0�k�v�r�JC:\Users\shubh\Videos\agent\nova\Lib\site-packages\httpcore/_sync/http2.py�	<genexpr>s
   8  ��
   9  �z#has_body_headers.<locals>.<genexpr>)�any�headers)rrrr�has_body_headerss�r c@seZdZdZdZdZdS)�HTTPConnectionStaterr�N)�__name__�
  10  __module__�__qualname__�ACTIVE�IDLE�CLOSEDrrrrr!$sr!c@s2eZdZdZejjdd�Z	dWdXdd�ZdYdd�Z	dZdd�Z
  11  d[dd�Zd[dd�Zd\dd�Z
  12  d[d d!�Zd]d#d$�Zd^d&d'�Zd_d)d*�Z	dWd`d,d-�Zdad0d1�Zdbd2d3�Zdcd4d5�Zddd7d8�ZdZd9d:�Zded;d<�Zdfd>d?�Zdgd@dA�ZdgdBdC�ZdgdDdE�ZdgdFdG�ZdhdIdJ�ZdhdKdL�ZdidMdN�Z 			djdkdUdV�Z!dS)l�HTTP2Connection�F)Zvalidate_inbound_headersN�originr�streamr�keepalive_expiry�float | NonecCs�||_||_||_tjj|jd�|_tj	|_
  13  d|_d|_t
  14  �|_t
  15  �|_t
  16  �|_t
  17  �|_d|_d|_d|_i|_d|_d|_d|_dS)N)�configrF)�_origin�_network_stream�_keepalive_expiry�h2�
  18  connectionZH2Connection�CONFIG�	_h2_stater!r'�_state�
  19  _expire_at�_request_countr�
  20  _init_lock�_state_lock�
  21  _read_lock�_write_lock�_sent_connection_init�_used_all_stream_ids�_connection_error�_events�_connection_terminated�_read_exception�_write_exception)�selfr+r,r-rrr�__init__.s&�
  22  zHTTP2Connection.__init__rr	rr
  23  cCs�|�|jj�std|jj�d|j����|j�#|jtjtj	fvr0|j
  24  d7_
  25  d|_tj|_nt��Wd�n1s=wY|j
  26  �v|js�z%d|i}tdt||��|jdi|��Wd�n1shwYWn&ty�}zt��
  27  |��Wd�|�1s�wY|�d}~wwd|_d|_|jjj}t|�|_t||j�D]}|j��q�Wd�n1s�wY|j��z|j��}g|j|<Wntj j!y�d|_"|j
  28  d8_
  29  t��wz|||d�}tdt||��|j#||d�Wd�n	1�swYtd	t||��|j$||d�Wd�n	1�s*wYtd
  30  t||��}|j%||d�\}	}
  31  |	|
  32  f|_&Wd�n	1�sPwYt'|	|
  33  t(|||d�d|j)|d
  34  �d�WSt�y�}zMt��*d|i}tdt||��|j*|d�Wd�n	1�s�wYWd�n	1�s�wYt+|tj j,��r�|j-�r�t.|j-��t/|��|�d}~ww)NzAttempted to send request to z on connection to rrZsend_connection_initT�r�	stream_idZsend_request_headersZsend_request_bodyZreceive_response_headers�rHsHTTP/2)�http_versionZnetwork_streamrH)�statusr�content�
  35  extensionsrH�response_closedr)0�can_handle_request�urlr+�RuntimeErrorr0r;r7r!r&r'r9r8rr:r>r�logger�_send_connection_init�
  36  BaseExceptionr
  37  �close�_max_streamsr6�local_settings�max_concurrent_streamsr�_max_streams_semaphore�range�acquireZget_next_available_stream_idrAr3�
  38  exceptionsZNoAvailableStreamIDErrorr?�_send_request_headers�_send_request_body�_receive_response�return_valuer
  39  �HTTP2ConnectionByteStreamr1�_response_closed�
  40  isinstance�
  41  ProtocolErrorrBrr)rErZ
  42  sci_kwargs�excZlocal_settings_max_streams�_rH�kwargs�tracerKrrrr�handle_requestUs���
  43  �����
  44  
  45  �����
  46  ��
  47  
  48  �
  49  ���
  50  ����
  51  ���
  52  
  53  ��zHTTP2Connection.handle_request�NonecCsftjjdtjjjdtjjjdtjjjdid�|j_|jjtjjj	=|j�
  54  �|j�d�|�|�dS)z�
  55          The HTTP/2 connection requires some initial setup before we can start
  56          using individual request/response streams on it.
  57          Tr�dr*)�clientZinitial_values�N)
  58  r3�settingsZSettings�SettingCodesZENABLE_PUSH�MAX_CONCURRENT_STREAMSZMAX_HEADER_LIST_SIZEr6rWZENABLE_CONNECT_PROTOCOLZinitiate_connection�increment_flow_control_window�_write_outgoing_data)rErrrrrS�s
  59  
  60  
  61  �
  62  ��
  63  z%HTTP2Connection._send_connection_initrH�intcCs�t|�}dd�|jD�d}d|jfd|fd|jjfd|jjfgdd�|jD�}|jj|||d	�|jjd
  64  |d�|�	|�dS)
  65  z@
  66          Send the request headers to a given stream ID.
  67          cSs g|]\}}|��dkr|�qS)�hostrrrrr�
  68  <listcomp>�s z9HTTP2Connection._send_request_headers.<locals>.<listcomp>rs:methods
  69  :authoritys:schemes:pathcSs(g|]\}}|��dvr|��|f�qS))rtrrrrrrru�s�
  70  �)�
  71  end_streamrmrIN)
  72  r r�methodrP�scheme�targetr6�send_headersrqrr)rErrHrv�	authorityrrrrr]�s
  73  
  74  
  75  ���z%HTTP2Connection._send_request_headerscCsHt|�sdSt|jtj�sJ�|jD]	}|�|||�q|�||�dS)zP
  76          Iterate over the request body sending it to a given stream ID.
  77          N)r rcr,�typing�Iterable�_send_stream_data�_send_end_stream)rErrH�datarrrr^�s
  78  z"HTTP2Connection._send_request_bodyr��bytescCs\|r,|�||�}tt|�|�}|d|�||d�}}|j�||�|�|�|sdSdS)zI
  79          Send a single chunk of data in one or more data frames.
  80          N)�_wait_for_outgoing_flow�min�lenr6Z	send_datarr)rErrHr�Zmax_flow�
  81  chunk_size�chunkrrrr~	s
  82  �z!HTTP2Connection._send_stream_datacCs|j�|�|�|�dS)z`
  83          Send an empty data frame on on a given stream ID with the END_STREAM flag set.
  84          N)r6rvrr)rErrHrrrrsz HTTP2Connection._send_end_stream�%tuple[int, list[tuple[bytes, bytes]]]cCs�	|�||�}t|tjj�rnqd}g}|jdusJ�|jD]\}}|dkr0t|jddd��}q|�d�s<|�	||f�q||fS)	zT
  85          Return the response status code and headers for a given stream ID.
  86          T��Ns:status�ascii�ignore)�errors�:)
  87  �_receive_stream_eventrcr3�events�ResponseReceivedrrs�decode�
  88  startswith�append)rErrH�event�status_coderrrrrrr_s�
  89  �z!HTTP2Connection._receive_response�typing.Iterator[bytes]ccsv�	|�||�}t|tjj�r1|jdusJ�|jdusJ�|j}|j�||�|�	|�|jVn	t|tjj
  90  �r:dSq)z]
  91          Iterator that returns the bytes of the response body for a given stream ID.
  92          TN)r�rcr3r��DataReceivedZflow_controlled_lengthr�r6Zacknowledge_received_datarr�StreamEnded)rErrHr��amountrrr�_receive_response_body5s�
  93  
  94  �z&HTTP2Connection._receive_response_body�Kh2.events.ResponseReceived | h2.events.DataReceived | h2.events.StreamEndedcCsN|j�|�s|�||�|j�|�r|j|�d�}t|tjj�r%t|��|S)z�
  95          Return the next available event for a given stream ID.
  96  
  97          Will read more data from the network if required.
  98          r)	rA�get�_receive_events�poprcr3r��StreamResetr)rErrHr�rrrr�Gs�z%HTTP2Connection._receive_stream_event�
  99  int | Nonec
 100  Cs>|j��|jdur$|jj}|r|r||kr|jd8_t��t|j��|dus.|j�|�s�|�|�}|D]S}t	|t
 101  jj�r]t
 102  dt|��}|�|�||_Wd�n1sWwYq5t	|t
 103  jjt
 104  jjt
 105  jjt
 106  jjf�r~|j|jvr}|j|j�|�q5t	|t
 107  jj�r�||_q5Wd�n1s�wY|�|�dS)zp
 108          Read some data from the network until we see one or more events
 109          for a given stream ID.
 110          NrZreceive_remote_settings)r<rB�last_stream_idr9rrrAr��_read_incoming_datarcr3r�ZRemoteSettingsChangedrrR�_receive_remote_settings_changer`r�r�r�r�rHr�ZConnectionTerminatedrr)rErrHr�r�r�rhrrrr�VsF
 111  
 112  
 113  �
 114  ����	���'zHTTP2Connection._receive_eventsr��h2.events.RemoteSettingsChangedcCs�|j�tjjj�}|rIt|j|jj	j
 115  �}|rK||jkrM||jkr1|j�
 116  �|jd7_||jks ||jkrO|j��|jd8_||jks6dSdSdSdSdS)Nr)Zchanged_settingsr�r3rnrorpr��	new_valuer6rWrXrVrY�releaser[)rEr�rXZnew_max_streamsrrrr��s(��
 117  
 118  
 119  �
 120  
 121  ��z/HTTP2Connection._receive_remote_settings_changecCs�|j��|j|=|j�W|jr|js|��n3|jtjkrC|jsStj	|_|j
 122  dur4t��}||j
 123  |_
 124  |jr[|��Wd�dSWd�dSWd�dSWd�dSWd�dS1sfwYdS�N)rYr�rAr;rBrUr7r!r&r'r2�time�	monotonicr8r?)rErH�nowrrrrb�s*
 125  
 126  
 127  
 128  ����	"�z HTTP2Connection._response_closedcCs |j��tj|_|j��dSr�)r6Zclose_connectionr!r(r7r1rU�rErrrrU�s
 129  zHTTP2Connection.close�list[h2.events.Event]c
 130  Cs�|j�di�}|�dd�}|jdur|j�z|j�|j|�}|dkr&td��Wnty;}z||_d|_|�d}~ww|j	�
 131  |�}|S)N�timeout�read�zServer disconnectedT)rMr�rCr1r��READ_NUM_BYTESr�	Exceptionr@r6Zreceive_data)rEr�timeoutsr�r�rer�rrrr��s"
 132  �	��
 133  z#HTTP2Connection._read_incoming_datacCs�|j�di�}|�dd�}|j�4|j��}|jdur|j�z	|j�||�Wnty;}z||_d|_	|�d}~wwWd�dS1sGwYdS)Nr��writeT)
 134  rMr�r=r6�data_to_sendrDr1r�r�r@)rErr�r�r�rerrrrr�s 
 135  
 136  	���"�z$HTTP2Connection._write_outgoing_datacCsZ|j�|�}|jj}t||�}|dkr+|�|�|j�|�}|jj}t||�}|dks|S)a
 137          Returns the maximum allowable outgoing flow for a given stream.
 138  
 139          If the allowable flow is zero, then waits on the network until
 140          WindowUpdated frames have increased the flow rate.
 141          https://tools.ietf.org/html/rfc7540#section-6.9
 142          r)r6Zlocal_flow_control_windowZmax_outbound_frame_sizer�r�)rErrHZ
 143  local_flowZmax_frame_sizeZflowrrrr��s
 144  
 145  
 146  �z'HTTP2Connection._wait_for_outgoing_flowrcCs
 147  ||jkSr�)r0�rEr+rrrrO�s
 148  z"HTTP2Connection.can_handle_requestcCs2|jtjko|jo|jo|jjjtj	j
 149  jkSr�)r7r!r(r@r?r6Z
 150  state_machine�stater3r4ZConnectionStater�rrr�is_available�s�����zHTTP2Connection.is_availablecCst��}|jduo
 151  ||jkSr�)r�r�r8)rEr�rrr�has_expired
 152  szHTTP2Connection.has_expiredcC�|jtjkSr�)r7r!r'r�rrr�is_idle�zHTTP2Connection.is_idlecCr�r�)r7r!r(r�rrr�	is_closedr�zHTTP2Connection.is_closed�strcCs$t|j�}|�d|jj�d|j��S)Nz
 153  , HTTP/2, �, Request Count: )r�r0r7�namer9r�rrr�infos
 154  
 155  ��zHTTP2Connection.infoc	Cs6|jj}t|j�}d|�d|�d|jj�d|j�d�	S)N�<z [z, r�z]>)�	__class__r#r�r0r7r�r9)rE�
 156  class_namer+rrr�__repr__s
 157  ��zHTTP2Connection.__repr__cCs|Sr�rr�rrr�	__enter__&szHTTP2Connection.__enter__�exc_type�type[BaseException] | None�	exc_value�BaseException | None�	traceback�types.TracebackType | NonecCs|��dSr�)rU)rEr�r�r�rrr�__exit__)szHTTP2Connection.__exit__r�)r+rr,rr-r.)rr	rr
 158  )rr	rrj)rr	rHrsrrj)rr	rHrsr�r�rrj)rr	rHrsrr�)rr	rHrsrr�)rr	rHrsrr�)rr	rHr�rrj)r�r�rrj)rHrsrrj�rrj)rr	rr�)rr	rHrsrrs)r+rrr)rr)rr�)rr))NNN)r�r�r�r�r�r�rrj)"r#r$r%r�r3r/ZH2Configurationr5rFrirSr]r^r~rr_r�r�r�r�rbrUr�rrr�rOr�r�r�r�r�r�r�r�rrrrr)*sD�
 159  '
 160  h
 161  !
 162  
 163  
 164  
 165  	
 166  
 167  �
 168  0
 169  
 170  
 171  	
 172  
 173  
 174  
 175  
 176  
 177  
 178  
 179  
 180  
 181  �r)c@s*eZdZdd	d
 182  �Zddd
 183  �Zddd�ZdS)rar4r)rr	rHrsrrjcCs||_||_||_d|_dS)NF)�_connection�_request�
 184  _stream_id�_closed)rEr4rrHrrrrF3s
 185  z"HTTP2ConnectionByteStream.__init__r�ccs��|j|jd�}z-tdt|j|��|jj|j|jd�D]}|VqWd�WdS1s.wYWdSty[}zt��
 186  |��Wd�|�1sPwY|�d}~ww)NrGZreceive_response_body)	r�r�rrRr�r�rTr
 187  rU)rErgr�rerrr�__iter__;s&�
 188  ��&�
 189  
 190  ����z"HTTP2ConnectionByteStream.__iter__cCs`|js.d|_d|ji}tdt|j|��|jj|jd�Wd�dS1s'wYdSdS)NTrHrNrI)r�r�rrRr�r�rb)rErgrrrrUKs
 191  "��zHTTP2ConnectionByteStream.closeN)r4r)rr	rHrsrrj)rr�r�)r#r$r%rFr�rUrrrrra2s
 192  
 193  ra)rr	rr)&�
 194  __future__r�enum�loggingr��typesr|Z	h2.configr3Z
 195  h2.connectionZ	h2.eventsZ
 196  h2.exceptionsZh2.settingsZ_backends.baser�_exceptionsrrrZ_modelsrr	r
 197  Z_synchronizationrrr
 198  �_tracerZ
 199  interfacesr�	getLoggerrRr �IntEnumr!r)rarrrr�<module>s4
 200  
 201