
    *Gj?x                        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Zd dlm	Z	m
Z
 d dlmZ d dl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mZ dd	lmZmZ dd
lmZ ddl m!Z!m"Z" ddl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. ddlm/Z/m0Z0m1Z1 ddlm2Z2 ddl3m4Z4m5Z5m6Z6 d eD             Z7dZ8erddl9m:Z: e
e;ef         Z<nej        j
        Z< ed          Z= G d dej>                  Z?d e?D             Z@ G d de
e;e(e         z  ef         e'          ZA G d deA          ZBe,fddddddejC        ddede;dz  d eDdz  d!eEd"e;dz  d#e6dz  d$e;d%e5d&eBfd'ZFe,fdddddd(ded%e4d eDdz  d!eEd"e;dz  d#e6dz  d$e;d&eBfd)ZGdS )*    N)IteratorMutableMapping)Executor)
HTTPStatus)SimpleCookie)TYPE_CHECKINGAnyOptionalTypeVarcastoverload)CIMultiDictistr   )hdrspayload)AbstractStreamWriter)MAX_SYNC_CHUNK_SIZEZLibCompressor)ETAG_ANYQUOTED_ETAG_REETagHeadersMixinResponseKeymust_be_empty_bodyparse_http_daterfc822_formatted_timesentinelshould_remove_content_lengthvalidate_etag_value)SERVER_SOFTWAREHttpVersion10HttpVersion11)Payload)JSONBytesEncoderJSONEncoderLooseHeadersc                 (    i | ]}|j         |j        S  )valuephrase).0http_statuss     \/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/aiohttp/web_response.py
<dictcomp>r/   %   s     VVVK+#[%7VVV    )ContentCodingStreamResponseResponsejson_responsejson_bytes_response)BaseRequest_Tc                       e Zd ZdZdZdZdS )r1   deflategzipidentityN)__name__
__module____qualname__r9   r:   r;   r)   r0   r.   r1   r1   <   s        
 GDHHHr0   r1   c                     i | ]
}|j         |S r)   r*   )r,   codings     r.   r/   r/   F   s    DDDF6<DDDr0   c                       e Zd ZU dez  ez  ez  ed<   dZdZdZ	e
dz  ed<   dZe
ed<   dZe
ed<   dZedz  ed<   dZedz  ed	<   dZed
         ed<   dZedz  ed<   dZe
ed<   dZe
dz  ed<   dZdZedz  ed<   dZ e            Zee         ed<   ddddddededz  dedz  dee         dz  ddf
dZ e!de
fd            Z"e!dgd            Z#e!defd            Z$e!de
fd            Z%e!de
fd            Z&e!defd             Z'	 dhdededz  ddfd!Z(dededz  ddfd"Z)e!de
dz  fd#            Z*did$Z+e!defd%            Z,e!defd&            Z-dhd'edz  ddfd(Z.	 	 djd)e
ez  dz  d*edz  ddfd+Z/e!dkd-            Z0e!defd.            Z1dddd/dddddd0	d1ed2ed3edz  d4edz  d5eez  dz  d6ed7e
dz  d8e
dz  d9edz  d:edz  d;e
dz  ddfd<Z2dd/dddd=d1ed4edz  d6ed7e
dz  d8e
dz  d:edz  ddfd>Z3e!dedz  f fd?            Z4e4j5        d2edz  ddfd@            Z4e!def fdA            Z6e6j5        d2eddfdB            Z6e!dedz  f fdC            Z7e7j5        d2edz  ddfdD            Z7e!de8j8        dz  fdE            Z9e9j5        d2ee:z  e8j8        z  ez  dz  ddfdF            Z9e!de;dz  fdG            Z<e<j5        d2e;ez  dz  ddfdH            Z<e=j>        fdIe?ddfdJZ@dKeddfdLZAdldNZBdMd
dedz  fdOZCdMd
defdPZDdidQZEdidRZFdSeez  eGz  ddfdTZHdidUZIdmdSeddfdWZJdefdXZKeLdYeMeN         deNfdZ            ZOeLdYedePfd[            ZOdYeeMeN         z  dePfd\ZOeLdYeMeN         d2eNddfd]            ZQeLdYed2ePddfd^            ZQdYeeMeN         z  d2ePddfd_ZQdYeeMeN         z  ddfd`ZRdefdaZSdeTeeMeP         z           fdbZUdefdcZVddeWde
fdeZXde
fdfZY xZZS )nr2   N_bodyT_keep_aliveF_chunked_compression_compression_strategy_compression_forcer6   _req_payload_writer	_eof_sent_must_be_empty_bodyr   _cookies_seen_str_keys   )statusreasonheaders_real_headersrP   rQ   rR   rS   returnc                    i | _         ||| _        n*|t          |          | _        nt                      | _        |                     ||           dS )a;  Initialize a new stream response object.

        _real_headers is an internal parameter used to pass a pre-populated
        headers object. It is used by the `Response` class to avoid copying
        the headers when creating a new response object. It is not intended
        to be used by external code.
        N)_state_headersr   _set_status)selfrP   rQ   rR   rS   s        r.   __init__zStreamResponse.__init__`   sX     :<$)DMM .9'.B.BDMM'MMDM(((((r0   c                 "    | j         p| j        d uS N)rK   rJ   rY   s    r.   preparedzStreamResponse.preparedz   s    ~A!5T!AAr0   asyncio.Task[None] | Nonec                 ,    | j         r| j         j        S d S r\   )rI   taskr]   s    r.   ra   zStreamResponse.task~   s    9 	9>!4r0   c                     | j         S r\   )_statusr]   s    r.   rP   zStreamResponse.status   
    |r0   c                     | j         S r\   )rE   r]   s    r.   chunkedzStreamResponse.chunked   
    }r0   c                     | j         S r\   )rF   r]   s    r.   compressionzStreamResponse.compression         r0   c                     | j         S r\   )_reasonr]   s    r.   rQ   zStreamResponse.reason   rd   r0   c                 T    | j         r
J d            |                     ||           d S )NzGCannot change the response status code after the headers have been sent)r^   rX   rY   rP   rQ   s      r.   
set_statuszStreamResponse.set_status   sC     	U 	UT	U 	U(((((r0   c                     t          |          | _        |!t                              | j        d          }nd|v sd|v rt	          d          || _        d S )N 
zReason cannot contain \r or \n)intrc   REASON_PHRASESget
ValueErrorrl   rn   s      r.   rX   zStreamResponse._set_status   sX    6{{>#''b99FFV^^tv~~?@@@r0   c                     | j         S r\   rD   r]   s    r.   
keep_alivezStreamResponse.keep_alive   s    r0   c                     d| _         d S )NFry   r]   s    r.   force_closezStreamResponse.force_close   s     r0   c                     | j         S r\   )_body_lengthr]   s    r.   body_lengthzStreamResponse.body_length   rj   r0   c                 `    t          j        dt                     | j        sJ | j        j        S )Nzoutput_length is deprecated)warningswarnDeprecationWarningrJ   buffer_sizer]   s    r.   output_lengthzStreamResponse.output_length   s1    35GHHH#####//r0   
chunk_sizec                     t           j        | j        v rt          d          |t	          j        dt                     d| _        dS )z,Enables automatic chunked transfer encoding.z>You can't enable chunked encoding when a content length is setNzChunk size is deprecated #1615T)r   CONTENT_LENGTHrW   RuntimeErrorr   r   r   rE   )rY   r   s     r.   enable_chunked_encodingz&StreamResponse.enable_chunked_encoding   sN    $-//P   !M:<NOOOr0   forcestrategyc                    t          |t                    r5|rt          j        nt          j        }t          j        dt                     n!|t          |t                    s
J d            d| _        || _	        || _
        dS )z&Enables response compression encoding.z+Using boolean for force is deprecated #3318Nz1force should one of None, bool or ContentEncodingT)
isinstanceboolr1   r9   r;   r   r   r   rF   rH   rG   )rY   r   r   s      r.   enable_compressionz!StreamResponse.enable_compression   s     eT"" 	C-2NM))8NEM=?Q    }  C CBC C  !"'%-"""r0   CIMultiDict[str]c                     | j         S r\   )rW   r]   s    r.   rR   zStreamResponse.headers   rg   r0   c                 D    | j         t                      | _         | j         S r\   )rM   r   r]   s    r.   cookieszStreamResponse.cookies   s    = (NNDM}r0   /)	expiresdomainmax_agepathsecurehttponlyversionsamesitepartitionednamer*   r   r   r   r   r   r   r   r   r   c       	         J   | j         t                      | _         || j         |<   | j         |         }|||d<   n|                    d          dk    r|d= |||d<   |t          |          |d<   nd|v r|d= ||d<   |||d<   |||d<   |	|	|d	<   |
|
|d
<   |||d<   dS dS )zSet or update response cookie.

        Sets new cookie or updates existent with new value.
        Also updates only those params which are not None.
        Nr   Thu, 01 Jan 1970 00:00:00 GMTr   zmax-ager   r   r   r   r   r   )rM   r   rv   str)rY   r   r*   r   r   r   r   r   r   r   r   r   cs                r.   
set_cookiezStreamResponse.set_cookie   s    ( = (NNDM#dM$"AiLLUU9!@@@) AhKw<<AiLL!^^)&	 AhK$AjM"AiL$AjM"*Am #"r0   )r   r   r   r   r   c                    | j         | j                             |d           |                     |ddd|||||	  	         dS )zBDelete cookie.

        Creates new empty expired cookie.
        Nrq   r   r   )r   r   r   r   r   r   r   )rM   popr   )rY   r   r   r   r   r   r   s          r.   
del_cookiezStreamResponse.del_cookie  sd     =$MdD)))3 	 
	
 
	
 
	
 
	
 
	
r0   c                 *    t                      j        S r\   )supercontent_lengthrY   	__class__s    r.   r   zStreamResponse.content_length3  s     ww%%r0   c                     |Ht          |          }| j        rt          d          t          |          | j        t
          j        <   d S | j                            t
          j        d            d S )Nz<You can't set content length when chunked encoding is enable)rt   rE   r   r   rW   r   r   r   rY   r*   s     r.   r   zStreamResponse.content_length8  sp    JJE} "R   25UDM$-...Md1488888r0   c                 *    t                      j        S r\   )r   content_typer   s    r.   r   zStreamResponse.content_typeD  s     ww##r0   c                 d    | j          t          |          | _        |                                  d S r\   )r   r   _content_type_generate_content_type_headerr   s     r.   r   zStreamResponse.content_typeI  s1     ZZ**,,,,,r0   c                 *    t                      j        S r\   )r   charsetr   s    r.   r   zStreamResponse.charsetO  s     wwr0   c                    | j         }|dk    rt          d          | j        J || j                            dd            n)t	          |                                          | j        d<   |                                  d S )Napplication/octet-streamzYSetting charset for application/octet-stream doesn't make sense, setup content_type firstr   )r   r   _content_dictr   r   lowerr   )rY   r*   ctypes      r.   r   zStreamResponse.charsetT  s    !...?   !---=""9d3333,/JJ,<,<,>,>Dy)**,,,,,r0   c                 d    t          | j                            t          j                            S )zuThe value of Last-Modified HTTP header, or None.

        This header is represented as a `datetime` object.
        )r   rW   rv   r   LAST_MODIFIEDr]   s    r.   last_modifiedzStreamResponse.last_modifiedc  s%     t}001CDDEEEr0   c                 r   |'| j                             t          j        d            d S t	          |t
          t          f          rMt          j        dt          j	        t          j        |                              | j         t          j        <   d S t	          |t          j                  r;t          j        d|                                          | j         t          j        <   d S t	          |t                    r|| j         t          j        <   d S dt          |          j         }t#          |          )Nz%a, %d %b %Y %H:%M:%S GMTz$Unsupported type for last_modified: )rW   r   r   r   r   rt   floattimestrftimegmtimemathceildatetimeutctimetupler   typer<   	TypeError)rY   r*   msgs      r.   r   zStreamResponse.last_modifiedk  s    =Md0$77777U|,, 	!04+T[59I9I-J-J1 1DM$,--- x011 	!04+U-?-?-A-A1 1DM$,--- s## 	!05DM$,---Oe9MOOCC.. r0   c                 0   | j                             t          j                  }|sd S |t          k    rt          t                    S t          j        |          }|sd S |                    dd          \  }}t          t          |          |          S )Nr@   r      )is_weakr*   )
rW   rv   r   ETAGr   r   r   	fullmatchgroupr   )rY   quoted_valuematchr   r*   s        r.   etagzStreamResponse.etag  s    }((33 	(4X%%h''''(66 	4Q**MM
 
 
 	
r0   c                    |'| j                             t          j        d            d S t	          |t
                    r|t          k    s%t	          |t                    r+|j        t          k    rt          | j         t          j        <   d S t	          |t
                    r)t          |           d| d| j         t          j        <   d S t	          |t                    rat	          |j        t
                    rGt          |j                   |j
        rd|j         dn
d|j         d}|| j         t          j        <   d S t          dt          |           d          )N"zW/"zUnsupported etag type: z . etag must be str, ETag or None)rW   r   r   r   r   r   r   r   r*   r    r   rw   r   )rY   r*   	hdr_values      r.   r   zStreamResponse.etag  sV   =Mdi.....$$ 	():):ud## *;(-x(?(?'/DM$)$$$s## 	&&&'35|||DM$)$$$t$$ 	EK)E)E 	,,,05U,ek,,,,CUu{CUCUCUI'0DM$)$$$2$u++ 2 2 2  r0   CONTENT_TYPEc                     | j         J | j        J d                    d | j                                         D                       }|r| j        dz   |z   }n| j        }|| j        |<   d S )Nz; c              3   *   K   | ]\  }}| d | V  dS )=Nr)   )r,   kvs      r.   	<genexpr>z?StreamResponse._generate_content_type_header.<locals>.<genexpr>  s0      MM$!Qa::!::MMMMMMr0   )r   r   joinitemsrW   )rY   r   paramsr   s       r.   r   z,StreamResponse._generate_content_type_header  s     !---!---MM$2D2J2J2L2LMMMMM 	'&-6EE&E&+l###r0   rA   c                   K   |t           j        u rd S | j        J |j        | j        t
          j        <   | j                            |j        | j                   | j        	                    t
          j
        d            d S r\   )r1   r;   rJ   r*   rW   r   CONTENT_ENCODINGr   rG   popallr   )rY   rA   s     r.   _do_start_compressionz$StreamResponse._do_start_compression  s      ]+++F#////5|d+,//L$4	
 	
 	

 	T0$77777r0   requestc                 L  K   | j         r"|                     | j                    d {V  d S |j                            t          j        d                                          }t                                          D ]'\  }}||v r|                     |           d {V   d S (d S )Nrq   )	rH   r   rR   rv   r   ACCEPT_ENCODINGr   CONTENT_CODINGSr   )rY   r   accept_encodingr*   rA   s        r.   _start_compressionz!StreamResponse._start_compression  s      " 	,,T-DEEEEEEEEEF "/--d.BBGGMMOO,2244 	 	ME6''00888888888 (	 	r0   c                    K   | j         rd S | j        | j        S t          |j        | j                  | _        |                     |           d {V S r\   )rK   rJ   r   methodrP   rL   _start)rY   r   s     r.   preparezStreamResponse.prepare  sa      > 	4+''#5gndk#R#R [[)))))))))r0   c                    K   || _         |j        x}| _        |                                  d {V  |                    |            d {V  |                                  d {V  |S r\   )rI   rJ   _prepare_headers_prepare_hook_write_headers)rY   r   writers      r.   r   zStreamResponse._start  s      	(/(??%##%%%%%%%%%##D)))))))))!!#########r0   c                 `  K   | j         }|J | j        }|J | j        }||j        }|| _        |j        }| j        }| j        rZ| j                                        D ]@}|                    d          dd          }|	                    t          j        |           A| j        r|                     |           d {V  | j        r_|t          k    r)t!          d|j        j         d|j        j                   | j        s#|                                 d|t          j        <   nY| j        rR| j        |_        |j        ?|t          k    r+| j        s#|                                 d|t          j        <   n	| j        sd}| j        rQt          j        |v r't5          |j        | j                  r|t          j        = t          j        |v r|t          j        = n9| j        r|j        n| j        dk    r |                    t          j        d	           |                    t          j        tA                                 |                    t          j!        tD                     t          j#        |vr<|r|tH          k    rd
|t          j#        <   d S d S |t          k    rd|t          j#        <   d S d S d S )Nrq   )headerr   z-Using chunked encoding is forbidden for HTTP/.rf   Fr   r   z
keep-aliveclose)%rI   rJ   rD   rz   r   rW   rM   valuesoutputaddr   
SET_COOKIErF   r   rE   r#   r   majorminorrL   enable_chunkingTRANSFER_ENCODING_length_checkr   lengthr   r   r   rP   
setdefaultr   DATEr   SERVERr!   
CONNECTIONr"   )rY   r   r   rz   r   rR   cookier*   s           r.   r   zStreamResponse._prepare_headers  s      )"""%!!!%
 +J%/-= 	4-..00 4 4R004DOU3333 	3))'222222222= 	'-''"P ' 5P P8?8MP P   + <&&(((2;./ 	' /FM}$m++3 D..000:C 671 '!&J # 	N"g--2N3 3- D/0 %00D23#1Jfmmt7JqPPt02LMMM49&;&=&=>>>4;888 ?')) 3m++/;GDO,,, ,+M))+2((( *) *)r0   c                   K   | j         }|J | j        }|J |j        }d|d          d|d          d| j         d| j         }|                    || j                   d {V  | j        r|                                 d S d S )NzHTTP/r   r   r    )	rI   rJ   r   rc   rl   write_headersrW   _send_headers_immediatelysend_headers)rY   r   r   r   status_lines        r.   r   zStreamResponse._write_headers  s      )"""%!!!/UgajUU71:UUUUt|UU"";>>>>>>>>>) 	"!!!!!	" 	"r0   datac                   K   t          |t          t          t          f          sJ dt	          |          z              | j        rt          d          | j        t          d          | j                            |           d {V  d S )N#data argument must be byte-ish (%r)z%Cannot call write() after write_eof()z$Cannot call write() before prepare())	r   bytes	bytearray
memoryviewr   rK   r   rJ   writerY   r  s     r.   r  zStreamResponse.write(  s      5)Z0
 
 	> 	>04::=	> 	> 
 > 	HFGGG'EFFF"((...........r0   c                    K   | j         r
J d            | j        
J d            t          j        dt          d           | j                                         d {V  d S )NzEOF has already been sentResponse has not been startedz2drain method is deprecated, use await resp.write()r   )
stacklevel)rK   rJ   r   r   r   drainr]   s    r.   r  zStreamResponse.drain4  s      >>>#>>>!#//1P///@	
 	
 	
 	

 "((***********r0   r0   c                 B  K   t          |t          t          t          f          sJ dt	          |          z              | j        rd S | j        
J d            | j                            |           d {V  d| _        d | _        | j        j	        | _
        d | _        d S )Nr  r  T)r   r  r  r  r   rK   rJ   	write_eofrI   output_sizer~   r  s     r.   r  zStreamResponse.write_eof>  s      5)Z0
 
 	> 	>04::=	> 	> 
 > 	F#//1P///",,T222222222	 0<#r0   c                     | j         rd}n/| j        r&| j        J | j        j         d| j        j         d}nd}d| j        j         d| j         d| dS )Neofr  znot prepared<>)rK   r^   rI   r   r   r   r<   rQ   )rY   infos     r.   __repr__zStreamResponse.__repr__N  sy    > 	"DD] 	"9(((i&:::::DD!DB4>*BBT[BB4BBBBr0   keyc                     d S r\   r)   rY   r!  s     r.   __getitem__zStreamResponse.__getitem__X  s    7:sr0   c                     d S r\   r)   r#  s     r.   r$  zStreamResponse.__getitem__[  s    ,/Cr0   c                     | j         |         S r\   rV   r#  s     r.   r$  zStreamResponse.__getitem__^  s    {3r0   c                     d S r\   r)   rY   r!  r*   s      r.   __setitem__zStreamResponse.__setitem__a  s    DGCr0   c                     d S r\   r)   r)  s      r.   r*  zStreamResponse.__setitem__d  s    9<r0   c                     t          |t                    sJ|t          j        vr<ddlm} t          j                            |           t          j        d|d           || j	        |<   d S )Nr   )NotAppKeyWarningzIt is recommended to use web.ResponseKey instances for keys.
https://docs.aiohttp.org/en/stable/web_advanced.html#response-s-storager   )categoryr  )
r   r   r2   rN   web_exceptionsr-  r   r   r   rV   )rY   r!  r*   r-  s       r.   r*  zStreamResponse.__setitem__g  s    3,,	>888 988888)--c222M( *    !Cr0   c                     | j         |= d S r\   r'  r#  s     r.   __delitem__zStreamResponse.__delitem__y  s    Kr0   c                 *    t          | j                  S r\   )lenrV   r]   s    r.   __len__zStreamResponse.__len__|  s    4;r0   c                 *    t          | j                  S r\   )iterrV   r]   s    r.   __iter__zStreamResponse.__iter__  s    DK   r0   c                 :    t          t          |                     S r\   )hashidr]   s    r.   __hash__zStreamResponse.__hash__  s    BtHH~~r0   otherc                 
    | |u S r\   r)   )rY   r<  s     r.   __eq__zStreamResponse.__eq__  s    u}r0   c                     dS )NTr)   r]   s    r.   __bool__zStreamResponse.__bool__  s    tr0   )rT   r_   r\   )rT   N)NN)rT   r   )r   r6   rT   Nr0   )[r<   r=   r>   r  r  r$   __annotations__r   rC   rD   r   rE   rF   rG   rt   rH   r1   rI   r
   rJ   r   rK   rL   r~   rM   r   r	  setrN   r   r'   r   rZ   propertyr^   ra   rP   rf   ri   rQ   ro   rX   rz   r|   r   r   r   r   rR   r   r   r   r   setterr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r   r   r7   r$  r	   r*  r1  r4  r   r7  r;  objectr>  r@  __classcell__r   s   @r.   r2   r2   M   s
        %<)#g----ME#K###HdL$(,3:,,,/3,333$(D(=
!(((37O)D0777It'++++L$(HlT!((( $"suuNCH$$$
 !'+15) ) ) ) d
	)
 $) #3'$.) 
) ) ) )4 B$ B B B XB    X     X     X !T ! ! ! X!     X ") )) d
) 
	) ) ) )# sTz d      D4K       X ! ! ! ! !S ! ! ! X! 0s 0 0 0 X0
 #*      .2#. .m#d*. *. 
	. . . .*    X     X #!$(" $"##'3+ 3+ 3+3+ 3+
 t3+ d
3+ sT!3+ 3+ t3+ +3+ t3+ *3+ D[3+ 
3+ 3+ 3+ 3+r "" $#
 
 

 d
	

 
 t
 +
 *
 

 
 
 
: &d
 & & & & & X& 	9C$J 	94 	9 	9 	9 	9 $c $ $ $ $ $ X$ -# -$ - - - -
 t      X ^-S4Z -D - - - ^- Fx047 F F F XF !5[8#44s:TA!	! ! ! !& 
dTk 
 
 
 X
 
[$*t+     [* $(#4
, 
, 
,	
, 
, 
, 
,
8- 
8D 
8 
8 
8 
8
 
 
 
*] *7Kd7R * * * *M 6J    ?3 ?3 ?3 ?3B" " " "
/	 1J > 
/4 
/ 
/ 
/ 
/+ + + +$ $E $D $ $ $ $ C# C C C C :{2:2::: X:/s/s/// X/ s[_4           G{2GrGdGGG XG<s<3<4<<< X<!s[_4 !S !T ! ! ! !$s[_4              !(3S)9#9: ! ! ! !#    F t    $        r0   r2   c                       e Zd ZU dZedz  ed<   dZdddddddedd	dede	de
dz  d	e
dz  d
edz  de
dz  de
dz  de	dedz  ddf fdZedeez  ez  dz  fd            Zej        deddfd            Zede
dz  fd            Zej        d	e
ddfd            Zede	dz  fd            Zej        de	dz  ddfd            Zd deddf fdZdddef fdZdeddf fdZ xZS )!r3   N_compressed_bodyFrO   )	bodyrP   rQ   textrR   r   r   zlib_executor_sizezlib_executorrK  rP   rQ   rL  rR   r   r   rM  rN  rT   c       	            ||t          d          |t                      }
nt          |          }
|d|v rt          d          |t          j        |
v r|s|rt          d          nt	          |t
                    st          dt          |          z            |d}|d}|dz   |z   |
t          j        <   |                    |          }d }n=t          j        |
v r||t          d          n|||d|z   z  }||
t          j        <   t                      
                    |||
	           ||| _        n|| _        || _        |	| _        d S )
Nz&body and text are not allowed togetherr   z,charset must not be in content_type argumentzPpassing both Content-Type header and content_type or charset params is forbiddentext argument must be str (%r)
text/plainutf-8z
; charset=)rP   rQ   rS   )rw   r   r   r   r   r   r   r   encoder   rZ   rL  rK  _zlib_executor_size_zlib_executor)rY   rK  rP   rQ   rL  rR   r   r   rM  rN  real_headersr   s              r.   rZ   zResponse.__init__  s     0EFFF?-8]]LL&w//L#	\(A(AKLLL L00 7 $'   "$,, S#$DtDzz$QRRR'#/L?%G2>2MPW2WT./{{7++,..'7+> #   ,? %"w 66.:L*+v\RRRDIIDI#5 +r0   c                     | j         S r\   )rC   r]   s    r.   rK  zResponse.body  s
    zr0   c                    |d | _         nt          |t          t          f          r|| _         n	 t          j                            |          x| _         }n2# t          j        $ r  t          dt          |          z            w xY w| j
        }t          j        |vr|j        |t          j        <   |j        r(|j                                        D ]\  }}||vr|||<   d | _        d S )NzUnsupported body type %r)rC   r   r  r  r   PAYLOAD_REGISTRYrv   LookupErrorrw   r   rW   r   r   r   rR   r   rJ  )rY   rK  rR   r!  r*   s        r.   rK  zResponse.body  s
   <DJJui011 	-DJJJ$+$<$@$@$F$FF
TT& J J J !;d4jj!HIIIJ mG  //-1->)* | -"&,"4"4"6"6 - -JC'))', $s   &A /Bc                 V    | j         d S | j                             | j        pd          S )NrR  )rC   decoder   r]   s    r.   rL  zResponse.text  s.    :4 z  !8999r0   c                     |/t          |t                    sJ dt          |          z              | j        dk    rd| _        | j        d| _        |                    | j                  | _        d | _        d S )NrP  r   rQ  rR  )r   r   r   r   r   rS  rC   rJ  )rY   rL  s     r.   rL  zResponse.text  s    |z# 
  
||+d4jj8 | 
  ::: ,D<"DL[[..
 $r0   c                 *   | j         rd S t          j        | j        v r$t	          | j        t          j                           S | j        t          | j                  S t          | j        t                    rd S | j        t          | j                  S dS )Nr   )
rE   r   r   rW   rt   rJ  r3  r   rC   r$   r]   s    r.   r   zResponse.content_length  s    = 	4$-//t}T%89::: ,t,---
G,, 	4Z#tz??"1r0   r*   c                      t          d          )Nz#Content length is set automatically)r   r   s     r.   r   zResponse.content_length  s    @AAAr0   r0   r  c                   K   | j         rd S | j        | j        }n| j        }|rJ d|            | j        J | j        J || j        r(t                                                       d {V  d S t          | j        t                    r	 | j        
                    | j                   d {V  | j                                         d {V  n$# | j                                         d {V  w xY wt                                                       d {V  d S t                                          t          t          |                     d {V  d S )Nzdata arg is not supported, got )rK   rJ  rC   rI   rJ   rL   r   r  r   r$   r  r   r   r  )rY   r  rK  r   s      r.   r  zResponse.write_eof  s     > 	F (:DD(DCCC4CCCCxy$$$#///<43<''##%%%%%%%%%%%
G,, 	7)j&&t';<<<<<<<<<j&&((((((((((dj&&((((((((((''##%%%%%%%%%%%''##D$5$566666666666s   %C !C6r   r6   c                 <  K   t           j        | j        v r-t          |j        | j                  r| j        t           j        = n| j        st          | j        t                    r0| j        j
        x}!t          |          | j        t           j        <   nb| j        rt          | j                  nd}|dk    s| j        dk    r4|j        t           j        vr!t          |          | j        t           j        <   t                                          |           d {V S )N0i0  )r   r   rW   r   r   rP   rE   r   rC   r$   sizer   r3  METH_HEAD_ALLr   r   )rY   r   rc  body_lenr   s       r.   r   zResponse._start3  s      $-//+GNDKHH 7M$"56 
	G$*g.. 	G JO+D89<TDM$"56.2jA3tz???cs??K3&&7>AS+S+S9<XDM$"56WW^^G,,,,,,,,,r0   rA   c                   K   | j         st          | j        t                    r't	                                          |           d {V S |t          j        u rd S t          |j	        | j
        | j                  }| j        J |                    | j                   d {V |                                z   | _        |j	        | j        t           j        <   t%          t'          | j                            | j        t           j        <   d S )N)encodingmax_sync_chunk_sizeexecutor)rE   r   rC   r$   r   r   r1   r;   r   r*   rT  rU  compressflushrJ  rW   r   r   r   r3  r   )rY   rA   
compressorr   s      r.   r   zResponse._do_start_compressionE  s     = 	?Jtz7;; 	?66v>>>>>>>>>]+++F $\ $ 8(
 
 


 z%%%%%dj11111111J4D4D4F4FF 	 06|d+,-0T5J1K1K-L-Ld)***r0   rA  )r<   r=   r>   rJ  r  rB  r	  r   r	   rt   r   r'   r   rZ   rD  r  r$   rK  rE  rL  r   r  r   r   r1   r   rG  rH  s   @r.   r3   r3     s        %)edl))) %
 !'+#'""5)-?, ?, ?, ?, 	?,
 d
?, Dj?, $?, Dj?, t?,  ?,  $?, 
?, ?, ?, ?, ?, ?,B ei''1D8    X 
[% % % % % [%2 :cDj : : : X: 
[% % % % % [% d
    X$ BC$J B4 B B B B7 7E 7D 7 7 7 7 7 7*-M -6J - - - - - -$M- MD M M M M M M M M M Mr0   r3   rO   zapplication/json)rL  rK  rP   rQ   rR   r   dumpsr  rL  rK  rP   rQ   rR   r   rm  rT   c                z    | t           ur|s|rt          d           ||           }t          ||||||          S )Nz3only one of data, text, or body should be specified)rL  rK  rP   rQ   rR   r   r   rw   r3   )r  rL  rK  rP   rQ   rR   r   rm  s           r.   r4   r4   Y  sc     8 	4 	RSSS5;;D!   r0   rK  rP   rQ   rR   r   c                t    | t           ur|t          d           ||           }t          |||||          S )zCreate a JSON response using a bytes-returning encoder.

    Use this when your JSON encoder (like orjson) returns bytes
    instead of str, avoiding the encode/decode overhead.
    Nz,only one of data or body should be specifiedrp  ro  )r  rm  rK  rP   rQ   rR   r   s          r.   r5   r5   s  sW     8KLLL5;;D!   r0   )Hasynciocollections.abccollectionsr   enumjsonr   r   r   r   r   concurrent.futuresr   httpr   http.cookiesr   typingr   r	   r
   r   r   r   	multidictr   r   rq   r   r   abcr   compression_utilsr   r   helpersr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   typedefsr%   r&   r'   ru   __all__web_requestr6   r   	BaseClassr7   Enumr1   r   r2   r3   rm  r  rt   r4   r5   r)   r0   r.   <module>r     sh              4 4 4 4 4 4 4 4 ' ' ' ' ' '       % % % % % % H H H H H H H H H H H H H H H H ' ' ' ' ' ' ' '         % % % % % % B B B B B B B B                          @ ? ? ? ? ? ? ? ? ?       A A A A A A A A A AVV:VVV  /((((((sCx(II.I WT]]    DI    EDmDDD| | | | |^C+c*:$:C$?@, | | |~JM JM JM JM JM~ JM JM JM\  #'*  
 * $,	
  $J D       6  #'*  
  $,	
  $J D        r0   