
    g6t                        U 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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mZmZmZmZmZmZ d dlmZ d dlZd dlmZmZmZm Z m!Z! d dl"m#Z# dd	l$m%Z% dd
l&m'Z' ddl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9m:Z: ddl;m<Z<m=Z= ddl>m?Z?m@Z@mAZAmBZBmCZC ddlDmEZE ddlFmGZG dZHerddlImJZJ ddlKmLZL ddlMmNZN  ej                  ddd       G d d             ZPej                  ej                  z   dz   ZSeeT   eUd<   deS dZVeeT   eUd<   d j                  d!j                  d" d# eY eZd$d%            z   D                    Z[eeT   eUd&<   d'Z\eeT   eUd(<   d)j                  e[e\*      Z]eeT   eUd+<   d,j                  eVe]-      Z^eeT   eUd.<    ej                  d/      Z`eeeT      eUd0<    ej                  e^      ZaeeeT      eUd1<    G d2 d3eeTef   e/      Zb G d4 d5eb      Zcy)6    N)SimpleCookie)MappingProxyType)TYPE_CHECKINGAnyDictFinalIteratorMappingMutableMappingOptionalPatternTupleUnioncast)	parse_qsl)CIMultiDictCIMultiDictProxy	MultiDictMultiDictProxyMultiMapping)URL   )hdrs)AbstractStreamWriter)	_SENTINELDEBUGETAG_ANYLIST_QUOTED_ETAG_REChainMapProxyETagHeadersMixinparse_http_datereifysentinelset_exception)RawRequestMessage)HttpVersion)BodyPartReaderMultipartReader)EmptyStreamReaderStreamReader)DEFAULT_JSON_DECODERJSONDecoderLooseHeaders
RawHeadersStrOrURL)HTTPRequestEntityTooLarge)StreamResponse)BaseRequest	FileFieldRequest)Application)RequestHandler)UrlMappingMatchInfoT)auto_attribsfrozenslotsc                   Z    e Zd ZU eed<   eed<   ej                  ed<   eed<   ee   ed<   y)r4   namefilenamefilecontent_typeheadersN)__name__
__module____qualname__str__annotations__ioBufferedReaderr        H/var/www/openai/venv/lib/python3.12/site-packages/aiohttp/web_request.pyr4   r4   L   s)    
IM


c""rJ   r4   z!#$%&'*+.^_`|~-_TCHAR[z]+_TOKENz[{}] c              #   2   K   | ]  }t        |        y wN)chr).0cs     rK   	<genexpr>rU   [   s     KJSVJs   )	       !   #      _QDTEXTz
\\[\t !-~]_QUOTED_PAIRz"(?:{quoted_pair}|{qdtext})*")qdtextquoted_pair_QUOTED_STRINGz0({token})=({token}|{quoted_string})(:\d{{1,4}})?)tokenquoted_string_FORWARDED_PAIRz\\([\t !-~])_QUOTED_PAIR_REPLACE_RE_FORWARDED_PAIR_REc                      e Zd ZU ej                  ej
                  ej                  ej                  ej                  hZ	e
j                   eg d      z  ZdZeeeeeef         ed<   dZee   ed<   dddddddeded	d
dedddej4                  dedeeeef      dee   dee   dee   ddfdZeeeeeeeddeee f   dee!e f   dee"e f   deee f   deee f   deee f   deee f   dd fdZ#e$d^d       Z%e$d_d       Z&e$deejN                     fd       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.e+dej4                  fd"       Z/d#edefd$Z0d#ed%eddfd&Z1d#eddfd'Z2defd(Z3de4e   fd)Z5e+de6fd*       Z7e+de8e9eef   d+f   fd,       Z:e+defd-       Z;e+defd.       Z<e+de=fd/       Z>e+defd0       Z?e+dee   fd1       Z@e+de-fd2       ZAe+defd3       ZBe+defd4       ZCe+defd5       ZDe+d`d6       ZEe+defd7       ZFe+deGe   fd8       ZHe+deIfd9       ZJe+deeKj                     fd:       ZLe+deeKj                     fd;       ZMeNd<ede4eO   fd=       ZPeQd>ee   dee8eOd+f      fd?       ZRe+dee8eOd+f      fd@       ZSe+dee8eOd+f      fdA       ZTe+deeKj                     fdB       ZUe+de6fdC       ZVe+de9eef   fdD       ZWe+deXfdE       ZYe+defdF       ZZe$de6fdG       Z[e$de6fdH       Z\e+de6fdI       Z]dadJZ^defdKZ_defdLZ`eadMdNebdefdOZcdedfdPZedbdQZfdcdRedSedefdTZgdefdUZhdVeide6fdWZjde6fdXZkdYelddfdZZmd[enddfd\Zodad]Zpy)dr3   )_message	_protocol_payload_writer_payload_headers_method_version_rel_url_post_read_bytes_state_cache_task_client_max_size_loop_transport_sslcontext_transport_peernameNrn   ro   i   )client_max_sizestateschemehostremotemessagepayloadprotocolr7   payload_writertaskasyncio.Task[None]looprw   rx   ry   rz   r{   returnc                   || _         || _        || _        || _        |j                  | _        |j                  | _        |j                  | _	        i | _
        |j                  }|j                  r}|	|j                  |	      }|
|j                  |
      }|| j                  d<   |j                  | j                  d<   |j                   | j                  d<   |j#                         | _        n)|| _        |	|	| j                  d<   |
|
| j                  d<   |i n|| _        || _        || _        || _        |j.                  }|J |j1                  d      | _        |j1                  d      | _        ||| j                  d<   y y )Nurlrz   ry   
sslcontextpeernamer{   )rf   rg   rh   ri   rA   rj   methodrk   versionrl   rq   r   absolutewith_scheme	with_hostrz   ry   relativerm   rp   rr   rs   rt   	transportget_extra_inforu   rv   )selfr|   r}   r~   r   r   r   rw   rx   ry   rz   r{   r   r   s                 rK   __init__zBaseRequest.__init__   sj     !-/6~~&(kk<<!oof-mmD) "%DKK"%((DKK$'JJDKK!LLNDMDM!(.H%&*F#!Mbu
 /
&&	$$$%.%=%=l%K"#,#;#;J#G $*DKK! rJ   r   rel_urlrA   ry   rz   r{   rw   r   r   rA   c                   | j                   rt        d      i }|t        ur||d<   |t        urt        |      }	|	|d<   t	        |	      |d<   |t        ur=t        t        |            |d<   t        d |d   j                         D              |d<    | j                  j                  di |}
i }|t        ur||d<   |t        ur||d	<   |t        ur||d
<   |t        u r| j                  } | j                  |
| j                  | j                  | j                  | j                   | j"                  f|| j$                  j'                         d|S )a  Clone itself with replacement some attributes.

        Creates and returns a new instance of Request object. If no parameters
        are given, an exact copy is returned. If a parameter is not passed, it
        will reuse the one from the current request object.
        z.Cannot clone request after reading its contentr   r   pathrA   c              3   f   K   | ])  \  }}|j                  d       |j                  d       f + yw)utf-8N)encode)rS   kvs      rK   rU   z$BaseRequest.clone.<locals>.<genexpr>   s3      '2DAq '"AHHW$562s   /1raw_headersry   rz   r{   )rw   rx   rI   )ro   RuntimeErrorr$   r   rE   r   r   tupleitemsrf   _replacers   	__class__ri   rg   rh   rr   rt   rp   copy)r   r   r   rA   ry   rz   r{   rw   dctnew_urlr|   kwargss               rK   clonezBaseRequest.clone   sa   " OPP !"CM("w<G CJg,CK("-k'.BCC	N!& '	N002' "C
 )$--((/3/!%F8x!F6N!%F8h&"33Ot~~MMNN  JJJJ

 ,++""$

 

 
	
rJ   c                     | j                   S rQ   )rr   r   s    rK   r   zBaseRequest.task  s    zzrJ   c                     | j                   S rQ   )rg   r   s    rK   r~   zBaseRequest.protocol  s    ~~rJ   c                 H    | j                   y | j                   j                  S rQ   )rg   r   r   s    rK   r   zBaseRequest.transport  s    >>!~~'''rJ   c                     | j                   S rQ   )rh   r   s    rK   writerzBaseRequest.writer  s    ###rJ   c                     | j                   S rQ   )rs   r   s    rK   rw   zBaseRequest.client_max_size  s    $$$rJ   c                 R    t        j                  dt        d       | j                  S )NzRequest.message is deprecated   
stacklevel)warningswarnDeprecationWarningrf   r   s    rK   r|   zBaseRequest.message"  s    57IVWX}}rJ   c                     | j                   S rQ   )rm   r   s    rK   r   zBaseRequest.rel_url'  s    }}rJ   c                 R    t        j                  dt        d       | j                  S )Nz#request.loop property is deprecated   r   )r   r   r   rt   r   s    rK   r   zBaseRequest.loop+  s#    13ERS	
 zzrJ   keyc                      | j                   |   S rQ   rp   r   r   s     rK   __getitem__zBaseRequest.__getitem__4  s    {{3rJ   valuec                 "    || j                   |<   y rQ   r   )r   r   r   s      rK   __setitem__zBaseRequest.__setitem__7  s     CrJ   c                     | j                   |= y rQ   r   r   s     rK   __delitem__zBaseRequest.__delitem__:  s    KKrJ   c                 ,    t        | j                        S rQ   )lenrp   r   s    rK   __len__zBaseRequest.__len__=  s    4;;rJ   c                 ,    t        | j                        S rQ   )iterrp   r   s    rK   __iter__zBaseRequest.__iter__@  s    DKK  rJ   c                      | j                   dk(  S )z5A bool indicating if the request is handled with SSL.https)ry   r   s    rK   securezBaseRequest.secureE  s     {{g%%rJ   .c                 <   g }| j                   j                  j                  t        j                  d      D ]X  }t        |      }d}d}i }|j                  t        j                  |             d|cxk  r|k  sEn Ht        j                  ||      }||r|j                  d|      }n|j                         \  }}	}
|	d   dk(  rt        j                  d|	dd       }	|
r|	|
z  }	|	||j                         <   |t        |j!                  d            z  }d	}ne||   dk(  r.d}i }|j                  t        j                  |             |dz  }n/||   d
k(  rd}|dz  }n||   dv r|dz  }n|j                  d|      }d|cxk  r|k  rX [ t#        |      S )a  A tuple containing all parsed Forwarded header(s).

        Makes an effort to parse Forwarded headers as specified by RFC 7239:

        - It adds one (immutable) dictionary per Forwarded 'field-value', ie
          per proxy. The element corresponds to the data in the Forwarded
          field-value added by the first proxy encountered by the client. Each
          subsequent item corresponds to those added by later proxies.
        - It checks that every value has valid syntax in general as specified
          in section 4: either a 'token' or a 'quoted-string'.
        - It un-escapes found escape sequences.
        - It does NOT validate 'by' and 'for' contents as specified in section
          6.
        - It does NOT validate 'host' contents (Host ABNF).
        - It does NOT validate 'proto' contents for valid URI scheme names.

        Returns a tuple containing one or more immutable dicts
        rI   r   F,"z\1r   T;z 	)rf   rA   getallr   	FORWARDEDr   appendtypesr   rd   matchfindgroupsrc   sublowergroupr   )r   elemsfield_valuelengthposneed_separatorelemr   r=   r   ports              rK   	forwardedzBaseRequest.forwardedJ  s   ( ==0077KK%FC"N#%DLL//56s#V#*00cB$%)..sC8,1LLN)eT 8s?$;$?$?uQr{$SE!TME-2TZZ\*s5;;q>22)- %,%*NDLL!7!7!=>1HC %,%*N1HC %. 1HC &**34C? s#V## LL U|rJ   c                     | j                   ryy)a  A string representing the scheme of the request.

        Hostname is resolved in this order:

        - overridden value by .clone(scheme=new_scheme) call.
        - type of connection to peer: HTTPS if socket is SSL, HTTP otherwise.

        'http' or 'https'.
        r   http)ru   r   s    rK   ry   zBaseRequest.scheme  s     %%rJ   c                     | j                   S )zyRead only property for getting HTTP method.

        The value is upper-cased str like 'GET', 'POST', 'PUT' etc.
        )rk   r   s    rK   r   zBaseRequest.method  s     ||rJ   c                     | j                   S )zxRead only property for getting HTTP version of request.

        Returns aiohttp.protocol.HttpVersion instance.
        )rl   r   s    rK   r   zBaseRequest.version  s     }}rJ   c                     | j                   j                  j                  t        j                        }||S t        j                         S )a@  Hostname of the request.

        Hostname is resolved in this order:

        - overridden value by .clone(host=new_host) call.
        - HOST HTTP header
        - socket.getfqdn() value

        For example, 'example.com' or 'localhost:8080'.

        For historical reasons, the port number may be included.
        )rf   rA   getr   HOSTsocketgetfqdn)r   rz   s     rK   rz   zBaseRequest.host  s:     }}$$((3K~~rJ   c                     | j                   yt        | j                   t        t        f      rt	        | j                   d         S t	        | j                         S )zRemote IP of client initiated HTTP request.

        The IP is resolved in this order:

        - overridden value by .clone(remote=new_remote) call.
        - peername of opened socket
        Nr   )rv   
isinstancelistr   rE   r   s    rK   r{   zBaseRequest.remote  sN     ##+d..u>t//2334++,,rJ   c                     t        j                  | j                  | j                        j	                  | j
                        S )zThe full URL of the request.)ry   	authority)r   buildry   rz   joinrm   r   s    rK   r   zBaseRequest.url  s,    
 yytyyAFFt}}UUrJ   c                 .    | j                   j                  S )z_The URL including *PATH INFO* without the host or scheme.

        E.g., ``/app/blog``
        )rm   r   r   s    rK   r   zBaseRequest.path  s     }}!!!rJ   c                 ,    t        | j                        S )zXThe URL including PATH_INFO and the query string.

        E.g, /app/blog?id=10
        )rE   rm   r   s    rK   path_qszBaseRequest.path_qs  s     4==!!rJ   c                 .    | j                   j                  S )zThe URL including raw *PATH INFO* without the host or scheme.

        Warning, the path is unquoted and may contains non valid URL characters

        E.g., ``/my%2Fpath%7Cwith%21some%25strange%24characters``
        )rf   r   r   s    rK   raw_pathzBaseRequest.raw_path  s     }}!!!rJ   c                 .    | j                   j                  S )z7A multidict with all the variables in the query string.)rm   queryr   s    rK   r   zBaseRequest.query  s     }}"""rJ   c                 .    | j                   j                  S )z:The query string in the URL.

        E.g., id=10
        )rm   query_stringr   s    rK   r   zBaseRequest.query_string  s     }})))rJ   c                     | j                   S )z4A case-insensitive multidict proxy with all headers.)rj   r   s    rK   rA   zBaseRequest.headers       }}rJ   c                 .    | j                   j                  S )z$A sequence of pairs for all headers.)rf   r   r   s    rK   r   zBaseRequest.raw_headers  s     }}(((rJ   c                 f    t        | j                  j                  t        j                              S )zyThe value of If-Modified-Since HTTP header, or None.

        This header is represented as a `datetime` object.
        )r"   rA   r   r   IF_MODIFIED_SINCEr   s    rK   if_modified_sincezBaseRequest.if_modified_since  s$     t||//0F0FGHHrJ   c                 f    t        | j                  j                  t        j                              S )z{The value of If-Unmodified-Since HTTP header, or None.

        This header is represented as a `datetime` object.
        )r"   rA   r   r   IF_UNMODIFIED_SINCEr   s    rK   if_unmodified_sincezBaseRequest.if_unmodified_since	  s$     t||//0H0HIJJrJ   etag_headerc              #      K   | t         k(  rt        dt                yt        j                  |       D ]5  }|j	                  ddd      \  }}}|r yt        t        |      |       7 yw)z'Extract `ETag` objects from raw header.F)is_weakr   r   r      N)r   r    r   finditerr   bool)r  r   r  r   garbages        rK   _etag_valueszBaseRequest._etag_values  ss      (" 
 -55kB*/++aA*>'  M  Cs   A,A.header_valuec                 <    |sy t        | j                  |            S rQ   )r   r
  )clsr  s     rK   _if_match_or_none_implz"BaseRequest._if_match_or_none_impl&  s      S%%l344rJ   c                 r    | j                  | j                  j                  t        j                              S )zxThe value of If-Match HTTP header, or None.

        This header is represented as a `tuple` of `ETag` objects.
        )r  rA   r   r   IF_MATCHr   s    rK   if_matchzBaseRequest.if_match/  s(     **4<<+;+;DMM+JKKrJ   c                 r    | j                  | j                  j                  t        j                              S )z}The value of If-None-Match HTTP header, or None.

        This header is represented as a `tuple` of `ETag` objects.
        )r  rA   r   r   IF_NONE_MATCHr   s    rK   if_none_matchzBaseRequest.if_none_match7  s*     **4<<+;+;D<N<N+OPPrJ   c                 f    t        | j                  j                  t        j                              S )zpThe value of If-Range HTTP header, or None.

        This header is represented as a `datetime` object.
        )r"   rA   r   r   IF_RANGEr   s    rK   if_rangezBaseRequest.if_range?  s"     t||//>??rJ   c                 0    | j                   j                   S )zIs keepalive enabled by client?)rf   should_closer   s    rK   
keep_alivezBaseRequest.keep_aliveG  s     ==----rJ   c                     | j                   j                  t        j                  d      }t	        |      }t        |j                         D ci c]  \  }}||j                   c}}      S c c}}w )zMReturn request cookies.

        A read-only dictionary-like object.
        rO   )rA   r   r   COOKIEr   r   r   r   )r   rawparsedr   vals        rK   cookieszBaseRequest.cookiesL  sW     llt{{B/c" OHCcii OPP Os   A-
c                    | j                   j                  t        j                        }d\  }}|r	 d}t	        j
                  ||      d   \  }}|rt        |      nd}|rt        |      nd}||| }d}|||dz  }||k\  rt        d      ||cxu rt        d       t        ||d      S # t        $ r t        d      w xY w)	zMThe content of Range HTTP header.

        Return a slice instance.

        )NNNz^bytes=(\d*)-(\d*)$r   zrange not in acceptable formatr   zstart cannot be after endz"No start or end of range specified)
rj   r   r   RANGErefindall
IndexError
ValueErrorintslice)r   rngstartendpatterns        rK   
http_rangezBaseRequest.http_rangeV  s     mm

+
s?C0ZZ5a8
s "#c(tC"'CJTE} S_qC<$%@AA# !EFF $ UC##+  C !ABBCs   B0 0Cc                     | j                   S )zReturn raw payload stream.)ri   r   s    rK   contentzBaseRequest.contentz  r   rJ   c                 p    t        j                  dt        d       | j                  j	                          S )@Return True if request's HTTP BODY can be read, False otherwise.z$Deprecated, use .can_read_body #2005r   r   )r   r   r   ri   at_eofr   s    rK   has_bodyzBaseRequest.has_body  s1     	24FST	
 =='')))rJ   c                 8    | j                   j                          S )r1  )ri   r2  r   s    rK   can_read_bodyzBaseRequest.can_read_body  s     =='')))rJ   c                 8    t        | j                        t        uS )z6Return True if request has HTTP BODY, False otherwise.)typeri   r*   r   s    rK   body_existszBaseRequest.body_exists  s     DMM"*;;;rJ   c                    K   | j                   j                         s>| j                   j                          d{    | j                   j                         s=yy7 !w)zKRelease request.

        Eat unread part of HTTP BODY if present.
        N)ri   r2  readanyr   s    rK   releasezBaseRequest.release  sC     
 --&&(--''))) --&&()s   8AAAAc                 \  K   | j                   t               }	 | j                  j                          d{   }|j	                  |       | j
                  r1t        |      }|| j
                  k\  rt        | j
                  |      |sntt        |      | _         | j                   S 7 rw)z_Read request body if present.

        Returns bytes object with full request content.
        Nmax_sizeactual_size)	ro   	bytearrayri   r:  extendrs   r   r1   bytes)r   bodychunk	body_sizes       rK   readzBaseRequest.read  s     
 #;D"mm3355E"(( #D	I D$9$997%)%:%:	     %T{D 6s   5B,B*A3B,c                    K   | j                          d{   }| j                  xs d}|j                  |      S 7 %w)z1Return BODY as text using encoding from .charset.Nr   )rF  charsetdecode)r   
bytes_bodyencodings      rK   textzBaseRequest.text  s8     99;&
<<*7  ** 's   ><&>)loadsrM  c                N   K   | j                          d{   } ||      S 7 w)zReturn BODY as JSON.N)rL  )r   rM  rC  s      rK   jsonzBaseRequest.json  s#     YY[ T{ !s   %#%c                 J   K   t        | j                  | j                        S w)z3Return async iterator to process BODY as multipart.)r)   rj   ri   r   s    rK   	multipartzBaseRequest.multipart  s     t}}dmm<<s   !#c                   K   | j                   | j                   S | j                  | j                  vr$t        t	                     | _         | j                   S | j
                  }|dvr$t        t	                     | _         | j                   S t	               }|dk(  r| j                          d{   }| j                  }|j                          d{   }|*d}|j                  j                  t        j                        }t        |t              rb|j                  J |j                   r| j"                  j%                  dt&        j(                         d{   }|j+                  d       d{   }	|	r|j-                  |	      }	| j"                  j%                  d|j.                  |	       d{    |t1        |	      z  }d|cxk  r|k  r>n n;| j"                  j%                  d|j2                         d{    t5        ||      |j+                  d       d{   }	|	r| j"                  j%                  d|j6                  d       d{    |d}t9        |j                  |j                   t;        t<        j>                  |      ||j                        }
|jA                  |j                  |
       n|jC                  d	
       d{   }||jE                  d      r>|jG                  d      }|jA                  |j                  |j-                  |             n|jA                  |j                  |       |t1        |      z  }d|cxk  r|k  rn nt5        ||      tI        d      |j                          d{   }|nd| jC                          d{   }|rJ| jJ                  xs d}|jM                  tO        |jQ                         j-                  |      d	|             t        |      | _         | j                   S 7 r7 Q7 7 7 r7 +7 7 7 [7 7 w)zReturn POST parameters.N)rO   z!application/x-www-form-urlencodedmultipart/form-datarS  r   i   )sizer=  zapplication/octet-streamT)rI  ztext/r   )defaultz8To decode nested multipart you need to use custom reader)keep_blank_valuesrK  ))rn   rk   POST_METHODSr   r   r@   rQ  rs   nextrA   r   r   CONTENT_TYPEr   r(   r=   r>   rt   run_in_executortempfileTemporaryFile
read_chunkrI  writer   closer1   seekr4   r   rG   rH   addrF  
startswithget_charsetr&  rH  rA  r   rstrip)r   r@   outrQ  r>  fieldrT  field_cttmprD  ffr   rH  datas                 rK   postzBaseRequest.post  s    ::!::<<t000'	4DJ::((  
 

 (	4DJ::7@{00"nn..I,,H#..**E# ==,,T->->?e^4 ::111 ~~$(JJ$>$> ("8"8%  ',&6&6E&6&B B#$)LL$7E"&**"<"<T399e"TTT CJ.D 82d2&*jj&@&@syy&Q Q Q&?-54'" !" +0*:*:*:*F$FE $ #jj88sxxKKK#+'AH&!JJ!NN !2!2C8$!MM 

B/ ',jjj&= =#+x/B/B7/K&+&7&7&7&HGGGEJJW0EFGGEJJ6E
*x.$.";)1t#  %R  (nn..u #x $D,,1'

,,W5*.!( $C(
zzY / + !C U !R %GK !>  /$s   B,P?.P /#P?P#BP?P&P?8P)9AP?:P,;A	P?P/&P?+P2,P?3*P?P5A?P?P8B8P?P;P?P?3P=4A-P?#P?&P?)P?,P?/P?2P?5P?8P?;P?=P?r=   rU  c                 f    | j                   }||S |j                  }||S |j                  ||      S )z"Extra info from protocol transport)rg   r   r   )r   r=   rU  r~   r   s        rK   r   zBaseRequest.get_extra_info  s?    >>N&&	N''g66rJ   c                     | j                   j                  dd      j                  d      }dj                  | j                  j
                  | j                  |      S )Nasciibackslashreplacez<{} {} {} >)r   r   rI  formatr   rB   rk   )r   ascii_encodable_paths     rK   __repr__zBaseRequest.__repr__+  sS    #yy//9KLSS 
 ##NN##T\\3G
 	
rJ   otherc                 0    t        |       t        |      k(  S rQ   )id)r   rs  s     rK   __eq__zBaseRequest.__eq__3  s    $x2e9$$rJ   c                      y)NTrI   r   s    rK   __bool__zBaseRequest.__bool__6  s    rJ   responsec                    K   y wrQ   rI   )r   ry  s     rK   _prepare_hookzBaseRequest._prepare_hook9  s	     s   excc                 0    t        | j                  |       y rQ   )r%   ri   )r   r|  s     rK   _cancelzBaseRequest._cancel<  s    dmmS)rJ   c                     | j                   | j                  dk7  ry | j                   j                         D ]0  \  }}t        |t              s|j
                  j                          2 y )NrS  )rn   r@   r   r   r4   r?   r_  )r   	file_namefile_field_objects      rK   _finishzBaseRequest._finish?  sY    ::!2!26K!K -1JJ,<,<,>(I(+Y7!&&,,. -?rJ   )r   r   )r   r7   )r   zMultiMapping[str])r   N)r   z,MultiDictProxy[Union[str, bytes, FileField]]rQ   )qrB   rC   rD   r   
METH_PATCH	METH_POSTMETH_PUT
METH_TRACEMETH_DELETErW  r!   ATTRS	frozensetrn   r   r   r   rE   rB  r4   rF   ro   r&   r+   r   asyncioAbstractEventLoopr'  r   r   r   r$   r   r0   r.   r   propertyr   r~   	Transportr   r   rw   r#   r|   r   r   r   r   r   r   r   r	   r   r  r   r   r
   r   ry   r   r'   r   rz   r{   r   r   r   r   r   r   r   rA   r/   r   datetimer   r  staticmethodr    r
  classmethodr  r  r  r  r  r   r(  r-  r/  r3  r5  r8  r;  rF  rL  r,   r-   rO  r)   rQ  rk  r   rr  objectrv  rx  r2   r{  BaseExceptionr~  r  rI   rJ   rK   r3   r3   v   st    	L 	
" E* EIE8N5eY)>#?@AH#'K%'  '*. $" $7+"7+ 7+ #	7+
 -7+ #7+ ''7+ 7+ S#X'7+ 7+ sm7+ 7+ 
7+x )1.62:(0&.(0199
 c9n%9
 x*+	9

 |Y./9
 c9n%9
 CN#9
 c9n%9
 sI~.9
 
9
v     (8G$5$56 ( (
 $, $ $ % % % *      g//   s  s  !s !3 !4 !s t    !(3- !
 & & & :5c!2C!78 : :x           c    $ - - - VS V V "c " " " " " "# " " # # *c * * )#.   )Z ) ) I8H,=,=#> I I KXh.?.?%@ K K # (4.  ( 5#C=5	%c	"	#5 5 L(5s#34 L L QxdCi(89 Q Q @(8#4#45 @ @ .D . . Qc* Q Q !$E !$ !$F    *$ * * *t * * <T < <* E  *+C + 2F ; # 
= =`D
73 
7 
7 
7
# 
%F %t %$ N t *= *T *
/rJ   r3   c                   @    e Zd ZU ej                   edg      z  ZdZed   ed<   e	rde
deddf fdZeeeeeeedd	ee
ef   d
eeef   deeef   dee
ef   dee
ef   dee
ef   deeef   dd f fdZedd       Zedd       Zedefd       ZdeddfdZ xZS )r5   _match_infoNr8   r=   r  r   c                     || j                   vr@t        j                  dj                  | j                  j
                  |      t        d       t        | !  ||       y )Nz-Setting custom {}.{} attribute is discouragedr   r   )	r  r   r   rp  r   rB   r   super__setattr__)r   r=   r  r   s      rK   r  zRequest.__setattr__T  sM    4::%%%+VDNN,C,CT%J& 	 Gc*rJ   r   r   r   rA   ry   rz   r{   rw   c          	      v    t         
|   |||||||      }t        t        |      }	| j                  |	_        |	S )Nr   )r  r   r   r5   r  )r   r   r   rA   ry   rz   r{   rw   retnew_retr   s             rK   r   zRequest.clone^  sN     gm+  
 w$"..rJ   c                 &    | j                   }|J |S )zResult of route resolving.)r  r   
match_infos     rK   r  zRequest.match_infov  s!     %%
%%%rJ   c                 :    | j                   }|J |j                  S )zApplication instance.)r  current_appr  s     rK   appzRequest.app}  s'     %%
%%%%%%rJ   c                     | j                   }|J |j                  }| j                  }|j                  |      }t	        t        |d |dz                }t        |      S )Nr   )r  appsr  indexr   reversedr   )r   r  lstr  idxsublists         rK   config_dictzRequest.config_dict  s\    %%
%%%oohhiinxIcAg/0W%%rJ   ry  c                    K   | j                   }|y |j                  D ]+  }|j                  x}s|j                  | |       d {    - y 7 wrQ   )r  _appson_response_preparesend)r   ry  r  r  r  s        rK   r{  zRequest._prepare_hook  sU     %%
##C&)&=&=="=)..tX>>> $>s   -AAAA)r   r8   )r   r6   )rB   rC   rD   r3   r  r  r  r   rF   r   rE   r   r  r$   r   r   r0   r.   r'  r   r#   r  r  r  r   r  r2   r{  __classcell__)r   s   @rK   r5   r5   L  sJ   	=/ ::E37K/07	+C 	+c 	+d 	+ )1.62:(0&.(019 c9n% x*+	
 |Y./ c9n% CN# c9n% sI~. 
0   & & &] & &?N ?t ?rJ   r5   )dr  r  rG   r#  r   stringr[  r   r   http.cookiesr   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   urllib.parser   attr	multidictr   r   r   r   r   yarlr   rO   r   abcr   helpersr   r   r   r   r   r    r!   r"   r#   r$   r%   http_parserr&   http_writerr'   rQ  r(   r)   streamsr*   r+   typedefsr,   r-   r.   r/   r0   web_exceptionsr1   web_responser2   __all__web_appr6   web_protocolr7   web_urldispatcherr8   sr4   digitsascii_lettersrL   rE   rF   rN   rp  r   r   ranger[   r\   r_   rb   compilerc   rd   r3   r5   rI   rJ   rK   <module>r     s
     	 	      % "    #     %    + $ 6 4  6 (
1 $,6 T$d3# # 4# ]]V%9%99<NNc
 N &_c
 $nnHHK/%dD8I2JJKKs  )eCj (=DD E c
 
 8>>N ?  s  0:rzz//J ws|, J +5"**_*E E'#,' ES/.c*L S/lH?k H?rJ   