
    `eTp                     z   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/m0Z0m1Z1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8m9Z9 ddl:m;Z;m<Z< ddl=m>Z>m?Z?m@Z@mAZAmBZB ddlCmDZD ddlEmFZF dZGerddlHmIZI ddlJmKZK ddlLmMZM  ejN        ddd           G d d                      ZOejP        ejQ        z   dz   ZReeS         eTd<   deR dZUeeS         eTd<   d V                    d!W                    d" d# eX eYd$d%                    z   D                                 ZZeeS         eTd&<   d'Z[eeS         eTd(<   d)V                    eZe[*          Z\eeS         eTd+<   d,V                    eUe\-          Z]eeS         eTd.<    ej^        d/          Z_eeeS                  eTd0<    ej^        e]          Z`eeeS                  eTd1<    G d2 d3eeSef         e/          Za G d4 d5ea          ZbdS )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)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                   L    e Zd ZU eed<   eed<   ej        ed<   eed<   ded<   dS )r3   namefilenamefilecontent_typezCIMultiDictProxy[str]headersN)__name__
__module____qualname__str__annotations__ioBufferedReader     3lib/python3.11/site-packages/aiohttp/web_request.pyr3   r3   K   sK         
IIIMMM

$$$$$$rI   r3   z!#$%&'*+.^_`|~-_TCHAR[z]+_TOKENz[{}] c              #   4   K   | ]}t          |          V  d S N)chr).0cs     rJ   	<genexpr>rT   Z   s(      KKSVVKKKKKKrI   )	       !   #      _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ej        ej        ej        ej        ej        hZ	e
j         eg d          z  Zdddddddededdd	ed
ddej        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j!                 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j        fd             Z)d!edefd"Z*d!ed#eddfd$Z+d!eddfd%Z,defd&Z-de.e         fd'Z/e%de0fd(            Z1e%de2e3eef         d)f         fd*            Z4e%defd+            Z5e%defd,            Z6e%de7fd-            Z8e%defd.            Z9e%dee         fd/            Z:e%de'fd0            Z;e%defd1            Z<e%defd2            Z=e%defd3            Z>e%d_d5            Z?e%defd6            Z@e%d_d7            ZAe%deBfd8            ZCe%deeDjD                 fd9            ZEe%deeDjD                 fd:            ZFeGd;ede.eH         fd<            ZIeJd=ee         dee2eHd)f                  fd>            ZKe%dee2eHd)f                  fd?            ZLe%dee2eHd)f                  fd@            ZMe%deeDjD                 fdA            ZNe%de0fdB            ZOe%de3eef         fdC            ZPe%deQfdD            ZRe%defdE            ZSede0fdF            ZTede0fdG            ZUe%de0fdH            ZVd`dIZWdeXfdJZYdefdKZZe[dLdMe\defdNZ]de^fdOZ_dadQZ`dbdRedSedefdTZadefdUZbdVecde0fdWZdde0fdXZedYefddfdZZgd[ehddfd\ZidS )cr2   )_message	_protocol_payload_writer_payload_headers_method_version_rel_url_post_read_bytes_state_cache_task_client_max_size_loop_transport_sslcontext_transport_peernamei   N)client_max_sizestateschemehostremotemessagepayloadprotocolr6   payload_writertaskasyncio.Task[None]looprv   rw   rx   ry   rz   returnc                   |i }|| _         || _        || _        || _        |j        | _        |j        | _        |j        | _	        i | _
        |j        }|                                rB|| j
        d<   |j        | j
        d<   |j        | j
        d<   |                                | _        n|j        | _        d | _        d | _        || _        || _        || _        || _        | j        j        }|J |                    d          | _        |                    d          | _        |	
|	| j
        d<   |

|
| j
        d<   ||| j
        d<   d S d S )Nurlry   rx   
sslcontextpeernamerz   )re   rf   rg   rh   r@   ri   methodrj   versionrk   rp   r   is_absolutery   rx   relativerl   rm   rn   ro   rq   rr   rs   	transportget_extra_infort   ru   )selfr{   r|   r}   r~   r   r   rv   rw   rx   ry   rz   r   r   s                 rJ   __init__zBaseRequest.__init__   s\    =E!-~&(k?? 		( "%DK"%(DK$'JDK!LLNNDMM#KDMMQ
,0
 /
N,	$$$%.%=%=l%K%K"#,#;#;J#G#G $*DK!"&DK$*DK!!! rI   r   rel_urlr@   rx   ry   rz   rv   r   r   r@   c                   | j         rt          d          i }|t          ur||d<   |t          ur&t          |          }	|	|d<   t	          |	          |d<   |t          urMt          t          |                    |d<   t          d |                                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                                        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   pathr@   c              3   p   K   | ]1\  }}|                     d           |                     d           fV  2dS )utf-8N)encode)rR   kvs      rJ   rT   z$BaseRequest.clone.<locals>.<genexpr>   sT       ' ';?1a'""AHHW$5$56' ' ' ' ' 'rI   raw_headersrx   ry   rz   )rv   rw   rH   )rn   RuntimeErrorr$   r   rD   r   r   tupleitemsre   _replacerr   	__class__rh   rf   rg   rq   rs   ro   copy)r   r   r   r@   rx   ry   rz   rv   dctnew_urlr{   kwargss               rJ   clonezBaseRequest.clone   s   "  	TRSSS !!"CM(""w<<G CJg,,CK(""-k'.B.BCCC	N!& ' 'CJ==??' ' ' " "C )$-(//3//!!%F8x!F6N!!%F8h&&"3Ot~MN JJ

 ,+""$$

 

 

 

 
	
rI   c                     | j         S rP   )rq   r   s    rJ   r   zBaseRequest.task  s
    zrI   c                     | j         S rP   )rf   r   s    rJ   r}   zBaseRequest.protocol  s
    ~rI   c                 ,    | j         d S | j         j        S rP   )rf   r   r   s    rJ   r   zBaseRequest.transport  s    >!4~''rI   c                     | j         S rP   )rg   r   s    rJ   writerzBaseRequest.writer  s    ##rI   c                     | j         S rP   )rr   r   s    rJ   rv   zBaseRequest.client_max_size  s    $$rI   c                 H    t          j        dt          d           | j        S )NzRequest.message is deprecated   
stacklevel)warningswarnDeprecationWarningre   r   s    rJ   r{   zBaseRequest.message  s$    57IVWXXXX}rI   c                     | j         S rP   )rl   r   s    rJ   r   zBaseRequest.rel_url#  s
    }rI   c                 H    t          j        dt          d           | j        S )Nz#request.loop property is deprecated   r   )r   r   r   rs   r   s    rJ   r   zBaseRequest.loop'  s.    13ERS	
 	
 	
 	
 zrI   keyc                     | j         |         S rP   ro   r   r   s     rJ   __getitem__zBaseRequest.__getitem__0  s    {3rI   valuec                     || j         |<   d S rP   r   )r   r   r   s      rJ   __setitem__zBaseRequest.__setitem__3  s     CrI   c                     | j         |= d S rP   r   r   s     rJ   __delitem__zBaseRequest.__delitem__6  s    KrI   c                 *    t          | j                  S rP   )lenro   r   s    rJ   __len__zBaseRequest.__len__9  s    4;rI   c                 *    t          | j                  S rP   )iterro   r   s    rJ   __iter__zBaseRequest.__iter__<  s    DK   rI   c                     | j         dk    S )z5A bool indicating if the request is handled with SSL.https)rx   r   s    rJ   securezBaseRequest.secureA  s     {g%%rI   .c                    g }| j         j                            t          j        d          D ]}t          |          }d}d}i }|                    t          j        |                     d|cxk    r|k     rOn Pt          
                    ||          }||r|                    d|          }n|                                \  }}	}
|	d         dk    r#t                              d|	dd	                   }	|
r|	|
z  }	|	||                                <   |t          |                    d                    z  }d
}nw||         dk    r1d}i }|                    t          j        |                     |dz  }n:||         dk    rd}|dz  }n&||         dv r|dz  }n|                    d|          }d|cxk    r|k     I 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
        rH   r   FN,"z\1r   T;z 	)re   r@   getallr   	FORWARDEDr   appendtypesr   rc   matchfindgroupsrb   sublowergroupr   )r   elemsfield_valuelengthposneed_separatorelemr   r<   r   ports              rJ   	forwardedzBaseRequest.forwardedF  s   ( =077KK %	5 %	5K%%FC"N#%DLL/55666s####V#####*00cBB$% .)..sC88,1LLNN)eT 8s??$;$?$?uQrT{$S$SE *!TME-2TZZ\\*s5;;q>>222)- %,,%*NDLL!7!=!=>>>1HCC %,,%*N1HCC %.. 1HCC &**344C? s####V####@ U||rI   c                     | j         rdS dS )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)rt   r   s    rJ   rx   zBaseRequest.scheme  s     % 	76rI   c                     | j         S )zyRead only property for getting HTTP method.

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

        Returns aiohttp.protocol.HttpVersion instance.
        )rk   r   s    rJ   r   zBaseRequest.version  s     }rI   c                     | j         j                            t          j                  }||S t          j                    S )zHostname of the request.

        Hostname is resolved in this order:

        - overridden value by .clone(host=new_host) call.
        - HOST HTTP header
        - socket.getfqdn() value
        )re   r@   getr   HOSTsocketgetfqdn)r   ry   s     rJ   ry   zBaseRequest.host  s7     }$((33K~rI   c                     | j         dS 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   )ru   
isinstancelistr   rD   r   s    rJ   rz   zBaseRequest.remote  sR     #+4d.u>> 	4t/23334+,,,rI   c                 v    t          j        | j        | j                  }|                    | j                  S )N)rx   ry   )r   buildrx   ry   joinrl   )r   r   s     rJ   r   zBaseRequest.url  s.    it{;;;xx&&&rI   c                     | j         j        S )z_The URL including *PATH INFO* without the host or scheme.

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

        E.g, /app/blog?id=10
        )rD   rl   r   s    rJ   path_qszBaseRequest.path_qs  s     4=!!!rI   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``
        )re   r   r   s    rJ   raw_pathzBaseRequest.raw_path  s     }!!rI   MultiMapping[str]c                 4    t          | j        j                  S )z7A multidict with all the variables in the query string.)r   rl   queryr   s    rJ   r   zBaseRequest.query  s     dm1222rI   c                     | j         j        S )z:The query string in the URL.

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

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

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

        This header is represented as a `tuple` of `ETag` objects.
        )r  r@   r   r   IF_MATCHr   s    rJ   if_matchzBaseRequest.if_match%  s*     **4<+;+;DM+J+JKKKrI   c                 p    |                      | 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  r@   r   r   IF_NONE_MATCHr   s    rJ   if_none_matchzBaseRequest.if_none_match-  s+     **4<+;+;D<N+O+OPPPrI   c                 d    t          | j                            t          j                            S )zpThe value of If-Range HTTP header, or None.

        This header is represented as a `datetime` object.
        )r"   r@   r   r   IF_RANGEr   s    rJ   if_rangezBaseRequest.if_range5  s$     t|//>>???rI   c                     | j         j         S )zIs keepalive enabled by client?)re   should_closer   s    rJ   
keep_alivezBaseRequest.keep_alive=  s     =---rI   c                     | j                             t          j        d          }t	          |          }t          d |                                D                       S )zMReturn request cookies.

        A read-only dictionary-like object.
        rN   c                 $    i | ]\  }}||j         S rH   )r   )rR   r   vals      rJ   
<dictcomp>z'BaseRequest.cookies.<locals>.<dictcomp>J  s      O O OHCci O O OrI   )r@   r   r   COOKIEr   r   r   )r   rawparseds      rJ   cookieszBaseRequest.cookiesB  sO     lt{B//c"" O O O O OPPPrI   c                    | j                             t          j                  }d\  }}|	 d}t	          j        ||          d         \  }}n# t          $ r t          d          w xY w|rt          |          nd}|rt          |          nd}||| }d}|||dz  }||k    rt          d          ||cxu rn nt          d          t          ||d          S )	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)
ri   r   r   RANGErefindall
IndexError
ValueErrorintslice)r   rngstartendpatterns        rJ   
http_rangezBaseRequest.http_rangeL  s&    m
++
s?C0Z55a8
ss C C C !ABBBC "+#c(((tC"'1CJJJTE} S_qC<<$%@AAA######## !EFFFUC###s    A A(c                     | j         S )zReturn raw payload stream.)rh   r   s    rJ   contentzBaseRequest.contentp  r   rI   c                 n    t          j        dt          d           | 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   rh   at_eofr   s    rJ   has_bodyzBaseRequest.has_bodyu  s?     	24FST	
 	
 	
 	
 =''))))rI   c                 6    | j                                          S )r0  )rh   r1  r   s    rJ   can_read_bodyzBaseRequest.can_read_body}  s     =''))))rI   c                 8    t          | j                  t          uS )z6Return True if request has HTTP BODY, False otherwise.)typerh   r)   r   s    rJ   body_existszBaseRequest.body_exists  s     DM""*;;;rI   c                    K   | j                                         s:| j                                          d{V  | j                                         8dS dS )zKRelease request.

        Eat unread part of HTTP BODY if present.
        N)rh   r1  readanyr   s    rJ   releasezBaseRequest.release  sp      
 -&&(( 	*-''))))))))) -&&(( 	* 	* 	* 	* 	*rI   c                 F  K   | j         t                      }	 | j                                         d{V }|                    |           | j        r0t          |          }|| j        k    rt          | j        |          |snot          |          | _         | j         S )z_Read request body if present.

        Returns bytes object with full request content.
        NTmax_sizeactual_size)	rn   	bytearrayrh   r9  extendrr   r   r0   bytes)r   bodychunk	body_sizes       rJ   readzBaseRequest.read  s      
 #;;D
"m3355555555E"""(  #D		I D$9997%)%:	     
  %T{{DrI   c                 v   K   |                                   d{V }| j        pd}|                    |          S )z1Return BODY as text using encoding from .charset.Nr   )rE  charsetdecode)r   
bytes_bodyencodings      rJ   textzBaseRequest.text  sE      99;;&&&&&&
<*7  ***rI   )loadsrL  c                P   K   |                                   d{V } ||          S )zReturn BODY as JSON.N)rK  )r   rL  rB  s      rJ   jsonzBaseRequest.json  s3      YY[[      uT{{rI   c                 :   K   t          | j        | j                  S )z3Return async iterator to process BODY as multipart.)r(   ri   rh   r   s    rJ   	multipartzBaseRequest.multipart  s      t}dm<<<rI   ,MultiDictProxy[Union[str, bytes, FileField]]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|                                  d{V }| j        }|                                 d{V }|od}|j	        
                    t          j                  }t          |t                    r|j        J |j        r/t#          j                    }|                    d           d{V }	|	r|                    |	          }	|                    |	           |t-          |	          z  }d|cxk     r|k     r(n n%|                                 t1          ||          |                    d           d{V }	|	|                    d           |d}t5          |j        |j        t7          t8          j        |          ||j	                  }
|                    |j        |
           n|                    d	
           d{V }||                     d          rE|!                    d          }|                    |j        |                    |                     n|                    |j        |           |t-          |          z  }d|cxk     r|k     rn n!t1          ||          ntE          d          |                                 d{V }|ono|                                  d{V }|rS| j#        pd}|$                    tK          |&                                                    |          d	|                     t          |          | _         | j         S )zReturn POST parameters.N)rN   z!application/x-www-form-urlencodedmultipart/form-datarS  r   i   )sizer<  zapplication/octet-streamT)rH  ztext/r   )defaultz8To decode nested multipart you need to use custom reader)keep_blank_valuesrJ  )'rm   rj   POST_METHODSr   r   r?   rP  rr   nextr@   r   r   CONTENT_TYPEr   r'   r<   r=   tempfileTemporaryFile
read_chunkrH  writer   closer0   seekr3   r   rF   rG   addrE  
startswithget_charsetr%  rG  r@  r   rstrip)r   r?   outrP  r=  fieldrT  field_cttmprC  ffr   rG  datas                 rJ   postzBaseRequest.post  s>     :!:<t000'	44DJ:(  
 
 

 (	44DJ:7@{{000"nn........I,H#..********E# =,,T->??e^44 2 :111 ~ '&466&+&6&6E&6&B&B B B B B B B# 	G$)LL$7$7EIIe,,, CJJ.D 82222d22222 #		&?-54'" '" '" !" +0*:*:*:*F*F$F$F$F$F$F$FE $ 	G #+'AH&!J!N !2C88$!M  
B//// ',jjj&=&= = = = = = =#+x/B/B7/K/K+&+&7&7&7&H&HGGGEJW0E0EFFFFGGEJ666E

*x....$.....";)1t# # #  /
 %U   (nn........q #t $$$$$$D ,1'

,,W55*.!(     $C((
zrI   r<   rU  c                 Z    | j         }||S |j        }||S |                    ||          S )z"Extra info from protocol transport)rf   r   r   )r   r<   rU  r}   r   s        rJ   r   zBaseRequest.get_extra_info  s=    >N&	N''g666rI   c                     | j                             dd                              d          }d                    | j        j        | j        |          S )Nasciibackslashreplacez<{} {} {} >)r   r   rH  formatr   rA   rj   )r   ascii_encodable_paths     rJ   __repr__zBaseRequest.__repr__  sW    #y//9KLLSS 
  
 ##N#T\3G
 
 	
rI   otherc                 B    t          |           t          |          k    S rP   )id)r   rr  s     rJ   __eq__zBaseRequest.__eq__'  s    $xx2e99$$rI   c                     dS )NTrH   r   s    rJ   __bool__zBaseRequest.__bool__*  s    trI   responsec                 
   K   d S rP   rH   )r   rx  s     rJ   _prepare_hookzBaseRequest._prepare_hook-  s      rI   excc                 :    | j                             |           d S rP   )rh   set_exception)r   r{  s     rJ   _cancelzBaseRequest._cancel0  s    ##C(((((rI   )r   r   )r   r6   )r   r   )r   N)r   rQ  rP   )jrA   rB   rC   r   
METH_PATCH	METH_POSTMETH_PUT
METH_TRACEMETH_DELETErW  r!   ATTRS	frozensetr%   r*   r   asyncioAbstractEventLoopr&  r   r   rD   r   r   r$   r   r   r/   r-   r   propertyr   r}   	Transportr   r   rv   r#   r{   r   r   r   r   r   r   r   r	   r   r  r   r   r
   r   rx   r   r&   r   ry   rz   r   r   r   r   r   r   r@   r.   r   datetimer   r   staticmethodr    r  classmethodr  r  r  r  r  r  r'  r,  r.  r2  r4  r7  r:  rA  rE  rK  r+   r,   rN  r(   rP  rj  r   rq  objectru  rw  r1   rz  BaseExceptionr~  rH   rI   rJ   r2   r2   u   s;
        	L 	
 	
 	
" " E>  '*. $" $7+ 7+ 7+"7+ 7+ #	7+
 -7+ #7+ '7+ 7+ S#X'7+ 7+ sm7+ 7+ 
7+ 7+ 7+ 7+x )1.62:(0&.(0198
 8
 8
 c9n%8
 x*+	8

 |Y./8
 c9n%8
 CN#8
 c9n%8
 sI~.8
 
8
 8
 8
 8
t    X    X (8G$56 ( ( ( X(
 $, $ $ $ X$ % % % % X% *    U     U g/    U s  s        !s !3 !4 ! ! ! !s t             !(3- ! ! ! !
 & & & & U& :5c!2C!78 : : : U:x     U     U     U  c       U  - - - - U- 'S ' ' ' U' "c " " " U" " " " " U" "# " " " U" 3 3 3 U3 *c * * * U*    U )Z ) ) ) U) I8H,=#> I I I UI KXh.?%@ K K K UK # (4.    \( 5#C=5	%c	"	#5 5 5 [5 L(5s#34 L L L UL QxdCi(89 Q Q Q UQ @(8#45 @ @ @ U@ .D . . . U. Qc* Q Q Q UQ !$E !$ !$ !$ U!$F     U *$ * * * X* *t * * * X* <T < < < U<* * * * E        *+C + + + + 2F   ; #    
= = = = =^ ^ ^ ^@
7 
73 
7 
7 
7 
7 
7 
7
# 
 
 
 
%F %t % % % %$    N t    )= )T ) ) ) ) ) )rI   r2   c                   z    e Zd Zej         edg          z  Zdededdf fdZ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 )r4   _match_infoargsr   r   Nc                 H     t                      j        |i | d | _        d S rP   )superr   r  )r   r  r   r   s      rJ   r   zRequest.__init__8  s/    $)&))) ;?rI   r<   r  c                     || j         vr:t          j        d                    | j        j        |          t          d           t                                          ||           d S )Nz-Setting custom {}.{} attribute is discouragedr   r   )	r  r   r   ro  r   rA   r   r  __setattr__)r   r<   r  r   s      rJ   r  zRequest.__setattr__C  sj    4:%%%%+VDN,CT%J%J& 	    GGc*****rI   r   r   r   r@   rx   ry   rz   rv   c          	          t                                          |||||||          }t          t          |          }	| j        |	_        |	S )Nr   )r  r   r   r4   r  )r   r   r   r@   rx   ry   rz   rv   retnew_retr   s             rJ   r   zRequest.cloneM  sW     ggmm+  
 
 w$$".rI   r7   c                     | j         }|J |S )zResult of route resolving.)r  r   
match_infos     rJ   r  zRequest.match_infoe  s     %
%%%rI   r5   c                 &    | j         }|J |j        S )zApplication instance.)r  current_appr  s     rJ   appzRequest.appl  s!     %
%%%%%rI   c                     | j         }|J |j        }| j        }|                    |          }t	          t          |d |dz                                }t          |          S )Nr   )r  appsr  indexr   reversedr   )r   r  lstr  idxsublists         rJ   config_dictzRequest.config_dicts  sb    %
%%%ohiinnxIcAgI//00W%%%rI   rx  c                 v   K   | j         }|d S |j        D ]#}|j                            | |           d {V  $d S rP   )r  _appson_response_preparesend)r   rx  r  r  s       rJ   rz  zRequest._prepare_hook}  sc      %
F# 	? 	?C)..tX>>>>>>>>>>	? 	?rI   )r   r7   )r   r5   )rA   rB   rC   r2   r  r  r   r   r   rD   r  r$   r   r   r/   r-   r&  r   r#   r  r  r  r   r  r1   rz  __classcell__)r   s   @rJ   r4   r4   4  s       		=/ : ::E?c ?S ?T ? ? ? ? ? ?  
+	+C 	+c 	+d 	+ 	+ 	+ 	+ 	+ 	+ )1.62:(0&.(019   c9n% x*+	
 |Y./ c9n% CN# c9n% sI~. 
     0    U & & & X& &] & & & X&?N ?t ? ? ? ? ? ? ? ?rI   r4   )cr  r  rF   r"  r   stringrZ  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   rN   r   abcr   helpersr   r   r   r   r   r    r!   r"   r#   r$   http_parserr%   http_writerr&   rP  r'   r(   streamsr)   r*   typedefsr+   r,   r-   r.   r/   web_exceptionsr0   web_responser1   __all__web_appr5   web_protocolr6   web_urldispatcherr7   sr3   digitsascii_lettersrK   rD   rE   rM   ro  r   r   rangerZ   r[   r^   ra   compilerb   rc   r2   r4   rH   rI   rJ   <module>r     sd     				 				      % % % % % % " " " " " "                            # " " " " "                           % % % % % %                        + * * * * * $ $ $ $ $ $ 6 6 6 6 6 6 6 6 4 4 4 4 4 4 4 4              6 5 5 5 5 5 ( ( ( ( ( (
1  7$$$$$$,,,,,,666666 T$d333% % % % % % % 43% ]V%99<NNc
 N N N %&___c
 $ $ $nnHHKK/%%dD8I8I2J2JJKKKKK s    )eCj ( ( (=DD E  c
    8>>
 ?       0:rz//J/J ws|, J J J +5"*_*E*E E'#,' E E E|
) |
) |
) |
) |
).c*L |
) |
) |
)~N? N? N? N? N?k N? N? N? N? N?rI   