o
    i86                     @  s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZddl	m
Z
 ddlmZmZmZmZmZ ddlmZmZmZ ddlmZmZ ddlmZ d	d
lmZ edZejejejej f Z!G dd dej"Z#G dd deZ$G dd dZ%G dd de
Z&dS )    )annotationsN   )AsyncNetworkStream)ConnectionNotAvailableLocalProtocolErrorRemoteProtocolError
WriteErrormap_exceptions)OriginRequestResponse)	AsyncLockAsyncShieldCancellation)Trace   )AsyncConnectionInterfacezhttpcore.http11c                   @  s   e Zd ZdZdZdZdZdS )HTTPConnectionStater   r   r      N)__name__
__module____qualname__NEWACTIVEIDLECLOSED r   r   P/home/kim/smarthome/.venv/lib/python3.10/site-packages/httpcore/_async/http11.pyr   $   s
    r   c                   @  s   e Zd ZdZdZ	dCdDddZdEddZdFddZdFddZdCdGddZ	dHddZ
dId d!Z	dCdJd#d$ZdKd%d&ZdKd'd(ZdLd*d+ZdMd,d-ZdMd.d/ZdMd0d1ZdMd2d3ZdNd5d6ZdNd7d8ZdOd9d:Z			dPdQdAdBZdS )RAsyncHTTP11Connectioni   i  Noriginr
   streamr   keepalive_expiryfloat | NonereturnNonec                 C  sF   || _ || _|| _d | _tj| _t | _d| _	t
jt
j| jd| _d S )Nr   )Zour_roleZmax_incomplete_event_size)_origin_network_stream_keepalive_expiry
_expire_atr   r   _stater   _state_lock_request_counth11
ConnectionZCLIENTMAX_INCOMPLETE_EVENT_SIZE
_h11_state)selfr   r   r    r   r   r   __init__/   s   zAsyncHTTP11Connection.__init__requestr   r   c                   s  |  |jjstd|jj d| j | j4 I d H & | jtjtj	fv r5|  j
d7  _
tj| _d | _nt W d   I d H  n1 I d H sHw   Y  zd|i}zZtdt||4 I d H }| jdi |I d H  W d   I d H  n1 I d H szw   Y  tdt||4 I d H }| jdi |I d H  W d   I d H  n1 I d H sw   Y  W n	 ty   Y nw tdt||4 I d H "}| jdi |I d H \}}}}}||||f|_W d   I d H  n1 I d H sw   Y  | j}	|dks
|jd	krd
|  krdk rn nt|	|}	t||t| ||||	ddW S  tyr }
 zGt 9 tdt|4 I d H }|  I d H  W d   I d H  n1 I d H sNw   Y  W d    |
W d    |
1 sgw   Y  |
d }
~
ww )NzAttempted to send request to z on connection to r   r1   Zsend_request_headersZsend_request_bodyZreceive_response_headerse   s   CONNECT   i,  )http_versionreason_phrasenetwork_stream)statusheaderscontent
extensionsresponse_closedr   )can_handle_requesturlr   RuntimeErrorr$   r)   r(   r   r   r   r*   r   r'   r   r   logger_send_request_headers_send_request_bodyr   _receive_response_headersreturn_valuer%   methodAsyncHTTP11UpgradeStreamr   HTTP11ConnectionByteStreamBaseExceptionr   _response_closed)r/   r1   kwargstracer4   r7   r5   r8   trailing_datar6   excr   r   r   handle_async_requestA   s   ((((
(

,

z*AsyncHTTP11Connection.handle_async_requestc                   sz   |j di }|dd }ttjti tj|j|jj|j	d}W d    n1 s,w   Y  | j
||dI d H  d S )Ntimeoutwrite)rD   targetr8   rN   )r:   getr	   r+   r   r   rD   r=   rP   r8   _send_eventr/   r1   timeoutsrN   eventr   r   r   r@      s   z+AsyncHTTP11Connection._send_request_headersc                   s   |j di }|dd }t|jtjsJ |j2 z3 d H W }tj|d}| j||dI d H  q6 | jt	 |dI d H  d S )NrN   rO   )datarQ   )
r:   rR   
isinstancer   typingAsyncIterabler+   DatarS   EndOfMessage)r/   r1   rU   rN   chunkrV   r   r   r   rA      s   z(AsyncHTTP11Connection._send_request_bodyrV   	h11.EventrN   c                   s4   | j |}|d ur| jj||dI d H  d S d S )NrQ   )r.   sendr%   rO   )r/   rV   rN   Zbytes_to_sendr   r   r   rS      s
   z!AsyncHTTP11Connection._send_event:tuple[bytes, int, bytes, list[tuple[bytes, bytes]], bytes]c           	        s   |j di }|dd }	 | j|dI d H }t|tjrnt|tjr+|jdkr+nqd|j }|j	
 }| jj\}}||j|j||fS )NrN   readTrQ   r2   s   HTTP/)r:   rR   _receive_eventrX   r+   r   ZInformationalResponsestatus_coder4   r8   	raw_itemsr.   rK   reason)	r/   r1   rU   rN   rV   r4   r8   rK   _r   r   r   rB      s    




z/AsyncHTTP11Connection._receive_response_headerstyping.AsyncIterator[bytes]c                 C sb   |j di }|dd }	 | j|dI d H }t|tjr%t|jV  nt|tjtj	fr0d S q)NrN   ra   TrQ   )
r:   rR   rb   rX   r+   r[   bytesrW   r\   ZPAUSEDrT   r   r   r   _receive_response_body   s   z,AsyncHTTP11Connection._receive_response_bodyh11.Event | type[h11.PAUSED]c                   s   	 t tjti | j }W d    n1 sw   Y  |tju rG| jj| j|dI d H }|dkr@| jj	tj
kr@d}t|| j| n|S q)NTrQ       z/Server disconnected without sending a response.)r	   r+   r   r.   Z
next_eventZ	NEED_DATAr%   ra   READ_NUM_BYTEStheir_stateZSEND_RESPONSEZreceive_data)r/   rN   rV   rW   msgr   r   r   rb      s   
z$AsyncHTTP11Connection._receive_eventc              	     s   | j 4 I d H E | jjtju r0| jjtju r0tj| _| j	  | j
d ur/t }|| j
 | _n|  I d H  W d   I d H  d S W d   I d H  d S 1 I d H sSw   Y  d S N)r)   r.   Z	our_stater+   ZDONErm   r   r   r(   Zstart_next_cycler&   time	monotonicr'   aclose)r/   nowr   r   r   rH      s   

. z&AsyncHTTP11Connection._response_closedc                   s   t j| _| j I d H  d S ro   )r   r   r(   r%   rr   r/   r   r   r   rr      s   zAsyncHTTP11Connection.acloseboolc                 C  s
   || j kS ro   )r$   r/   r   r   r   r   r<     s   
z(AsyncHTTP11Connection.can_handle_requestc                 C     | j tjkS ro   r(   r   r   rt   r   r   r   is_available  s   z"AsyncHTTP11Connection.is_availablec                 C  s<   t  }| jd uo|| jk}| jtjko| jd}|p|S )NZis_readable)rp   rq   r'   r(   r   r   r%   get_extra_info)r/   rs   Zkeepalive_expiredZserver_disconnectedr   r   r   has_expired  s   
z!AsyncHTTP11Connection.has_expiredc                 C  rw   ro   rx   rt   r   r   r   is_idle      zAsyncHTTP11Connection.is_idlec                 C  rw   ro   )r(   r   r   rt   r   r   r   	is_closed#  r}   zAsyncHTTP11Connection.is_closedstrc                 C  s$   t | j}|d| jj d| j S )Nz, HTTP/1.1, , Request Count: )r   r$   r(   namer*   rv   r   r   r   info&  s
   
zAsyncHTTP11Connection.infoc              	   C  s6   | j j}t| j}d| d|d| jj d| j d	S )N<z [z, r   z]>)	__class__r   r   r$   r(   r   r*   )r/   
class_namer   r   r   r   __repr__-  s   
zAsyncHTTP11Connection.__repr__c                   s   | S ro   r   rt   r   r   r   
__aenter__8  s   z AsyncHTTP11Connection.__aenter__exc_typetype[BaseException] | None	exc_valueBaseException | None	tracebacktypes.TracebackType | Nonec                   s   |   I d H  d S ro   )rr   )r/   r   r   r   r   r   r   	__aexit__;  s   zAsyncHTTP11Connection.__aexit__ro   )r   r
   r   r   r    r!   r"   r#   )r1   r   r"   r   )r1   r   r"   r#   )rV   r^   rN   r!   r"   r#   )r1   r   r"   r`   )r1   r   r"   rg   )rN   r!   r"   rj   r"   r#   )r   r
   r"   ru   )r"   ru   )r"   r   )r"   r   )NNN)r   r   r   r   r   r   r"   r#   )r   r   r   rl   r-   r0   rM   r@   rA   rS   rB   ri   rb   rH   rr   r<   ry   r{   r|   r~   r   r   r   r   r   r   r   r   r   +   s6    

K













r   c                   @  s*   e Zd ZdddZdd
dZdddZdS )rF   
connectionr   r1   r   r"   r#   c                 C  s   || _ || _d| _d S )NF)_connection_request_closed)r/   r   r1   r   r   r   r0   E  s   
z#HTTP11ConnectionByteStream.__init__rg   c                 C s   d| j i}z;tdt| j |4 I d H ! | jjdi |2 z	3 d H W }|V  q6 W d   I d H  W d S 1 I d H s:w   Y  W d S  tyj } zt  |  I d H  W d    |1 s_w   Y  |d }~ww )Nr1   Zreceive_response_bodyr   )r   r   r?   r   ri   rG   r   rr   )r/   rI   r]   rL   r   r   r   	__aiter__J  s"   
2
z$HTTP11ConnectionByteStream.__aiter__c              	     sj   | j s3d| _ tdt| j4 I d H  | j I d H  W d   I d H  d S 1 I d H s,w   Y  d S d S )NTr;   )r   r   r?   r   r   rH   rt   r   r   r   rr   X  s   .z!HTTP11ConnectionByteStream.acloseN)r   r   r1   r   r"   r#   )r"   rg   r   )r   r   r   r0   r   rr   r   r   r   r   rF   D  s    

rF   c                   @  sR   e Zd Zd ddZd!d"ddZd!d#ddZd$ddZ				d%d&ddZd'ddZd	S )(rE   r   r   leading_datarh   r"   r#   c                 C  s   || _ || _d S ro   )_stream_leading_data)r/   r   r   r   r   r   r0   `  s   
z!AsyncHTTP11UpgradeStream.__init__N	max_bytesintrN   r!   c                   s>   | j r| j d | }| j |d  | _ |S | j||I d H S ro   )r   r   ra   )r/   r   rN   bufferr   r   r   ra   d  s   zAsyncHTTP11UpgradeStream.readr   c                   s   | j ||I d H  d S ro   )r   rO   )r/   r   rN   r   r   r   rO   l  s   zAsyncHTTP11UpgradeStream.writec                   s   | j  I d H  d S ro   )r   rr   rt   r   r   r   rr   o  s   zAsyncHTTP11UpgradeStream.aclosessl_contextssl.SSLContextserver_hostname
str | Nonec                   s   | j |||I d H S ro   )r   	start_tls)r/   r   r   rN   r   r   r   r   r  s   z"AsyncHTTP11UpgradeStream.start_tlsr   r   
typing.Anyc                 C  s   | j |S ro   )r   rz   )r/   r   r   r   r   rz   z  r}   z'AsyncHTTP11UpgradeStream.get_extra_info)r   r   r   rh   r"   r#   ro   )r   r   rN   r!   r"   rh   )r   rh   rN   r!   r"   r#   r   )NN)r   r   r   r   rN   r!   r"   r   )r   r   r"   r   )	r   r   r   r0   ra   rO   rr   r   rz   r   r   r   r   rE   _  s    

rE   )'
__future__r   enumloggingsslrp   typesrY   r+   Z_backends.baser   _exceptionsr   r   r   r   r	   Z_modelsr
   r   r   Z_synchronizationr   r   _tracer   Z
interfacesr   	getLoggerr?   Unionr[   r\   ZH11SendEventIntEnumr   r   rF   rE   r   r   r   r   <module>   s6    
  