
    F/j?^                     h   U 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m	Z	m
Z
 ddlmZ ddlmZmZmZmZmZmZ ddlmZ ddlmZ d	Z e
d
      Z G d de      Z G d de	e         Z G d d      Z G d d      Z G d de      Z e       Z ee   e!d<    G d de	e         Z" G d de"e         Z#y)    N)	AwaitableCallable)FinalGenericTypeVar   )BaseProtocol)_EXC_SENTINELDEFAULT_CHUNK_SIZEBaseTimerContext	TimerNoopset_exception
set_result)LineTooLong)internal_logger)EMPTY_PAYLOAD	EofStreamStreamReader	DataQueue_Tc                       e Zd ZdZy)r   zeof stream indication.N)__name__
__module____qualname____doc__     M/var/www/html/maxservice/venv/lib/python3.12/site-packages/aiohttp/streams.pyr   r      s     r   r   c                   D    e Zd ZdZdeg ee   f   ddfdZddZdefdZ	y)	AsyncStreamIterator	read_funcr"   returnNc                     || _         y Nr!   )selfr"   s     r   __init__zAsyncStreamIterator.__init__&   s	    "r   c                     | S r%   r   r&   s    r   	__aiter__zAsyncStreamIterator.__aiter__)       r   c                    K   	 | j                          d {   }|dk(  rt        |S 7 # t        $ r t        w xY wwNr   )r"   r   StopAsyncIterationr&   rvs     r   	__anext__zAsyncStreamIterator.__anext__,   sG     	%~~''B 9$$	 ( 	%$$	%s    >+ )+ >+ ;>)r#   zAsyncStreamIterator[_T])
r   r   r   	__slots__r   r   r   r'   r*   r1   r   r   r   r    r    "   s9    I#(2y}+<"= #$ # r   r    c                   6    e Zd ZdZddZddZdeeef   fdZ	y)	ChunkTupleAsyncStreamIterator_streamr#   Nc                     || _         y r%   r5   )r&   streams     r   r'   z&ChunkTupleAsyncStreamIterator.__init__:   s	    r   c                     | S r%   r   r)   s    r   r*   z'ChunkTupleAsyncStreamIterator.__aiter__=   r+   r   c                 l   K   | j                   j                          d {   }|dk(  rt        |S 7 w)Nr   F)r6   	readchunkr.   r/   s     r   r1   z'ChunkTupleAsyncStreamIterator.__anext__@   s3     <<))++$$	 ,s   424)r8   r   r#   N)r#   r4   )
r   r   r   r2   r'   r*   tuplebytesboolr1   r   r   r   r4   r4   6   s&    Iud{!3 r   r4   c                   N   e Zd ZdZdZddddedededz  dej                  dz  d	df
d
Z
d	efdZd	ee   fdZded	ee   fdZd	ee   fdZd	efdZd	eeef   fdZded	dfdZd	edz  fdZefdeded	dfdZdeg df   d	dfdZd4dZd	efdZd	efdZ d4dZ!e"d	efd       Z#ded	dfdZ$d5ded ed	efd!Z%d4d"Z&d4d#Z'd$ed	dfd%Z(dd&d'edz  d	efd(Z)	 d6dd)d*ed+edz  d	efd,Z*d7ded	efd-Z+d	efd.Z,d	eeef   fd/Z-ded	efd0Z.d7ded	efd1Z/ded	efd2Z0ded	efd3Z1y)8r   a*  An enhancement of asyncio.StreamReader.

    Supports asynchronous iteration by line, chunk or as available::

        async for line in reader:
            ...
        async for chunk in reader.iter_chunked(1024):
            ...
        async for slice in reader.iter_any():
            ...

    )	_protocol
_low_water_high_water_low_water_chunks_high_water_chunks_loop_size_cursor_http_chunk_splits_buffer_buffer_offset_eof_waiter_eof_waiter
_exception_timer_eof_callbacks_eof_countertotal_bytestotal_compressed_bytesN)timerloopprotocollimitrU   rV   r#   c                   || _         || _        |dz  | _        |t        j                         }t        d|dz        | _        | j                  dz  | _        || _        d| _	        d| _
        d | _        t        j                         | _        d| _        d| _        d | _        d | _        d | _        |
t)               n|| _        g | _        d| _        d| _        d | _        y )N         r   F)rA   rB   rC   asyncioget_event_loopmaxrE   rD   rF   rG   rH   rI   collectionsdequerJ   rK   rL   rM   rN   rO   r   rP   rQ   rR   rS   rT   )r&   rW   rX   rU   rV   s        r   r'   zStreamReader.__init__l   s     " 19<))+D #&a""5!%!8!8A!=

AE1<1B1B1D	488<04%*]ik8:26#r   c                    | j                   j                  g}| j                  r|j                  d| j                  z         | j                  r|j                  d       | j
                  t        k7  r*|j                  d| j
                  | j                  fz         | j                  r|j                  d| j                  z         | j                  r|j                  d| j                  z         ddj                  |      z  S )Nz%d byteseofzlow=%d high=%dzw=%rze=%r<%s> )	__class__r   rG   appendrL   rB   r   rC   rM   rO   join)r&   infos     r   __repr__zStreamReader.__repr__   s    ''(::KK
TZZ/099KK??00KK(DOOT=M=M+NNO<<KK-.??KK01&&r   c                 ,    t        | j                        S r%   )r    readliner)   s    r   r*   zStreamReader.__aiter__   s    "4==11r   nc                 F      j                         t         fd      S )z>Returns an asynchronous iterator that yields chunks of size n.c                  &    j                         S r%   )read)rm   r&   s   r   <lambda>z+StreamReader.iter_chunked.<locals>.<lambda>   s    499Q< r   )set_read_chunk_sizer    r&   rm   s   ``r   iter_chunkedzStreamReader.iter_chunked   s      #"#788r   c                 ,    t        | j                        S )z3Yield all available data as soon as it is received.)r    readanyr)   s    r   iter_anyzStreamReader.iter_any   s    "4<<00r   c                     t        |       S )zYield chunks of data as they are received by the server.

        The yielded objects are tuples
        of (bytes, bool) as returned by the StreamReader.readchunk method.
        )r4   r)   s    r   iter_chunkszStreamReader.iter_chunks   s     -T22r   c                 2    | j                   | j                  fS r%   rB   rC   r)   s    r   get_read_buffer_limitsz#StreamReader.get_read_buffer_limits   s    !1!122r   c                 F    || j                   kD  r|| _         |dz  | _        yy)z7Raise buffer limits to match the consumer's chunk size.rZ   Nr{   rs   s     r   rr   z StreamReader.set_read_chunk_size   s&    tDO 1uD r   c                     | j                   S r%   rO   r)   s    r   	exceptionzStreamReader.exception       r   exc	exc_causec                     || _         | j                  j                          | j                  }|d | _        t	        |||       | j
                  }|d | _        t	        |||       y y r%   )rO   rQ   clearrM   r   rN   r&   r   r   waiters       r   r   zStreamReader.set_exception   si    
 !!#DL&#y1!!#D&#y1 r   callbackc                     | j                   r		  |        y | j                  j                  |       y # t        $ r t        j                  d       Y y w xY wNException in eof callback)rL   	Exceptionr   r   rQ   rg   r&   r   s     r   on_eofzStreamReader.on_eof   sL    99G
 &&x0  G))*EFGs   2 AAc                 |   d| _         | j                  }|d | _        t        |d        | j                  }|d | _        t        |d        | j                  j                  d       | j                  D ]
  }	  |         | j                  j                          y # t        $ r t        j                  d       Y Hw xY w)NTF)resume_parserr   )rL   rM   r   rN   rA   resume_readingrQ   r   r   r   r   )r&   r   cbs      r   feed_eofzStreamReader.feed_eof   s    	DLvt$!!#Dvt$ 	%%E%:%% 	GBG	G 	!!#  G))*EFGs   6BB;:B;c                     | j                   S )z&Return True if  'feed_eof' was called.rL   r)   s    r   is_eofzStreamReader.is_eof   s    yyr   c                 8    | j                   xr | j                   S )z=Return True if the buffer is empty and 'feed_eof' was called.rL   rJ   r)   s    r   at_eofzStreamReader.at_eof   s    yy---r   c                    K   | j                   ry | j                  J | j                  j                         | _        	 | j                   d {    d | _        y 7 # d | _        w xY wwr%   )rL   rN   rF   create_futurer)   s    r   wait_eofzStreamReader.wait_eof   sa     99'''::335	$""""#D ##Ds.   ;A(A AA A(A 	A%%A(c                 J    | j                   | j                  S | j                   S r%   )rT   rS   r)   s    r   total_raw_byteszStreamReader.total_raw_bytes  s&    &&.###***r   datac                 v   t        j                  dt        d       |sy| j                  r0| j                  d   | j                  d | j                  d<   d| _        | xj
                  t        |      z  c_        | xj                  t        |      z  c_        | j                  j                  |       d| _	        y)zDrollback reading some data from stream, inserting it to buffer head.zJunread_data() is deprecated and will be removed in future releases (#3260)rZ   )
stacklevelNr   )
warningswarnDeprecationWarningrK   rJ   rG   lenrH   
appendleftrR   )r&   r   s     r   unread_datazStreamReader.unread_data  s    =		
 "ll1od.A.A.CDDLLO"#D

c$i
D	!%r   sizec                 x   | j                   rJ d       |syt        |      }| xj                  |z  c_        | j                  j	                  |       | xj
                  |z  c_        | j                  }|d | _        t        |d        | j                  | j                  kD  r| j                  j                          y)Nzfeed_data after feed_eofF)rL   r   rG   rJ   rg   rS   rM   r   rC   rA   pause_reading)r&   r   r   data_lenr   s        r   	feed_datazStreamReader.feed_data  s    99888}t9

h
D!H$DLvt$::(((NN((*r   c                 ~    | j                   1| j                  rt        d      t        j                         | _         y y )Nz@Called begin_http_chunk_receiving when some data was already fed)rI   rS   RuntimeErrorr`   ra   r)   s    r   begin_http_chunk_receivingz'StreamReader.begin_http_chunk_receiving0  s?    ""*"V  '2&7&7&9D# +r   c                    | j                   t        d      | j                   r| j                   d   nd}| j                  |k(  ry | j                   j                  | j                         t	        | j                         | j
                  kD  r| j                  j                          | j                  }|d | _        t        |d        y y )NzFCalled end_chunk_receiving without calling begin_chunk_receiving firstr   )
rI   r   rS   rg   r   rE   rA   r   rM   r   )r&   posr   s      r   end_http_chunk_receivingz%StreamReader.end_http_chunk_receiving8  s    ""*.  .2-D-Dd%%b)!s" &&t'7'78
 t&&'$*A*AANN((* DLvt$ r   	func_namec                 F  K   | j                   j                  st        d      | j                  t        d|z        | j                  j                         x}| _        	 | j                  5  | d {    d d d        d | _        y 7 # 1 sw Y   xY w# d | _        w xY ww)NzConnection closed.zH%s() called while another coroutine is already waiting for incoming data)rA   	connectedr   rM   rF   r   rP   )r&   r   r   s      r   _waitzStreamReader._wait\  s     ~~''344 <<#46?@ 
 !%

 8 8 ::	    DL    DLsH   AB! B ,B	2B3B	7B ?B!B		BB 	BB!max_line_lengthr   c                B   K   | j                  |       d {   S 7 w)Nmax_size)	readuntilr&   r   s     r   rl   zStreamReader.readlineq  s     ^^_^====s   r   	separatorr   c                0  K   t        |      }|dk(  rt        d      | j                  | j                  d}d}d}|xs | j                  }|r| j                  r|r| j
                  }| j                  d   j                  ||      dz   }| j                  |r||z
  |z   dz
  nd      }	||	z  }|t        |	      z  }|rd}||kD  rt        |d d d	z   |      | j                  r|r| j                  r	 |S |r| j                  d
       d {    |r|S 7 	w)Nr   z,Separator should be at least one-byte stringr   Tr   r   Fd   s   ...r   )r   
ValueErrorrO   rC   rJ   rK   find_read_nowait_chunkr   rL   r   )
r&   r   r   seplenchunk
chunk_size
not_enoughoffseticharr   s
             r   r   zStreamReader.readuntilt  s9     YQ;KLL??&//!

/t//,,:,,Q,,Y?!C..38EFNV+a/b c$i'
!&J(%eDSkF&:HEE ,,: yy
  jj---) ,  .s   C"D%%D
DDDc                   K   | j                   | j                   	 | j                  rG| j                  s;t        | dd      dz   | _        | j                  dkD  rt        j                  dd       |sy|dk  r`| j                  t        j                         g }	 | j                          d {   }|sn|j                  |       -dj                  |      S | j                  |       | j                  s>| j                  s2| j                  d	       d {    | j                  s| j                  s2| j                  |      S 7 7 0w)
NTrR   r   r      zEMultiple access to StreamReader in eof state, might be infinite loop.)
stack_infor   rp   )rO   rL   rJ   getattrrR   r   warningrr   sysmaxsizerv   rg   rh   r   _read_nowait)r&   rm   blocksblocks       r   rp   zStreamReader.read  s!    ??&//! yy$+D.!$Dq$H!$$q(#++2#' q5$$S[[1F"lln,e$	 
 88F##  # ,,tyy**V$$$ ,,tyy   ## - %s+   B*E,E-A'EEE2EEc                    K   | j                   | j                   | j                  s>| j                  s2| j                  d       d {    | j                  s| j                  s2| j	                  d      S 7 .w)Nrv   r   )rO   rJ   rL   r   r   r)   s    r   rv   zStreamReader.readany  sb     ??&//!
 ,,tyy**Y''' ,,tyy   $$ (s   AA8A6A8%A8c                   K   	 | j                   | j                   | j                  r{| j                  j                         }|| j                  k(  ry|| j                  kD  r | j	                  || j                  z
        dfS t        j                  d       | j                  r{| j                  r| j                  d      dfS | j                  ry| j                  d       d{    7 w)	a  Returns a tuple of (data, end_of_http_chunk).

        When chunked transfer
        encoding is used, end_of_http_chunk is a boolean indicating if the end
        of the data corresponds to the end of a HTTP chunk , otherwise it is
        always False.
        TNr   TzESkipping HTTP chunk end due to data consumption beyond chunk boundaryr   Fr;   r<   )rO   rI   popleftrH   r   r   r   rJ   r   rL   r   )r&   r   s     r   r<   zStreamReader.readchunk  s      *oo%))--557$,,&&% --cDLL.@A4HH''8 )) ||//3U;; yy $**[)))1 0 *s   B C+#A C+#C)$C+c                 T  K   | j                   | j                   g }|dkD  rs| j                  |       d {   }|s3dj                  |      }t        j                  |t        |      |z         |j                  |       |t        |      z  }|dkD  rsdj                  |      S 7 ow)Nr   r   )rO   rp   rh   r]   IncompleteReadErrorr   rg   )r&   rm   r   r   partials        r   readexactlyzStreamReader.readexactly  s     ??&//! !e))A,&E((6*11'3w<!;KLLMM% UOA !e xx 's   4B(B&AB(B(c                     | j                   | j                   | j                  r%| j                  j                         st        d      | j	                  |      S )Nz9Called while some coroutine is waiting for incoming data.)rO   rM   doner   r   rs   s     r   read_nowaitzStreamReader.read_nowait  sQ    
 ??&//!<< 1 1 3K    ##r   c                    | j                   d   }| j                  }|dk7  r/t        |      |z
  |kD  r||||z    }| xj                  |z  c_        nC|r'| j                   j                          ||d  }d| _        n| j                   j                         }t        |      }| xj                  |z  c_        | xj
                  |z  c_        | j                  }|r7|d   | j
                  k  r%|j                          |r|d   | j
                  k  r%| j                  | j                  k  rH| j                  "t        | j                        | j                  k  r| j                  j                          |S )Nr   r   )rJ   rK   r   r   rG   rH   rI   rB   rD   rA   r   )r&   rm   first_bufferr   r   r   chunk_splitss          r   r   zStreamReader._read_nowait_chunk  s<   ||A$$7s<(61A5!4D1$LL  "(D"#D <<'')Dt9

h
 ..|A=  " |A= ::'##+4**+d.D.DDNN))+r   c                    | j                   j                          |dk(  rbt        | j                        }|dk(  r| j	                  d      S dj                  t        |      D cg c]  }| j	                  d       c}      S g }| j                  rC| j	                  |      }|j                  |       |t        |      z  }|dk(  rn| j                  rC|rdj                  |      S dS c c}w )z6Read not more than n bytes, or whole buffer if n == -1r   r   r   r   )rP   assert_timeoutr   rJ   r   rh   rangerg   )r&   rm   count_chunksr   s         r   r   zStreamReader._read_nowait/  s    ""$7 %Ez..r2288%,OQT44R8OPP ll++A.EMM% UOAAv ll $*sxx2s2 Ps   #C(r#   Nr   )   
r   )2r   r   r   r   r2   r	   intr   r]   AbstractEventLoopr'   strrj   r    r>   r*   rt   rw   r4   ry   r=   r|   rr   BaseExceptionr   r
   r   r   r   r   r?   r   r   r   propertyr   r   r   r   r   r   rl   r   rp   rv   r<   r   r   r   r   r   r   r   r   r   G   s   I8 *.15 7 7  7
  $& 7 ''$. 7 
 7D'# '2.u5 29c 9&9%&@ 9
1-e4 13: 33c3h 3%S %T %=4/  $122 !2 
	2$1xD1 1d 1$0 . .	$ + + +
 $ (e 3 t (:"%H S  T  * ?C >t >u > "'%BF%%584Z%	%N'$C '$ '$R
%u 
% *ud{!3  *D 3  5  $S $% $C E >3c 3e 3r   r   c                   (   e Zd ZdZddZdefdZdedz  fdZe	fdededdfd	Z
d
eg df   ddfdZddZdefdZdefdZddZddededefdZdeddfdZdddedz  defdZddedefdZdefdZdeeef   fdZdedefdZddedefdZy)EmptyStreamReader_read_eof_chunkr#   Nc                      d| _         d| _        y )NFr   )r   rS   r)   s    r   r'   zEmptyStreamReader.__init__J  s    $r   c                 4    d| j                   j                  z  S )Nrd   )rf   r   r)   s    r   rj   zEmptyStreamReader.__repr__N  s    ////r   c                      y r%   r   r)   s    r   r   zEmptyStreamReader.exceptionQ      r   r   r   c                      y r%   r   )r&   r   r   s      r   r   zEmptyStreamReader.set_exceptionT  s    
 	r   r   c                 \    	  |        y # t         $ r t        j                  d       Y y w xY wr   )r   r   r   r   s     r   r   zEmptyStreamReader.on_eof[  s-    	CJ 	C%%&AB	Cs   
 ++c                      y r%   r   r)   s    r   r   zEmptyStreamReader.feed_eofa  s    r   c                      yNTr   r)   s    r   r   zEmptyStreamReader.is_eofd  r   r   c                      yr   r   r)   s    r   r   zEmptyStreamReader.at_eofg  r   r   c                    K   y wr%   r   r)   s    r   r   zEmptyStreamReader.wait_eofj  s	        r   rm   c                      yNFr   )r&   r   rm   s      r   r   zEmptyStreamReader.feed_datam  s    r   c                      y r%   r   rs   s     r   rr   z%EmptyStreamReader.set_read_chunk_sizep  s    r   r   r   c                   K   ywr-   r   r   s     r   rl   zEmptyStreamReader.readlines  	     r  c                    K   ywr-   r   rs   s     r   rp   zEmptyStreamReader.readv  r  r  c                    K   ywr-   r   r)   s    r   rv   zEmptyStreamReader.readany{  r  r  c                 4   K   | j                   sd| _         yyw)NTr;   r   r   r)   s    r   r<   zEmptyStreamReader.readchunk~  s     ###'D s   c                 6   K   t        j                  d|      wr-   )r]   r   rs   s     r   r   zEmptyStreamReader.readexactly  s     ))#q11s   c                      yr-   r   rs   s     r   r   zEmptyStreamReader.read_nowait  s    r   r   r   r   )r   r   r   r2   r'   r   rj   r   r   r
   r   r   r   r   r?   r   r   r   r>   r   r   rr   rl   rp   rv   r=   r<   r   r   r   r   r   r   r   F  s4   $I0# 0=4/  $1 ! 
	CxD1 Cd C  e  D S T  ?C t u C  
u ud{!3 23 25 2S % r   r   r   c                       e Zd ZdZdej
                  ddfdZdefdZde	fdZ
de	fdZdedz  fd	Zefd
ededdfdZddededdfdZddZdefdZdee   fdZy)r   z>DataQueue is a general-purpose blocking queue with one reader.rV   r#   Nc                 n    || _         d| _        d | _        d | _        t	        j
                         | _        y r  )rF   rL   rM   rO   r`   ra   rJ   )r&   rV   s     r   r'   zDataQueue.__init__  s.    
	4804:E:K:K:Mr   c                 ,    t        | j                        S r%   )r   rJ   r)   s    r   __len__zDataQueue.__len__  s    4<<  r   c                     | j                   S r%   r   r)   s    r   r   zDataQueue.is_eof  s    yyr   c                 8    | j                   xr | j                   S r%   r   r)   s    r   r   zDataQueue.at_eof  s    yy---r   c                     | j                   S r%   r   r)   s    r   r   zDataQueue.exception  r   r   r   r   c                 f    d| _         || _        | j                  x}d | _        t        |||       y y r   )rL   rO   rM   r   r   s       r   r   zDataQueue.set_exception  s9    
 	ll"F/DL&#y1 0r   r   r   c                     | j                   j                  ||f       | j                  x}d | _        t        |d        y y r%   )rJ   rg   rM   r   )r&   r   r   r   s       r   r   zDataQueue.feed_data  s=    T4L)ll"F/DLvt$ 0r   c                 V    d| _         | j                  x}d | _        t        |d        y y r   )rL   rM   r   )r&   r   s     r   r   zDataQueue.feed_eof  s.    	ll"F/DLvt$ 0r   c                   K   | j                   sN| j                  sB| j                  rJ | j                  j	                         | _        	 | j                   d {    | j                   r| j                   j                         \  }}|S | j                  | j                  t        7 M# t
        j                  t
        j                  f$ r	 d | _         w xY wwr%   )rJ   rL   rM   rF   r   r]   CancelledErrorTimeoutErrorr   rO   r   )r&   r   r   s      r   rp   zDataQueue.read  s     ||DII||##::335DLll"" <<ll**,GD!K??&//! #**G,@,@A #s1   AC	B( B&B( A	C&B( (,CCc                 ,    t        | j                        S r%   )r    rp   r)   s    r   r*   zDataQueue.__aiter__  s    "499--r   r   r   )r   r   r   r   r]   r   r'   r   r  r?   r   r   r   r   r
   r   r   r   r   rp   r    r*   r   r   r   r   r     s    HNW66 N4 N! ! . .=4/  $1	2	2 !	2 
		2%b % %D %%B  ..r2 .r   r   c                   n     e Zd ZdZdededej                  ddf fdZdde	d	eddf fd
Z
de	fdZ xZS )FlowControlDataQueuezFlowControlDataQueue resumes and pauses an underlying stream.

    It is a destination for parsed data.

    This class is deprecated and will be removed in version 4.0.
    rW   rX   rV   r#   Nc                V    t         |   |       d| _        || _        |dz  | _        y )N)rV   r   rZ   )superr'   rG   rA   _limit)r&   rW   rX   rV   rf   s       r   r'   zFlowControlDataQueue.__init__  s.     	d#
!air   r   r   c                     t         |   ||       | xj                  |z  c_        | j                  | j                  kD  r2| j                  j
                  s| j                  j                          y y y r%   )r  r   rG   r  rA   _reading_pausedr   )r&   r   r   rf   s      r   r   zFlowControlDataQueue.feed_data  sU    $%

d
::#DNN,J,JNN((* -K#r   c                 n  K   | j                   sN| j                  sB| j                  rJ | j                  j	                         | _        	 | j                   d {    | j                   r}| j                   j                         \  }}| xj                  |z  c_	        | j                  | j                  k  r0| j                  j                  r| j                  j                          |S | j                  | j                  t        7 # t
        j                  t
        j                  f$ r	 d | _         w xY wwr%   )rJ   rL   rM   rF   r   r]   r  r  r   rG   r  rA   r   r   rO   r   )r&   r   r   s      r   rp   zFlowControlDataQueue.read  s     ||DII||##::335DLll"" <<--/JD$JJ$JzzDKK'DNN,J,J--/K??&//! #**G,@,@A #s1   AD5	D DD B'D5D ,D22D5r   )r   r   r   r   r	   r   r]   r   r'   r   r   rp   __classcell__)rf   s   @r   r  r    sY     $ -0 ;B;T;T 	 +b + +D +B r   r  )$r]   r`   r   r   collections.abcr   r   typingr   r   r   base_protocolr	   helpersr
   r   r   r   r   r   http_exceptionsr   logr   __all__r   r   r   r    r4   r   r   r   __annotations__r   r  r   r   r   <module>r+     s      
  / * * '  )   T]!	 !'"+ ( "|3 |3~C CL &7%8u\" 8>. >.B(9R= (r   