
    F/j?x                     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 eD  ci c]  } | jn                  | jp                   c} Z9dZ:erddl;m<Z< e
e=ef   Z>nej<                  j                  Z> ed      Z? G d dej                        ZAeAD ci c]  }|jn                  | c}ZB G d de
e=e(e   z  ef   e'      ZC G d deC      ZDe,fddddddej                  ddede=dz  deFdz  deGd e=dz  d!e6dz  d"e=d#e5d$eDfd%ZHe,fdddddd&ded#e4deFdz  deGd e=dz  d!e6dz  d"e=d$eDfd'ZIyc c} w c c}w )(    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LooseHeaders)ContentCodingStreamResponseResponsejson_responsejson_bytes_response)BaseRequest_Tc                       e Zd ZdZdZdZy)r(   deflategzipidentityN)__name__
__module____qualname__r0   r1   r2        R/var/www/html/maxservice/venv/lib/python3.12/site-packages/aiohttp/web_response.pyr(   r(   <   s    
 GDHr7   r(   c                   F    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!ddd       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'	 ded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*dfd#Z+e!defd$       Z,e!defd%       Z-ded&edz  ddfd'Z.	 	 dgd(e
ez  dz  d)edz  ddfd*Z/e!dhd+       Z0e!defd,       Z1dddd-dddddd.	d/ed0ed1edz  d2edz  d3eez  dz  d4ed5e
dz  d6e
dz  d7edz  d8edz  d9e
dz  ddfd:Z2dd-dddd;d/ed2edz  d4ed5e
dz  d6e
dz  d8edz  ddfd<Z3e!dedz  f fd=       Z4e4jj                  d0edz  ddfd>       Z4e!def fd?       Z6e6jj                  d0eddfd@       Z6e!dedz  f fdA       Z7e7jj                  d0edz  ddfdB       Z7e!de8jp                  dz  fdC       Z9e9jj                  d0ee:z  e8jp                  z  ez  dz  ddfdD       Z9e!de;dz  fdE       Z<e<jj                  d0e;ez  dz  ddfdF       Z<e=j|                  fdGe?ddfdHZ@dIeddfdJZAdidLZBdKd
dedz  fdMZCdKd
defdNZDdfdOZEdfdPZFdQeez  eGz  ddfdRZHdfdSZIdjdQeddfdTZJdefdUZKeLdVeMeN   deNfdW       ZOeLdVedePfdX       ZOdVeeMeN   z  dePfdYZOeLdVeMeN   d0eNddfdZ       ZQeLdVed0ePddfd[       ZQdVeeMeN   z  d0ePddfd\ZQdVeeMeN   z  ddfd]ZRdefd^ZSdeTeeMeP   z     fd_ZUdefd`ZVdaeWde
fdbZXde
fdcZY xZZS )kr)   N_bodyT_keep_aliveF_chunked_compression_compression_strategy_compression_forcer-   _req_payload_writer	_eof_sent_must_be_empty_bodyr   _cookies_seen_str_keys   )statusreasonheaders_real_headersrG   rH   rI   rJ   returnc                    i | _         ||| _        n"|t        |      | _        nt               | _        | j                  ||       y)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)selfrG   rH   rI   rJ   s        r8   __init__zStreamResponse.__init__`   sC     :<$)DM .9'.BDM'MDM(r7   c                 :    | j                   xs | j                  d uS N)rB   rA   rP   s    r8   preparedzStreamResponse.preparedz   s    ~~A!5!5T!AAr7   c                 H    | j                   r| j                   j                  S y rS   )r@   taskrT   s    r8   rW   zStreamResponse.task~   s    9999>>!r7   c                     | j                   S rS   )_statusrT   s    r8   rG   zStreamResponse.status       ||r7   c                     | j                   S rS   )r<   rT   s    r8   chunkedzStreamResponse.chunked       }}r7   c                     | j                   S rS   )r=   rT   s    r8   compressionzStreamResponse.compression          r7   c                     | j                   S rS   )_reasonrT   s    r8   rH   zStreamResponse.reason   rZ   r7   c                 N    | j                   rJ d       | j                  ||       y )NzGCannot change the response status code after the headers have been sent)rU   rO   rP   rG   rH   s      r8   
set_statuszStreamResponse.set_status   s-     	UT	U(r7   c                     t        |      | _        |(t        j                  | j                  d      }|| _        y d|v sd|v rt	        d      || _        y )N 
zReason cannot contain \r or \n)intrY   REASON_PHRASESget
ValueErrorrb   rd   s      r8   rO   zStreamResponse._set_status   sS    6{>#''b9F  V^tv~?@@r7   c                     | j                   S rS   r;   rT   s    r8   
keep_alivezStreamResponse.keep_alive   s    r7   c                     d| _         y )NFro   rT   s    r8   force_closezStreamResponse.force_close   s
     r7   c                     | j                   S rS   )_body_lengthrT   s    r8   body_lengthzStreamResponse.body_length   r`   r7   c                 ~    t        j                  dt               | j                  sJ | j                  j                  S )Nzoutput_length is deprecated)warningswarnDeprecationWarningrA   buffer_sizerT   s    r8   output_lengthzStreamResponse.output_length   s3    35GH######///r7   
chunk_sizec                     t         j                  | j                  v rt        d      |t	        j
                  dt               d| _        y)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_LENGTHrN   RuntimeErrorrw   rx   ry   r<   )rP   r|   s     r8   enable_chunked_encodingz&StreamResponse.enable_chunked_encoding   sC    $--/P  !MM:<NOr7   forcestrategyc                     t        |t              r=|rt        j                  nt        j                  }t        j                  dt               n|t        |t              sJ d       d| _        || _	        || _
        y)z&Enables response compression encoding.z+Using boolean for force is deprecated #3318Nz1force should one of None, bool or ContentEncodingT)
isinstanceboolr(   r0   r2   rw   rx   ry   r=   r?   r>   )rP   r   r   s      r8   enable_compressionz!StreamResponse.enable_compression   sx     eT"-2M))8N8NEMM=?Q } CBC  !"'%-"r7   c                     | j                   S rS   )rN   rT   s    r8   rI   zStreamResponse.headers   r]   r7   c                 P    | j                   t               | _         | j                   S rS   )rD   r   rT   s    r8   cookieszStreamResponse.cookies   s    == (NDM}}r7   /)	expiresdomainmax_agepathsecurehttponlyversionsamesitepartitionednamevaluer   r   r   r   r   r   r   r   r   c       	         D   | j                   t               | _         || j                   |<   | j                   |   }|||d<   n|j                  d      dk(  r|d= |||d<   |t        |      |d<   nd|v r|d= ||d<   |||d<   |||d<   |	|	|d	<   |
|
|d
<   |||d<   yy)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   )rD   r   rl   str)rP   r   r   r   r   r   r   r   r   r   r   r   cs                r8   
set_cookiezStreamResponse.set_cookie   s    ( == (NDM#dMM$"AiLUU9!@@) AhKw<AiL!^)&	 AhK$AjM"AiL$AjM"*Am #r7   )r   r   r   r   r   c                    | j                   | j                   j                  |d       | j                  |ddd|||||	       y)zBDelete cookie.

        Creates new empty expired cookie.
        Nrg   r   r   )r   r   r   r   r   r   r   )rD   popr   )rP   r   r   r   r   r   r   s          r8   
del_cookiezStreamResponse.del_cookie  sN     ==$MMdD)3 	 
	
r7   c                     t         |   S rS   )supercontent_lengthrP   	__class__s    r8   r   zStreamResponse.content_length3  s     w%%r7   c                     |It        |      }| j                  rt        d      t        |      | j                  t
        j                  <   y | j                  j                  t
        j                  d        y )Nz<You can't set content length when chunked encoding is enable)rj   r<   r   r   rN   r   r~   r   rP   r   s     r8   r   zStreamResponse.content_length8  s\    JE}}"R  25UDMM$--.MMd1148r7   c                     t         |   S rS   )r   content_typer   s    r8   r   zStreamResponse.content_typeD  s     w##r7   c                 \    | j                    t        |      | _        | j                          y rS   )r   r   _content_type_generate_content_type_headerr   s     r8   r   zStreamResponse.content_typeI  s#     Z**,r7   c                     t         |   S rS   )r   charsetr   s    r8   r   zStreamResponse.charsetO  s     wr7   c                    | j                   }|dk(  rt        d      | j                  J || j                  j                  dd        n&t	        |      j                         | j                  d<   | j                          y )Napplication/octet-streamzYSetting charset for application/octet-stream doesn't make sense, setup content_type firstr   )r   r   _content_dictr   r   lowerr   )rP   r   ctypes      r8   r   zStreamResponse.charsetT  s    !!..?  !!---=""9d3,/J,<,<,>Dy)**,r7   c                 f    t        | j                  j                  t        j                              S )zuThe value of Last-Modified HTTP header, or None.

        This header is represented as a `datetime` object.
        )r   rN   rl   r   LAST_MODIFIEDrT   s    r8   last_modifiedzStreamResponse.last_modifiedc  s$     t}}001C1CDEEr7   c                    |+| j                   j                  t        j                  d        y t	        |t
        t        f      rXt        j                  dt        j                  t        j                  |                  | j                   t        j                  <   y t	        |t        j                        r@t        j                  d|j                               | j                   t        j                  <   y t	        |t              r|| j                   t        j                  <   y dt        |      j                    }t#        |      )Nz%a, %d %b %Y %H:%M:%S GMTz$Unsupported type for last_modified: )rN   r   r   r   r   rj   floattimestrftimegmtimemathceildatetimeutctimetupler   typer3   	TypeError)rP   r   msgs      r8   r   zStreamResponse.last_modifiedk  s     =MMd00$7U|,04+T[[59I-J1DMM$,,- x00104+U-?-?-A1DMM$,,- s#05DMM$,,-8e9M9M8NOCC. r7   c                    | j                   j                  t        j                        }|sy |t        k(  rt        t              S t        j                  |      }|sy |j                  dd      \  }}t        t        |      |      S )N)r   r      )is_weakr   )
rN   rl   r   ETAGr   r   r   	fullmatchgroupr   )rP   quoted_valuematchr   r   s        r8   etagzStreamResponse.etag  st    }}((3X%h''((6Q*M
 	
r7   c                    |+| j                   j                  t        j                  d        y t	        |t
              r	|t        k(  s#t	        |t              r5|j                  t        k(  r"t        | j                   t        j                  <   y t	        |t
              r-t        |       d| d| j                   t        j                  <   y t	        |t              ryt	        |j                  t
              r_t        |j                         |j                  rd|j                   dnd|j                   d}|| j                   t        j                  <   y t        dt        |       d      )N"zW/"zUnsupported etag type: z . etag must be str, ETag or None)rN   r   r   r   r   r   r   r   r   r    r   rm   r   )rP   r   	hdr_values      r8   r   zStreamResponse.etag  s   =MMdii.$():ud#x(?'/DMM$))$s#&)*5'|DMM$))$t$EKK)E,05#ekk]!,Qu{{mSTCUI'0DMM$))$)$u+ 71 2 r7   CONTENT_TYPEc                     | j                   J | j                  J dj                  d | j                   j                         D              }|r| j                  dz   |z   }n| j                  }|| j                  |<   y )Nz; c              3   0   K   | ]  \  }}| d |   yw)=Nr6   ).0kvs      r8   	<genexpr>z?StreamResponse._generate_content_type_header.<locals>.<genexpr>  s     M$!QaS!:Ms   )r   r   joinitemsrN   )rP   r   paramsr   s       r8   r   z,StreamResponse._generate_content_type_header  s|     !!---!!---M$2D2D2J2J2LMM&&-6E&&E&+l#r7   codingc                 P  K   |t         j                  u ry | j                  J |j                  | j                  t
        j                  <   | j                  j                  |j                  | j                         | j                  j                  t
        j                  d        y wrS   )r(   r2   rA   r   rN   r   CONTENT_ENCODINGr   r>   popallr~   )rP   r   s     r8   _do_start_compressionz$StreamResponse._do_start_compression  s     ]+++##////5||d++,//LL$44	

 	T00$7s   B$B&requestc                 Z  K   | j                   r$| j                  | j                          d {    y |j                  j                  t        j
                  d      j                         }t        j                         D ]$  \  }}||v s| j                  |       d {     y  y 7 y7 
w)Nrg   )	r?   r   rI   rl   r   ACCEPT_ENCODINGr   CONTENT_CODINGSr   )rP   r   accept_encodingr   r   s        r8   _start_compressionz!StreamResponse._start_compression  s     "",,T-D-DEEE "//--d.B.BBGMMO,224 	ME6'00888	 F 9s(   +B+B'AB+
B+B)	B+)B+c                    K   | j                   ry | j                  | j                  S t        |j                  | j                        | _        | j                  |       d {   S 7 wrS   )rB   rA   r   methodrG   rC   _start)rP   r   s     r8   preparezStreamResponse.prepare  sT     >>+'''#5gnndkk#R [[))))s   AA(!A&"A(c                    K   || _         |j                  x}| _        | j                          d {    |j                  |        d {    | j	                          d {    |S 7 77  7 
wrS   )r@   rA   _prepare_headers_prepare_hook_write_headers)rP   r   writers      r8   r   zStreamResponse._start  sj     	(/(?(??%##%%%##D)))!!###	 	&)#s3   .A.A(A.	A*
A.!A,"A.*A.,A.c                 V  K   | j                   }|J | j                  }|J | j                  }||j                  }|| _        |j                  }| j
                  }| j                  rT| j                  j                         D ]7  }|j                  d      dd  }|j                  t        j                  |       9 | j                  r| j                  |       d {    | j                  rr|t        k7  r9t!        d|j                  j"                   d|j                  j$                         | j&                  s|j)                          d|t        j*                  <   np| j,                  rd| j.                  |_        |j0                  G|t        k\  r0| j&                  s2|j)                          d|t        j*                  <   n| j&                  sd}| j&                  rgt        j2                  |v r1t5        |j6                  | j8                        r|t        j2                  = t        j*                  |v rY|t        j*                  = nG| j,                  r|j0                  n| j.                  dk7  r |j;                  t        j<                  d	       |j;                  t        j>                  tA                      |j;                  t        jB                  tD               t        jF                  |vr>|r|tH        k(  rd
|t        jF                  <   y y |t        k(  rd|t        jF                  <   y y y 7 Jw)Nrg   )headerr   z-Using chunked encoding is forbidden for HTTP/.r\   Fr   r   z
keep-aliveclose)%r@   rA   r;   rp   r   rN   rD   valuesoutputaddr   
SET_COOKIEr=   r   r<   r#   r   majorminorrC   enable_chunkingTRANSFER_ENCODING_length_checkr   lengthr~   r   r   rG   
setdefaultr   DATEr   SERVERr!   
CONNECTIONr"   )rP   r   r   rp   r   rI   cookier   s           r8   r   zStreamResponse._prepare_headers  s    ))"""%%!!!%%
 ++J%//--==--..0 4R04DOOU34 ))'222==-'"  ' 5 56a8M8M7NP  ++&&(2;../ //FM}}$m+33..0:C 6 6711!&J ##""g-2N3 D//0 %%0D223#11fmmt7J7JqPt002LM499&;&=>4;;8 ??')m+/;GDOO, ,M)+2( *	 *O 3s   CL)L&I
L)c                 :  K   | j                   }|J | j                  }|J |j                  }d|d    d|d    d| j                   d| j                   }|j                  || j                         d {    | j                  r|j                          y y 7 "w)NzHTTP/r   r   r    )	r@   rA   r   rY   rb   write_headersrN   _send_headers_immediatelysend_headers)rP   r   r   r   status_lines        r8   r   zStreamResponse._write_headers  s     ))"""%%!!!//gaj\71:,a~Qt||nU"";>>>))! * 	?s   A4B6B7#Bdatac                   K   t        |t        t        t        f      sJ dt	        |      z         | j
                  rt        d      | j                  t        d      | j                  j                  |       d {    y 7 w)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   rB   r   rA   writerP   r  s     r8   r
  zStreamResponse.write(  s|     5)Z0
 	>04:=	> 
 >>FGG'EFF""((...s   A;B=B>Bc                    K   | j                   rJ d       | j                  J d       t        j                  dt        d       | j                  j                          d {    y 7 w)NzEOF has already been sentResponse has not been startedz2drain method is deprecated, use await resp.write()r   )
stacklevel)rB   rA   rw   rx   ry   drainrT   s    r8   r  zStreamResponse.drain4  s`     >>>#>>!##/P1PP/@	

 ""((***s   A A*"A(#A*c                 R  K   t        |t        t        t        f      sJ dt	        |      z         | j
                  ry | j                  J d       | j                  j                  |       d {    d| _        d | _        | j                  j                  | _
        d | _        y 7 5w)Nr  r  T)r   r  r  r	  r   rB   rA   	write_eofr@   output_sizert   r  s     r8   r  zStreamResponse.write_eof>  s     5)Z0
 	>04:=	> 
 >>##/P1PP/"",,T222	 00<<#	 	3s   A-B'/B%06B'c                    | j                   rd}nM| 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<>)rB   rU   r@   r   r   r   r3   rH   )rP   infos     r8   __repr__zStreamResponse.__repr__N  sz    >>D]]99(((ii&&'q(8:D!D4>>**+1T[[M4&BBr7   keyc                      y rS   r6   rP   r  s     r8   __getitem__zStreamResponse.__getitem__X  s    7:r7   c                      y rS   r6   r  s     r8   r  zStreamResponse.__getitem__[  s    ,/r7   c                      | j                   |   S rS   rM   r  s     r8   r  zStreamResponse.__getitem__^  s    {{3r7   c                      y rS   r6   rP   r  r   s      r8   __setitem__zStreamResponse.__setitem__a  s    DGr7   c                      y rS   r6   r!  s      r8   r"  zStreamResponse.__setitem__d  s    9<r7   c                     t        |t              sO|t        j                  vr=ddlm} t        j                  j                  |       t        j                  d|d       || j                  |<   y )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   r)   rE   web_exceptionsr%  r   rw   rx   rM   )rP   r  r   r%  s       r8   r"  zStreamResponse.__setitem__g  s\    3,>888 9))--c2MM( * !Cr7   c                     | j                   |= y rS   r  r  s     r8   __delitem__zStreamResponse.__delitem__y  s    KKr7   c                 ,    t        | j                        S rS   )lenrM   rT   s    r8   __len__zStreamResponse.__len__|  s    4;;r7   c                 ,    t        | j                        S rS   )iterrM   rT   s    r8   __iter__zStreamResponse.__iter__  s    DKK  r7   c                 *    t        t        |             S rS   )hashidrT   s    r8   __hash__zStreamResponse.__hash__  s    BtH~r7   otherc                 
    | |u S rS   r6   )rP   r4  s     r8   __eq__zStreamResponse.__eq__  s    u}r7   c                      y)NTr6   rT   s    r8   __bool__zStreamResponse.__bool__  s    r7   )rK   zasyncio.Task[None] | NonerS   )rK   N)NN)rK   zCIMultiDict[str])r   r-   rK   Nr7   )[r3   r4   r5   r  r  r$   __annotations__r   r:   r;   r   r<   r=   r>   rj   r?   r(   r@   r
   rA   r   rB   rC   rt   rD   r   r  setrE   r   r'   r   rQ   propertyrU   rW   rG   r\   r_   rH   re   rO   rp   rr   ru   r{   r   r   rI   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   r.   r  r	   r"  r)  r,  r   r/  r3  objectr6  r8  __classcell__r   s   @r8   r)   r)   M   sh   %<)#g--ME#K#HdL$(,3:,/3,3$(D(=
!(37O)D07It'++L$(HlT!( $"uNCH$
 !'+15) ) d
	)
 $) #3'$.) 
)4 B$ B B         !T ! !    ")) d
) 
	)# sTz d   D4K    ! !S ! ! 0s 0 0
#*   .2#.m#d*. *. 
	.*      #!$(" $"##'3+3+ 3+
 t3+ d
3+ sT!3+ 3+ t3+ +3+ t3+ *3+ D[3+ 
3+r "" $#

 d
	

 
 t
 +
 *
 

: &d
 & & 	9C$J 	94 	9 	9 $c $ $ -# -$ - -
 t   ^^-S4Z -D - - Fx0047 F F !5[8#4#44s:TA!	! !& 
dTk 
 
 
[[$*t+   * $(#4#4
, 
,	
,
8- 
8D 
8
*] *7Kd7R *M 6J ?3B"
/	 1J > 
/4 
/+$E $D $ C# C :{2:2: :/s/s/ / s[_4     G{2GrGdG G<s<3<4< <!s[_4 !S !T !$s[_4     !(3S)9#9: !# F t $ r7   r)   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 ) r*   N_compressed_bodyFrF   )	bodyrG   rH   textrI   r   r   zlib_executor_sizezlib_executorrC  rG   rH   rD  rI   r   r   rE  rF  rK   c       	         V   ||t        d      |t               }
nt        |      }
|d|v rt        d      |}t        j                  |
v r|s|rt        d      t	        |t
              st        dt        |      z        |d}|d}|dz   |z   |
t        j                  <   |j                  |      }d }n@t        j                  |
v r||*t        d      |||d|z   z  }||
t        j                  <   t        | )  |||
	       ||| _        n|| _        || _        |	| _        y )
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=)rG   rH   rJ   )rm   r   r   r   r   r   r   r   encoder   rQ   rD  rC  _zlib_executor_size_zlib_executor)rP   rC  rG   rH   rD  rI   r   r   rE  rF  real_headersr   s              r8   rQ   zResponse.__init__  sj     0EFF?-8]L&w/L#	\(AKLL  L07$'  "$,#$DtDz$QRR'#/L?%G2>2MPW2WT../{{7+,.'7+> # 
 %"w 66.:L**+v\RDIDI#5 +r7   c                     | j                   S rS   )r:   rT   s    r8   rC  zResponse.body  s    zzr7   c                    |d | _         d | _        y t        |t        t        f      r|| _         d | _        y 	 t        j
                  j                  |      x| _         }| j                  }t        j                  |vr|j                  |t        j                  <   |j                  r,|j                  j                         D ]  \  }}||vs|||<    d | _        y # t        j                  $ r t        dt        |      z        w xY w)NzUnsupported body type %r)r:   r   r  r  r   PAYLOAD_REGISTRYrl   LookupErrorrm   r   rN   r   r   r   rI   r   rB  )rP   rC  rI   r  r   s        r8   rC  zResponse.body  s    <DJ* !%) ui01DJ& !%#J$+$<$<$@$@$FF
T mmG   /-1->->))* ||"&,,"4"4"6 -JC')',- !% && J !;d4j!HIIJs   &C +Dc                 n    | j                   y | j                   j                  | j                  xs d      S )NrJ  )r:   decoder   rT   s    r8   rD  zResponse.text  s/    :: zz  !899r7   c                     |#t        |t              sJ dt        |      z         | j                  dk(  rd| _        | j                  d| _        |j                  | j                        | _        d | _        y )NrH  r   rI  rJ  )r   r   r   r   r   rK  r:   rB  )rP   rD  s     r8   rD  zResponse.text  st    |z# 
 	9+d4j8	9 
  :: ,D<<"DL[[.
 $r7   c                 \   | j                   ry t        j                  | j                  v r&t	        | j                  t        j                           S | j
                  t        | j
                        S t        | j                  t              ry | j                  t        | j                        S y)Nr   )
r<   r   r~   rN   rj   rB  r+  r   r:   r$   rT   s    r8   r   zResponse.content_length  s    ==$--/t}}T%8%89::  ,t,,--

G,ZZ#tzz?"r7   r   c                     t        d      )Nz#Content length is set automatically)r   r   s     r8   r   zResponse.content_length  s    @AAr7   r  c                   K   | j                   ry | j                  | j                  }n| j                  }|r
J d|       | j                  J | j                  J || j
                  rt        |           d {    y t        | j                  t              rg	 | j                  j                  | j                         d {    | j                  j                          d {    t        |           d {    y t        |   t        t        |             d {    y 7 7 e7 E# | j                  j                          d {  7   w xY w7 Y7 5w)Nzdata arg is not supported, got )rB   rB  r:   r@   rA   rC   r   r  r   r$   r
  r   r   r  )rP   r  rC  r   s      r8   r  zResponse.write_eof  s%    >>  (::D((DC:4(CCxyy$$$##///<433'#%%%

G,)jj&&t';';<<<jj&&((('#%%%'#D$5666 & =(djj&&(((%6sx   A:E=D*>E(D0 D,D0 E(D.)E>E?%E$E%E,D0 .E0EEEEEr   r-   c                   K   t         j                  | j                  v r<t        |j                  | j
                        r| j                  t         j                  = n| j                  st        | j                  t              r?| j                  j                  x}t        |      | j                  t         j                  <   ny| j                  rt        | j                        nd}|dk7  s+| j
                  dk7  rB|j                  t         j                  vr&t        |      | j                  t         j                  <   t        | =  |       d {   S 7 w)N0i0  )r   r~   rN   r   r   rG   r<   r   r:   r$   sizer   r+  METH_HEAD_ALLr   r   )rP   r   r[  body_lenr   s       r8   r   zResponse._start3  s     $--/+GNNDKKHMM$"5"56$**g. JJOO+D89<TDMM$"5"56.2jj3tzz?cs?KK3&7>>ASAS+S9<XDMM$"5"56W^G,,,,s   E	EEEr   c                 \  K   | j                   st        | j                  t              rt        |   |       d {   S |t        j                  u ry t        |j                  | j                  | j                        }| j                  J |j                  | j                         d {   |j                         z   | _        |j                  | j                  t         j"                  <   t%        t'        | j                              | j                  t         j(                  <   y 7 7 }w)N)encodingmax_sync_chunk_sizeexecutor)r<   r   r:   r$   r   r   r(   r2   r   r   rL  rM  compressflushrB  rN   r   r   r   r+  r~   )rP   r   
compressorr   s      r8   r   zResponse._do_start_compressionE  s     ==Jtzz7;6v>>>]+++ $\\ $ 8 8((


 zz%%%%%djj11J4D4D4FF 	 06||d++,-0T5J5J1K-Ld))* ? 2s#   9D,D(A/D,,D*-A<D,*D,r9  )r3   r4   r5   rB  r  r:  r  r   r	   rj   r   r'   r   rQ   r<  r  r$   rC  r=  rD  r   r  r   r   r(   r   r?  r@  s   @r8   r*   r*     s   %)edl) %
 !'+#'""5)-?, ?, 	?,
 d
?, Dj?, $?, Dj?, t?,  ?,  $?, 
?,B ei''1D8   
[[% % % %2 :cDj : : 
[[% % % % d
  $ BC$J B4 B B7E 7D 7*-M -6J -$M- MD M Mr7   r*   rF   zapplication/json)rD  rC  rG   rH   rI   r   dumpsr  rD  rC  rG   rH   rI   r   re  rK   c                b    | t         ur|s|rt        d       ||       }t        ||||||      S )Nz3only one of data, text, or body should be specified)rD  rC  rG   rH   rI   r   r   rm   r*   )r  rD  rC  rG   rH   rI   r   re  s           r8   r+   r+   Y  sE     84RSS;D! r7   rC  rG   rH   rI   r   c                \    | 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.
    z,only one of data or body should be specifiedrh  rg  )r  re  rC  rG   rH   rI   r   s          r8   r,   r,   s  sC     8KLL;D! r7   )Jasynciocollections.abccollectionsr   enumjsonr   r   rw   r   r   concurrent.futuresr   httpr   http.cookiesr   typingr   r	   r
   r   r   r   	multidictr   r   rg   r   r   abcr   compression_utilsr   r   helpersr   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   typedefsr%   r&   r'   r   phraserk   __all__web_requestr-   r   	BaseClassr.   Enumr(   r   r)   r*   re  r  rj   r+   r,   )http_statusr   s   00r8   <module>r~     s7           4 '  % H H '  % B    @ ?  A AKUVK+##[%7%77V (sCx(I..I T]DII  7DDF6<<'D|^C+c*:$:C$?@, |~JM~ JM\  #'*
 * $,	
  $J D    6  #'*
  $,	
  $J D   ] WB Es   !F"F'