o
    @Zc*                     @   s   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	m
Z
mZ d dlZddlmZmZmZ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 eejej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&dS )    N)TracebackType)IterableIteratorListOptionalTupleTypeUnion   )ConnectionNotAvailableLocalProtocolErrorRemoteProtocolErrormap_exceptions)OriginRequestResponse)Lock)Trace)NetworkStream   )ConnectionInterfacec                   @   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    K/var/www/chikooza/env/lib/python3.10/site-packages/httpcore/_sync/http11.pyr      s
    r   c                   @   s  e Zd ZdZ	d3dededee ddfddZd	e	de
fd
dZd	e	ddfddZd	e	ddfddZ	d3dedee ddfddZd	e	deeeeeeeef  f fddZd	e	dee fddZd3dee defddZd4ddZd4ddZdedefddZdefd d!Zdefd"d#Zdefd$d%Zdefd&d'Zde fd(d)Z!de fd*d+Z"d5d,d-Z#			d6d.ee$e%  d/ee% d0ee& ddfd1d2Z'dS )7HTTP11Connectioni   Noriginstreamkeepalive_expiryreturnc                 C   sB   || _ || _|| _d | _tj| _t | _d| _	t
jt
jd| _d S )Nr   )our_role)_origin_network_stream_keepalive_expiry
_expire_atr   r   _stater   _state_lock_request_counth11
ConnectionCLIENT
_h11_state)selfr#   r$   r%   r    r    r!   __init__(   s   zHTTP11Connection.__init__requestc           	      C   s  |  |jjstd|jj d| j | j# | jtjtj	fv r0|  j
d7  _
tj| _d | _nt W d    n1 s=w   Y  zzd|i}td||}| jdi | W d    n1 s`w   Y  td||}| jdi | W d    n1 s~w   Y  td||}| jdi |\}}}}||||f|_W d    n1 sw   Y  t||t| |||| jdd	W S  ty } ztd
|}|   W d    |1 sw   Y  |d }~ww )NzAttempted to send request to z on connection to r   r5   zhttp11.send_request_headerszhttp11.send_request_bodyzhttp11.receive_response_headers)http_versionreason_phrasenetwork_stream)statusheaderscontent
extensionshttp11.response_closedr    )can_handle_requesturlr#   RuntimeErrorr(   r-   r,   r   r   r   r.   r   r+   r   r   _send_request_headers_send_request_body_receive_response_headersreturn_valuer   HTTP11ConnectionByteStreamr)   BaseException_response_closed)	r3   r5   kwargstracer6   r9   r7   r:   excr    r    r!   handle_request7   sp   


zHTTP11Connection.handle_requestc                 C   sr   |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 d S )Ntimeoutwrite)methodtargetr:   rL   )r<   getr   r/   r   r   rN   r?   rO   r:   _send_eventr3   r5   timeoutsrL   eventr    r    r!   rA   m   s   z&HTTP11Connection._send_request_headersc                 C   sj   |j di }|dd }t|jtsJ |jD ]}tj|d}| j||d qt }| j||d d S )NrL   rM   )datarP   )	r<   rQ   
isinstancer$   r   r/   DatarR   EndOfMessage)r3   r5   rT   rL   chunkrU   r    r    r!   rB   y   s   
z#HTTP11Connection._send_request_bodyrU   rL   c                 C   s    | j |}| jj||d d S )NrP   )r2   sendr)   rM   )r3   rU   rL   bytes_to_sendr    r    r!   rR      s   zHTTP11Connection._send_eventc                 C   s\   |j di }|dd }	 | j|d}t|tjrnqd|j }|j }||j	|j
|fS )NrL   readTrP   s   HTTP/)r<   rQ   _receive_eventrW   r/   r   r6   r:   	raw_itemsstatus_codereason)r3   r5   rT   rL   rU   r6   r:   r    r    r!   rC      s   

z*HTTP11Connection._receive_response_headersc                 c   s\    |j di }|dd }	 | j|d}t|tjr"t|jV  nt|tjtj	fr-d S q)NrL   r]   TrP   )
r<   rQ   r^   rW   r/   rX   bytesrV   rY   PAUSEDrS   r    r    r!   _receive_response_body   s   z'HTTP11Connection._receive_response_bodyc                 C   s   	 t tjti | j }W d    n1 sw   Y  |tju rC| jj| j|d}|dkr<| jj	tj
kr<d}t|| j| n|S q)NTrP       z/Server disconnected without sending a response.)r   r/   r   r2   
next_event	NEED_DATAr)   r]   READ_NUM_BYTEStheir_stateSEND_RESPONSEreceive_data)r3   rL   rU   rV   msgr    r    r!   r^      s   
zHTTP11Connection._receive_eventc                 C   s   | j < | jjtju r+| jjtju r+tj| _| j	  | j
d ur*t }|| j
 | _n|   W d    d S W d    d S 1 sBw   Y  d S N)r-   r2   	our_stater/   DONEri   r   r   r,   start_next_cycler*   time	monotonicr+   close)r3   nowr    r    r!   rG      s   


" z!HTTP11Connection._response_closedc                 C   s   t j| _| j  d S rm   )r   r   r,   r)   rs   r3   r    r    r!   rs      s   zHTTP11Connection.closec                 C   s
   || j kS rm   )r(   r3   r#   r    r    r!   r>      s   
z#HTTP11Connection.can_handle_requestc                 C      | j tjkS rm   r,   r   r   ru   r    r    r!   is_available   s   zHTTP11Connection.is_availablec                 C   s<   t  }| jd uo|| jk}| jtjko| jd}|p|S )Nis_readable)rq   rr   r+   r,   r   r   r)   get_extra_info)r3   rt   keepalive_expiredserver_disconnectedr    r    r!   has_expired   s   
zHTTP11Connection.has_expiredc                 C   rw   rm   rx   ru   r    r    r!   is_idle      zHTTP11Connection.is_idlec                 C   rw   rm   )r,   r   r   ru   r    r    r!   	is_closed   r   zHTTP11Connection.is_closedc                 C   s$   t | j}|d| jj d| j S )Nz, HTTP/1.1, , Request Count: )strr(   r,   namer.   rv   r    r    r!   info   s
   
zHTTP11Connection.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.   )r3   
class_namer#   r    r    r!   __repr__  s   
zHTTP11Connection.__repr__c                 C   s   | S rm   r    ru   r    r    r!   	__enter__  s   zHTTP11Connection.__enter__exc_type	exc_value	tracebackc                 C   s   |    d S rm   )rs   )r3   r   r   r   r    r    r!   __exit__  s   zHTTP11Connection.__exit__rm   r&   N)r&   r"   )NNN)(r   r   r   rh   r   r   r   floatr4   r   r   rK   rA   rB   H11EventrR   r   rb   intr   rC   r   rd   r^   rG   rs   boolr>   ry   r~   r   r   r   r   r   r   r   rF   r   r   r    r    r    r!   r"   %   sh    
6






r"   c                   @   s>   e Zd ZdededdfddZdee fddZdd	d
Z	dS )rE   
connectionr5   r&   Nc                 C   s   || _ || _d| _d S )NF)_connection_request_closed)r3   r   r5   r    r    r!   r4     s   
z#HTTP11ConnectionByteStream.__init__c              
   c   s    d| j i}z+td| j | | jjdi |D ]}|V  qW d    W d S 1 s*w   Y  W d S  tyC } z|   |d }~ww )Nr5   zhttp11.receive_response_bodyr    )r   r   r   rd   rF   rs   )r3   rH   rZ   rJ   r    r    r!   __iter__!  s   
&z#HTTP11ConnectionByteStream.__iter__c                 C   sL   | j s$d| _ td| j | j  W d    d S 1 sw   Y  d S d S )NTr=   )r   r   r   r   rG   ru   r    r    r!   rs   .  s   "z HTTP11ConnectionByteStream.closer   )
r   r   r   r"   r   r4   r   rb   r   rs   r    r    r    r!   rE     s    rE   )'enumrq   typesr   typingr   r   r   r   r   r   r	   r/   _exceptionsr   r   r   r   _modelsr   r   r   _synchronizationr   _tracer   backends.baser   
interfacesr   InformationalResponserX   rY   ConnectionClosedr   IntEnumr   r"   rE   r    r    r    r!   <module>   s0    $
 w