
    F/j{|                     0   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m	Z	m
Z
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 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& d	dl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 d	dl5m6Z6 d	dl7m8Z8 d	dl9m:Z:m;Z; d	dl<m=Z=m>Z> d	dl?m@Z@mAZAmBZBmCZCmDZD d	dlEmFZFmGZG d	dlHmIZI dZJerd	dlKmLZL d	dlMmNZN d	dlOmPZP  ed      ZQ ej                  ddd       G d d             ZSeTeUz  eVz  eSz  ZWej                  ej                  z   dz   ZZeeT   e[d<   d eZ d!Z\eeT   e[d"<   d#j                  d$j                  d% d& e_ e`d'd(            z   D                    ZaeeT   e[d)<   d*ZbeeT   e[d+<   d,eb d-ea d.ZceeT   e[d/<   d0e\ d1e\ d-ec d2ZdeeT   e[d3<    ej                  d4      ZfeeeT      e[d5<    ej                  ed      ZgeeeT      e[d6<    G d7 d8eeTe0e   z  ef   e/      Zh G d9 d:eh      Ziy);    N)IteratorMappingMutableMapping)Pattern)MappingProxyType)TYPE_CHECKINGAnyFinalOptionalTypeVarcastoverload)	parse_qsl)CIMultiDictCIMultiDictProxy	MultiDictMultiDictProxyMultiMapping)URL   )hdrs)parse_cookie_header)AbstractStreamWriter)	_SENTINELDEBUGDEFAULT_CHUNK_SIZEETAG_ANYLIST_QUOTED_ETAG_REChainMapProxyETagHeadersMixin
RequestKeyparse_http_datereifysentinelset_exception)RawRequestMessage)HttpVersion)BodyPartReaderMultipartReader)EmptyStreamReaderStreamReader)DEFAULT_JSON_DECODERJSONDecoderLooseHeaders
RawHeadersStrOrURL)HTTPRequestEntityTooLargeNotAppKeyWarning)StreamResponse)BaseRequest	FileFieldRequest)Application)RequestHandler)UrlMappingMatchInfo_TT)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)r6   namefilenamefilecontent_typeheadersN)__name__
__module____qualname__str__annotations__ioBufferedReaderr        Q/var/www/html/maxservice/venv/lib/python3.12/site-packages/aiohttp/web_request.pyr6   r6   E   s)    
IM


c""rM   r6   z!#$%&'*+.^_`|~-_TCHAR[z]+_TOKENz[{}] c              #   2   K   | ]  }t        |        y wN)chr).0cs     rN   	<genexpr>rX   U   s     KSVKs   )	       !   #      _QDTEXTz
\\[\t !-~]_QUOTED_PAIRz"(?:|z)*"_QUOTED_STRING(z)=(z)(:\d{1,4})?_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   dz  ed<   dZedz  ed<    e       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z  ef   dz  dedz  dedz  dedz  ddfdZe e e e e e e ddee!z  de"e!z  de#e!z  dee!z  dee!z  dee!z  dee!z  dd fdZ$e%dcd       Z&e%ddd       Z'e%dejP                  dz  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#       Z0e1d$ee2   de2fd%       Z3e1d$edefd&       Z3d$eee2   z  defd'Z3e1d$ee2   d(e2ddfd)       Z4e1d$ed(eddfd*       Z4d$eee2   z  d(eddfd+Z4d$eee2   z  ddfd,Z5defd-Z6de7eee   z     fd.Z8e,de9fd/       Z:e,de;e<eef   d0f   fd1       Z=e,defd2       Z>e,defd3       Z?e,de@fd4       ZAe,defd5       ZBe,dedz  fd6       ZCe,de.fd7       ZDe,defd8       ZEe,defd9       ZFe,defd:       ZGe,ded;       ZHe,defd<       ZIe,deJe   fd=       ZKe,deLfd>       ZMe,deNj                  dz  fd?       ZOe,deNj                  dz  fd@       ZPeQdAede7eR   fdB       ZSeTdCedz  de;eRd0f   dz  fdD       ZUe,de;eRd0f   dz  fdE       ZVe,de;eRd0f   dz  fdF       ZWe,deNj                  dz  fdG       ZXe,de9fdH       ZYe,de<eef   fdI       ZZe,de[fdJ       Z\e,defdK       Z]e%de9fdL       Z^e%de9fdM       Z_e,de9fdN       Z`dfdOZadefdPZbdefdQZceddRdSeedefdTZfdegfdUZhdgdVZidhdWedXedefdYZjdefdZZkd[elde9fd\Zmde9fd]Znd^eoddfd_Zpd`eqddfdaZrdfdbZsy)ir5   )_message	_protocol_payload_writer_payload_headers_method_version_rel_url_post_read_bytes_state_cache_task_client_max_size_loop_transport_sslcontext_transport_peernameNro   rp   _seen_str_keysi   )client_max_sizestateschemehostremotemessagepayloadprotocolr9   payload_writertaskasyncio.Task[None]loopry   rz   r{   r|   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.                  | _        |j2                  | _        |j6                  | _        ||| j                  d<   y y )Nurlr|   r{   r}   )rg   rh   ri   rj   rD   rk   methodrl   versionrm   rr   r   absolutewith_scheme	with_hostr|   r{   relativern   rq   rs   rt   ru   ssl_contextrv   peernamerw   sockname_transport_sockname)selfr~   r   r   r   r   r   ry   rz   r{   r|   r}   r   s                rN   __init__zBaseRequest.__init__   sW     !-/6~~&(kk<<!oof-mmD) "%DKK"%((DKK$'JJDKK!LLNDMDM!(.H%&*F#!Mbu
 /
%-%9%9"#+#4#4 #+#4#4 $*DKK! rM   r   rel_urlrD   r{   r|   r}   ry   r   r   rD   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   pathrD   c              3   f   K   | ])  \  }}|j                  d       |j                  d       f + yw)utf-8N)encode)rV   kvs      rN   rX   z$BaseRequest.clone.<locals>.<genexpr>   s3      'Aq '"AHHW$56's   /1raw_headersr{   r|   r}   )ry   rz   rL   )rp   RuntimeErrorr%   r   rH   r   r   tupleitemsrg   _replacert   	__class__rj   rh   ri   rs   ru   rq   copy)r   r   r   rD   r{   r|   r}   ry   dctnew_urlr~   kwargss               rN   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

 ,++""$

 

 
	
rM   c                     | j                   S rT   )rs   r   s    rN   r   zBaseRequest.task   s    zzrM   c                     | j                   S rT   )rh   r   s    rN   r   zBaseRequest.protocol  s    ~~rM   c                 H    | j                   y | j                   j                  S rT   )rh   	transportr   s    rN   r   zBaseRequest.transport  s    >>!~~'''rM   c                     | j                   S rT   )ri   r   s    rN   writerzBaseRequest.writer  s    ###rM   c                     | j                   S rT   )rt   r   s    rN   ry   zBaseRequest.client_max_size  s    $$$rM   c                 R    t        j                  dt        d       | j                  S )NzRequest.message is deprecated   
stacklevel)warningswarnDeprecationWarningrg   r   s    rN   r~   zBaseRequest.message  s    57IVWX}}rM   c                     | j                   S rT   )rn   r   s    rN   r   zBaseRequest.rel_url  s    }}rM   c                 R    t        j                  dt        d       | j                  S )Nz#request.loop property is deprecated   r   )r   r   r   ru   r   s    rN   r   zBaseRequest.loop  s#    13ERS	
 zzrM   keyc                      y rT   rL   r   r   s     rN   __getitem__zBaseRequest.__getitem__(  s    69rM   c                      y rT   rL   r   s     rN   r   zBaseRequest.__getitem__+  s    ,/rM   c                      | j                   |   S rT   rq   r   s     rN   r   zBaseRequest.__getitem__.  s    {{3rM   valuec                      y rT   rL   r   r   r   s      rN   __setitem__zBaseRequest.__setitem__1  s    CFrM   c                      y rT   rL   r   s      rN   r   zBaseRequest.__setitem__4  s    9<rM   c                     t        |t              sM|t        j                  vr;t        j                  j	                  |       t        j                  dt        d       || j                  |<   y )NzIt is recommended to use web.RequestKey instances for keys.
https://docs.aiohttp.org/en/stable/web_advanced.html#request-s-storager   )categoryr   )	
isinstancer"   r5   rx   addr   r   r3   rq   r   s      rN   r   zBaseRequest.__setitem__7  sV    #z*s+:T:T/T&&**3/MM' * !CrM   c                     | j                   |= y rT   r   r   s     rN   __delitem__zBaseRequest.__delitem__C  s    KKrM   c                 ,    t        | j                        S rT   )lenrq   r   s    rN   __len__zBaseRequest.__len__F  s    4;;rM   c                 ,    t        | j                        S rT   )iterrq   r   s    rN   __iter__zBaseRequest.__iter__I  s    DKK  rM   c                      | j                   dk(  S )z5A bool indicating if the request is handled with SSL.https)r{   r   s    rN   securezBaseRequest.secureN  s     {{g%%rM   .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
        rL   r   F,"z\1r   T;z 	)rg   rD   getallr   	FORWARDEDr   appendtypesr   re   matchfindgroupsrd   sublowergroupr   )r   elemsfield_valuelengthposneed_separatorelemr   r@   r   ports              rN   	forwardedzBaseRequest.forwardedS  s   ( ==0077K %	5K%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##%	5L U|rM   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)rv   r   s    rN   r{   zBaseRequest.scheme  s     %%rM   c                     | j                   S )zyRead only property for getting HTTP method.

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

        Returns aiohttp.protocol.HttpVersion instance.
        )rm   r   s    rN   r   zBaseRequest.version  s     }}rM   c                    | j                   j                  j                  t        j                        }||S | j
                  }|yt        |t              r%t        |      dk(  r	d|d    dS t        |d         S t        |      S )a  Hostname of the request.

        Hostname is resolved in this order:

        - overridden value by .clone(host=new_host) call.
        - HOST HTTP header
        - local socket address the request arrived on
          (transport ``sockname``)
        - empty string if no transport information is available

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

        For historical reasons, the port number may be included.
        rR      rP   r   ])
rg   rD   getr   HOSTr   r   r   r   rH   )r   r|   r   s      rN   r|   zBaseRequest.host  s      }}$$((3K++h& 8}!8A;-q))x{##8}rM   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   )rw   r   listr   rH   r   s    rN   r}   zBaseRequest.remote  sN     ##+d..u>t//2334++,,rM   c                     t        j                  | j                  | j                        j	                  | j
                        S )zThe full URL of the request.)r{   	authority)r   buildr{   r|   joinrn   r   s    rN   r   zBaseRequest.url  s,    
 yytyyAFFt}}UUrM   c                 .    | j                   j                  S )z_The URL including *PATH INFO* without the host or scheme.

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

        E.g, /app/blog?id=10
        )rH   rn   r   s    rN   path_qszBaseRequest.path_qs  s     4==!!rM   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``
        )rg   r   r   s    rN   raw_pathzBaseRequest.raw_path  s     }}!!!rM   c                 .    | j                   j                  S )z7A multidict with all the variables in the query string.)rn   queryr   s    rN   r  zBaseRequest.query  s     }}"""rM   c                 .    | j                   j                  S )z:The query string in the URL.

        E.g., id=10
        )rn   query_stringr   s    rN   r  zBaseRequest.query_string  s     }})))rM   c                     | j                   S )z4A case-insensitive multidict proxy with all headers.)rk   r   s    rN   rD   zBaseRequest.headers       }}rM   c                 .    | j                   j                  S )z$A sequence of pairs for all headers.)rg   r   r   s    rN   r   zBaseRequest.raw_headers  s     }}(((rM   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#   rD   r   r   IF_MODIFIED_SINCEr   s    rN   if_modified_sincezBaseRequest.if_modified_since  s$     t||//0F0FGHHrM   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#   rD   r   r   IF_UNMODIFIED_SINCEr   s    rN   if_unmodified_sincezBaseRequest.if_unmodified_since  s$     t||//0H0HIJJrM   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   r   N)r   r    r   finditerr   bool)r  r   r  r   garbages        rN   _etag_valueszBaseRequest._etag_values&  sw      (" 
 -55kB 
*/++aA*>'  M 
s   A,A.header_valuec                 <    |sy t        | j                  |            S rT   )r   r  )clsr  s     rN   _if_match_or_none_implz"BaseRequest._if_match_or_none_impl;  s      S%%l344rM   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  rD   r   r   IF_MATCHr   s    rN   if_matchzBaseRequest.if_matchD  s(     **4<<+;+;DMM+JKKrM   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  rD   r   r   IF_NONE_MATCHr   s    rN   if_none_matchzBaseRequest.if_none_matchL  s*     **4<<+;+;D<N<N+OPPrM   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#   rD   r   r   IF_RANGEr   s    rN   if_rangezBaseRequest.if_rangeT  s"     t||//>??rM   c                 0    | j                   j                   S )zIs keepalive enabled by client?)rg   should_closer   s    rN   
keep_alivezBaseRequest.keep_alive\  s     ==----rM   c                     t        | j                  j                  t        j                  d            }t        |D ci c]  \  }}||j                   c}}      S c c}}w )zMReturn request cookies.

        A read-only dictionary-like object.
        rR   )r   rD   r   r   COOKIEr   r   )r   parsedr@   morsels       rN   cookieszBaseRequest.cookiesa  sI     %T\\%5%5dkk2%FG Ofv||!3 OPP Os   A
c                    | j                   j                  t        j                        }d\  }}|	 d}t	        j
                  ||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)rk   r   r   RANGErefindallASCII
IndexError
ValueErrorintslice)r   rngstartendpatterns        rN   
http_rangezBaseRequest.http_rangem  s     mm

+
s?C0ZZbhh?B
s "#c(tC"'CJTE} S_qC<$%@AA# !EFF $ UC##+  C !ABBCs   -B? ?Cc                     | j                   S )zReturn raw payload stream.)rj   r   s    rN   contentzBaseRequest.content  r  rM   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   rj   at_eofr   s    rN   has_bodyzBaseRequest.has_body  s1     	24FST	
 =='')))rM   c                 8    | j                   j                          S )r:  )rj   r;  r   s    rN   can_read_bodyzBaseRequest.can_read_body  s     =='')))rM   c                 8    t        | j                        t        uS )z6Return True if request has HTTP BODY, False otherwise.)typerj   r+   r   s    rN   body_existszBaseRequest.body_exists  s     DMM"*;;;rM   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)rj   r;  readanyr   s    rN   releasezBaseRequest.release  sC     
 --&&(--''))) --&&()s   8AAAAc                   K   | j                   | j                  r%| j                  j                  | j                         t	               }	 | j                  j                          d{   }|j                  |       | j                  r/t        |      }|| j                  kD  rt        | j                        |snrt        |      | _         | j                   S 7 pw)z_Read request body if present.

        Returns bytes object with full request content.
        N)
rp   rt   rj   set_read_chunk_size	bytearrayrC  extendr   r2   bytes)r   bodychunk	body_sizes       rN   readzBaseRequest.read  s     
 # $$11$2G2GH;D"mm3355E"(( #D	I 4#8#8878M8MNN   %T{D 6s   A&C(C)A1Cc                    K   | j                          d{   }| j                  xs d}|j                  |      S 7 %w)z1Return BODY as text using encoding from .charset.Nr   )rM  charsetdecode)r   
bytes_bodyencodings      rN   textzBaseRequest.text  s8     99;&
<<*7  ** 's   ><&>)loadsrT  c                N   K   | j                          d{   } ||      S 7 w)zReturn BODY as JSON.N)rS  )r   rT  rJ  s      rN   jsonzBaseRequest.json  s#     YY[ T{ !s   %#%c                    K   t        | j                  | j                  | j                  | j                  j
                  | j                  j                  t              S w)z3Return async iterator to process BODY as multipart.)ry   max_field_sizemax_headersmax_size_error_cls)r*   rk   rj   rt   rh   rX  rY  r2   r   s    rN   	multipartzBaseRequest.multipart  sG     MMMM 11>>88228
 	
s   AA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                  }d}|j                          d{   x}|j                  j                  t        j                        }t        |t              rU|j                  t!        d      |j"                  r| j$                  j'                  dt(        j*                         d{   }|j-                  t.               d{   x}	r|j1                  |	      2 3 d{   }
| j$                  j'                  d|j2                  |
       d{    |t5        |
      z  }d|cxk  r|k  sRn U| j$                  j'                  d|j6                         d{    t9        |      | j$                  j'                  d|j:                  d       d{    |d}t=        |j                  |j"                  t?        t@        jB                  |      ||j                        }|jE                  |j                  |       ntG               }|j-                          d{   x}	rQ|t5        |	      z  }d|cxk  r|k  rt9        |       |jI                  |	       |j-                          d{   x}	rQtG               }|j1                  |      2 3 d{   }|jI                  |       t!        d      |j                          d{   x}nd| jQ                          d{   }|rJ| jR                  xs d	}|jI                  tU        |jW                         jO                  |      d|             t        |      | _         | j                   S 7 e7 B7 7 7 ~7 R7 
6 |j-                  t.               d{  7  x}	r#7 7 t7 '7 6 ||jK                  d      r?|jM                  d	
      }|jE                  |j                  |jO                  |             7|jE                  |j                  |       U7 B7 (w)zReturn POST parameters.N)rR   z!application/x-www-form-urlencodedmultipart/form-datar]  r   zMultipart field missing name.)sizezapplication/octet-streamztext/r   )defaultz8To decode nested multipart you need to use custom readerT)keep_blank_valuesrR  ),ro   rl   POST_METHODSr   r   rC   r[  rt   nextrD   r   r   CONTENT_TYPEr   r)   r@   r/  rA   ru   run_in_executortempfileTemporaryFile
read_chunkr   decode_iterwriter   closer2   seekr6   r   rJ   rK   r   rG  rH  
startswithget_charsetrP  rM  rO  r   rstrip)r   rC   outr[  max_sizer^  fieldfield_cttmprK  decoded_chunkffraw_datar   drO  datas                    rN   postzBaseRequest.post  s?    ::!::<<t000'	4DJ::((  
 

 (	4DJ:: )00"nn..I,,HD"+.."2225? ==,,T->->?e^4zz)()HII ~~$(JJ$>$> ("8"8%  .3-=-=CU-=-V'VVeV7<7H7H7O N Nm&*jj&@&@$(#))]'" !" !" !%M(: :#$x#6$#6*.***D*DT399*U$U$U*CH*M$M"jj88sxxKKK#+'AH&!JJ!NN !2!2C8$!MM 

B/ $-;-2-=-=-?'??e? CJ.D 82d2&?&I I  3$OOE2	 .3-=-=-?'??e? !*','8'8'B , ,!!LLO %R u #,.."2225?| $D,,1'

,,W5*.!( $C(
zz] / 3 (WN!"
 %V 8P .3-=-=CU-=-V'V'VVeV L  (@'?,'B $+x/B/B7/K&+&7&7&7&HGGGEJJW0EFGGEJJ6q 3| %s+  B,S.P/%SPBS'P(SPSP(!P"P(%+SP"S/,SP%9SQBSQAS-Q.S5SQQQ1S	S
SS&S'A-SSSSP("S%S(SQSSSSQA2SSr@   r_  c                 f    | j                   }||S |j                  }||S |j                  ||      S )z"Extra info from protocol transport)rh   r   get_extra_info)r   r@   r_  r   r   s        rN   r{  zBaseRequest.get_extra_infoA  s?    >>N&&	N''g66rM   c                     | j                   j                  dd      j                  d      }d| j                  j                   d| j
                   d| dS )Nasciibackslashreplace< z >)r   r   rP  r   rE   rl   )r   ascii_encodable_paths     rN   __repr__zBaseRequest.__repr__M  sW    #yy//9KLSS 
 4>>**+1T\\N!<P;QQSTTrM   otherc                 0    t        |       t        |      k(  S rT   )id)r   r  s     rN   __eq__zBaseRequest.__eq__S  s    $x2e9$$rM   c                      y)NTrL   r   s    rN   __bool__zBaseRequest.__bool__V  s    rM   responsec                    K   y wrT   rL   )r   r  s     rN   _prepare_hookzBaseRequest._prepare_hookY  s	     s   excc                 0    t        | j                  |       y rT   )r&   rj   )r   r  s     rN   _cancelzBaseRequest._cancel\  s    dmmS)rM   c                     | j                   | j                  dk7  ry | j                   j                         D ]0  \  }}t        |t              s|j
                  j                          2 y )Nr]  )ro   rC   r   r   r6   rB   rj  )r   	file_namefile_field_objects      rN   _finishzBaseRequest._finish_  s^    ::!2!26K!K -1JJ,<,<,> 	/(I(+Y7!&&,,.	/rM   )r   r   )r   r9   )r   zMultiMapping[str])r   N)r   zMultiDictProxy[_Post]rT   )trE   rF   rG   r   
METH_PATCH	METH_POSTMETH_PUT
METH_TRACEMETH_DELETEra  r!   ATTRS	frozensetro   r   _PostrI   rp   rI  setrx   rH   r'   r,   r   asyncioAbstractEventLoopr0  dictr"   r	   r   r%   r   r1   r/   r   propertyr   r   	Transportr   r   ry   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   rD   r0   r   datetimer	  r  staticmethodr    r  classmethodr  r  r  r   r#  r(  r1  r6  r8  r<  r>  rA  rD  rM  rS  r-   r.   rV  r*   r[  ry  r{  r  objectr  r  r4   r  BaseExceptionr  r  rL   rM   rN   r5   r5   k   s   L 	
" E* +/E>% 4'. $K$"uNCH$  '9=!!6+"6+ 6+ #	6+
 -6+ #6+ ''6+ 6+ JsOc)3./$66+ d
6+ Dj6+ d
6+ 
6+v #+(0,4"* ("*+39
 i9
 I%	9

 	)9
 i9
 Io9
 i9
 y9
 
9
v     (7,,t3 ( (
 $, $ $ % % % *      g//   9z"~9"9 9/s/s/ / sZ^3     Fz"~FbFTF F<s<3<4< <
!sZ^3 
!C 
!D 
!sZ^3     !(3C#89 !
 & & & :5c!2C!78 : :x          c  < -d
 - - VS V V "c " " " " " "# " " # # *c * * )#.   )Z ) ) I8#4#4t#; I I KX%6%6%= K K # (4.  ( 5:5	tSy	D	 5 5 L%c	*T1 L L QuT3Y/$6 Q Q @(++d2 @ @ .D . . 	Qc* 	Q 	Q !$E !$ !$F    *$ * * *t * * <T < <* E  .+C + 2F ; # 
	
 	
bH
73 
7 
7 
7U# U%F %t %$ N t *= *T *
/rM   r5   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z  d
eez  deez  de
ez  de
ez  de
ez  deez  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 )r7   _match_infoNr:   r@   valr   c                     || j                   vr7t        j                  d| j                  j                   d| dt
        d       t        |   ||       y )NzSetting custom .z attribute is discouragedr   r   )r  r   r   r   rE   r   super__setattr__)r   r@   r  r   s      rN   r  zRequest.__setattr__t  sU    4::%%dnn&=&=%>av F% %& 	 Gc*rM   r   r   r   rD   r{   r|   r}   ry   c          	      v    t         
|   |||||||      }t        t        |      }	| j                  |	_        |	S )Nr   )r  r   r   r7   r  )r   r   r   rD   r{   r|   r}   ry   retnew_retr   s             rN   r   zRequest.clone~  sN     gm+  
 w$"..rM   c                 &    | j                   }|J |S )zResult of route resolving.)r  r   
match_infos     rN   r  zRequest.match_info  s!     %%
%%%rM   c                 :    | j                   }|J |j                  S )zApplication instance.)r  current_appr  s     rN   appzRequest.app  s'     %%
%%%%%%rM   c                     | j                   }|J |j                  }| j                  }|j                  |      }t	        t        |d |dz                }t        |      S )Nr   )r  appsr  indexr   reversedr   )r   r  lstr  idxsublists         rN   config_dictzRequest.config_dict  s\    %%
%%%oohhiinxIcAg/0W%%rM   r  c                    K   | j                   }|y |j                  D ]+  }|j                  x}s|j                  | |       d {    - y 7 wrT   )r  _appson_response_preparesend)r   r  r  r  r  s        rN   r  zRequest._prepare_hook  sZ     %%
## 	?C&)&=&=="=)..tX>>>	?>s   -AAAA)r   r:   )r   r8   )rE   rF   rG   r5   r  r  r  r   rI   r   rH   r	   r  r%   r   r1   r/   r0  r   r$   r  r  r  r   r  r4   r  __classcell__)r   s   @rN   r7   r7   l  s'   	=/ ::E37K/07	+C 	+c 	+d 	+ #+(0,4"* ("*+3 i I%	
 	) i Io i y 
0   & & &] & &?N ?t ?rM   r7   )jr  r  rJ   r+  stringre  r   r   collections.abcr   r   r   r   r   typingr   r	   r
   r   r   r   r   urllib.parser   attr	multidictr   r   r   r   r   yarlr   rR   r   _cookie_helpersr   abcr   helpersr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   http_parserr'   http_writerr(   r[  r)   r*   streamsr+   r,   typedefsr-   r.   r/   r0   r1   web_exceptionsr2   r3   web_responser4   __all__web_appr8   web_protocolr9   web_urldispatcherr:   r;   sr6   rH   rI  rG  r  digitsascii_lettersrO   rI   rQ   formatr   r   ranger^   r_   ra   rc   compilerd   re   r5   r7   rL   rM   rN   <module>r     s     	 	     = =  " O O O "     0 %    + $ 6 4  H (
1 $,6 T] T$d3# # 4# 	ei)+]]V%9%99<NNc
 N &_c
 $nnHHK/%dD8I2JJKKs  )eCj ( $\N!G9C@c
 @ "#6(#fXQ~6FnUs U/9rzz//J ws|, J +5"**_*E E'#,' E~/.z#!6!;<l ~/BH?k H?rM   