
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    'â7`Vg  ã                
   @   sf  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 d dl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  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, d	dl-m.Z. d	dl/m0Z0 d	dl1m2Z2m3Z3 d	dl4m5Z5m6Z6 d	dl7m8Z8m9Z9m:Z:m;Z;m<Z< d	dl=m>Z> d	dl?m@Z@ dZAe�r¢d	dlBmCZC d	dlDmEZE d	dlFmGZG ejHdddd�G dd„ dƒƒZIejJejK d ZLdeL› d�ZMd Nd  Od!d"„ d#ePeQd$d%ƒƒ D ƒ¡¡ZRd&ZSd'jNeReSd(�ZTd)jNeMeTd*�ZUe Vd+¡ZWe VeU¡ZXG d,d-„ d-eeYef e*ƒZZG d.d/„ d/eZƒZ[dS )0é    N)Ú	parsedate)ÚSimpleCookie)ÚMappingProxyType)
ÚTYPE_CHECKINGÚAnyÚDictÚIteratorÚMappingÚMutableMappingÚOptionalÚTupleÚUnionÚcast)Ú	parse_qsl)ÚCIMultiDictÚCIMultiDictProxyÚ	MultiDictÚMultiDictProxy)ÚURLé   )Úhdrs)ÚAbstractStreamWriter)ÚDEBUGÚChainMapProxyÚHeadersMixinÚreifyÚsentinel)ÚRawRequestMessage)ÚHttpVersion)ÚBodyPartReaderÚMultipartReader)ÚEmptyStreamReaderÚStreamReader)ÚDEFAULT_JSON_DECODERÚJSONDecoderÚLooseHeadersÚ
RawHeadersÚStrOrURL)ÚHTTPRequestEntityTooLarge)ÚStreamResponse)ÚBaseRequestÚ	FileFieldÚRequest)ÚApplication)ÚRequestHandler)ÚUrlMappingMatchInfoT)Zauto_attribsÚfrozenÚslotsc                   @   s8   e Zd ZU eed< eed< ejed< eed< ded< dS )r+   ÚnameÚfilenameÚfileÚcontent_typeúCIMultiDictProxy[str]ÚheadersN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚioÚBufferedReader© r?   r?   úF/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/web_request.pyr+   9   s
   

r+   z!#$%&'*+.^_`|~-ú[z]+z[{}]Ú c                 c   s   | ]}t |ƒV  qd S ©N)Úchr)Ú.0Úcr?   r?   r@   Ú	<genexpr>H   s     rG   )é	   é    é!   é#   é   z
\\[\t !-~]z"(?:{quoted_pair}|{qdtext})*")ZqdtextZquoted_pairz0({token})=({token}|{quoted_string})(:\d{{1,4}})?)ÚtokenZquoted_stringz\\([\t !-~])c                   @   sl  e Zd ZejejejejejhZ	e
jeddddddddd	d
dddddddgƒB Zddddddœeededejeeeeef  ee ee ee ddœdd„Zeeeeeedœeeeeeed dœdd„Zeddœdd „ƒZeddœd!d"„ƒZeeej dœd#d$„ƒZ eedœd%d&„ƒZ!e"edœd'd(„ƒZ#e"e$dœd)d*„ƒZ%e"ejdœd+d,„ƒZ&eed-œd.d/„Z'eedd0œd1d2„Z(edd-œd3d4„Z)edœd5d6„Z*e+e dœd7d8„Z,e"e-dœd9d:„ƒZ.e"e/e0eef d;f dœd<d=„ƒZ1e"edœd>d?„ƒZ2e"edœd@dA„ƒZ3e"e4dœdBdC„ƒZ5e"edœdDdE„ƒZ6e"ee dœdFdG„ƒZ7e"e$dœdHdI„ƒZ8e"edœdJdK„ƒZ9e"edœdLdM„ƒZ:e"edœdNdO„ƒZ;e"dPdœdQdR„ƒZ<e"edœdSdT„ƒZ=e"dUdœdVdW„ƒZ>e"e?dœdXdY„ƒZ@eAee eeBjB dZœd[d\„ƒZCe"eeBjB dœd]d^„ƒZDe"eeBjB dœd_d`„ƒZEe"eeBjB dœdadb„ƒZFe"e-dœdcdd„ƒZGe"e0eef dœdedf„ƒZHe"eIdœdgdh„ƒZJe"edœdidj„ƒZKee-dœdkdl„ƒZLee-dœdmdn„ƒZMe"e-dœdodp„ƒZNddœdqdr„ZOePdœdsdt„ZQedœdudv„ZReSdwœeTedxœdydz„ZUeVdœd{d|„ZWd}dœd~d„ZXd�eeed€œd�d‚„ZYedœdƒd„„ZZe[e-d…œd†d‡„Z\e-dœdˆd‰„Z]e^ddŠœd‹dŒ„Z_e`dd�œdŽd�„ZadS )‘r*   Ú_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Úremoter.   zasyncio.Task[None])ÚmessageÚpayloadÚprotocolÚpayload_writerÚtaskÚloopr_   r`   ra   rb   rc   Úreturnc                C   sÔ   |d kri }|| _ || _|| _|| _|j| _|j| _|j| _	|j
| _d | _d | _|| _i | _|| _|| _|| _| jj}|d k	s‚t‚| d¡| _| d¡| _|	d k	r¬|	| jd< |
d k	r¾|
| jd< |d k	rÐ|| jd< d S )NZ
sslcontextZpeernamera   rb   rc   )rN   rO   rP   rQ   r7   rR   ÚmethodrS   ÚversionrT   ÚurlrU   rV   rW   rX   rY   rZ   r[   r\   Ú	transportÚAssertionErrorÚget_extra_infor]   r^   )Úselfrd   re   rf   rg   rh   ri   r_   r`   ra   rb   rc   rn   r?   r?   r@   Ú__init__�   s8    ÿ

zBaseRequest.__init__©rk   Úrel_urlr7   ra   rb   rc   ©rk   rt   r7   ra   rb   rc   rj   c                C   sî   | j rtdƒ‚i }|tk	r"||d< |tk	rFt|ƒ}||d< t|ƒ|d< |tk	rxtt|ƒƒ|d< tdd„ | ¡ D ƒƒ|d< | j	j
f |Ž}	i }
|tk	rš||
d	< |tk	rª||
d
< |tk	rº||
d< | 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 contentrk   rm   Úpathr7   c                 s   s&   | ]\}}|  d ¡|  d ¡fV  qdS )úutf-8N)Úencode)rE   ÚkÚvr?   r?   r@   rG   Ñ   s    z$BaseRequest.clone.<locals>.<genexpr>Úraw_headersra   rb   rc   )r_   r`   )rW   ÚRuntimeErrorr   r   r;   r   r   ÚtupleÚitemsrN   Ú_replaceÚ	__class__rQ   rO   rP   rZ   r\   r[   rX   Úcopy)rq   rk   rt   r7   ra   rb   rc   ÚdctZnew_urlrd   Úkwargsr?   r?   r@   Úclone²   sF    ÿúø	÷zBaseRequest.clone©rj   c                 C   s   | j S rC   )rZ   ©rq   r?   r?   r@   rh   ë   s    zBaseRequest.taskc                 C   s   | j S rC   )rO   r†   r?   r?   r@   rf   ï   s    zBaseRequest.protocolc                 C   s   | j d krd S | j jS rC   )rO   rn   r†   r?   r?   r@   rn   ó   s    
zBaseRequest.transportc                 C   s   | j S rC   )rP   r†   r?   r?   r@   Úwriterù   s    zBaseRequest.writerc                 C   s   t jdtdd� | jS )NzRequest.message is deprecatedé   ©Ú
stacklevel)ÚwarningsÚwarnÚDeprecationWarningrN   r†   r?   r?   r@   rd   ý   s    zBaseRequest.messagec                 C   s   | j S rC   )rU   r†   r?   r?   r@   rt     s    zBaseRequest.rel_urlc                 C   s   t jdtdd� | jS )Nz#request.loop property is deprecatedé   r‰   )r‹   rŒ   r�   r\   r†   r?   r?   r@   ri     s      ÿzBaseRequest.loop)Úkeyrj   c                 C   s
   | j | S rC   ©rX   ©rq   r�   r?   r?   r@   Ú__getitem__  s    zBaseRequest.__getitem__)r�   Úvaluerj   c                 C   s   || j |< d S rC   r�   )rq   r�   r“   r?   r?   r@   Ú__setitem__  s    zBaseRequest.__setitem__c                 C   s   | j |= d S rC   r�   r‘   r?   r?   r@   Ú__delitem__  s    zBaseRequest.__delitem__c                 C   s
   t | jƒS rC   )ÚlenrX   r†   r?   r?   r@   Ú__len__  s    zBaseRequest.__len__c                 C   s
   t | jƒS rC   )ÚiterrX   r†   r?   r?   r@   Ú__iter__  s    zBaseRequest.__iter__c                 C   s
   | j dkS )z5A bool indicating if the request is handled with SSL.Úhttps)ra   r†   r?   r?   r@   Úsecure   s    zBaseRequest.secure.c                 C   sX  g }| j j tjd¡D �]6}t|ƒ}d}d}i }| t |¡¡ d|  krT|k rn qt	 
||¡}|dk	rÜ|r~| d|¡}n\| ¡ \}}	}
|	d dkr¬t d|	dd	… ¡}	|
r¸|	|
7 }	|	|| ¡ < |t| d¡ƒ7 }d
}q@|| dk�rd}i }| t |¡¡ |d7 }q@|| dk�r(d}|d7 }q@|| dk�r@|d7 }q@| d|¡}q@q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
        r?   r   FNú,ú"z\1r   éÿÿÿÿTú;z 	)rN   r7   Zgetallr   Z	FORWARDEDr–   ÚappendÚtypesr   Ú_FORWARDED_PAIR_REÚmatchÚfindÚgroupsÚ_QUOTED_PAIR_REPLACE_REÚsubÚlowerÚgroupr}   )rq   ZelemsZfield_valueÚlengthÚposZneed_separatorÚelemr£   r2   r“   Úportr?   r?   r@   Ú	forwarded%  s@    


zBaseRequest.forwardedc                 C   s   | j r
dS 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š   ÚhttpN)r]   r†   r?   r?   r@   ra   b  s    zBaseRequest.schemec                 C   s   | j S )zyRead only property for getting HTTP method.

        The value is upper-cased str like 'GET', 'POST', 'PUT' etc.
        )rS   r†   r?   r?   r@   rk   r  s    zBaseRequest.methodc                 C   s   | j S )zxRead only property for getting HTTP version of request.

        Returns aiohttp.protocol.HttpVersion instance.
        )rT   r†   r?   r?   r@   rl   z  s    zBaseRequest.versionc                 C   s(   | j j tj¡}|dk	r|S t ¡ S dS )zÅHostname of the request.

        Hostname is resolved in this order:

        - overridden value by .clone(host=new_host) call.
        - HOST HTTP header
        - socket.getfqdn() value
        N)rN   r7   Úgetr   ZHOSTÚsocketÚgetfqdn)rq   rb   r?   r?   r@   rb   ‚  s    
zBaseRequest.hostc                 C   s$   t | jttfƒr| jd S | jS dS )zÂRemote 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
        r   N)Ú
isinstancer^   Úlistr}   r†   r?   r?   r@   rc   ’  s    	
zBaseRequest.remotec                 C   s   t j| j| jd�}| | j¡S )N)ra   rb   )r   Úbuildra   rb   ÚjoinrU   )rq   rm   r?   r?   r@   rm      s    zBaseRequest.urlc                 C   s   | j jS )z_The URL including *PATH INFO* without the host or scheme.

        E.g., ``/app/blog``
        )rU   rv   r†   r?   r?   r@   rv   ¥  s    zBaseRequest.pathc                 C   s
   t | jƒS )zXThe URL including PATH_INFO and the query string.

        E.g, /app/blog?id=10
        )r;   rU   r†   r?   r?   r@   Úpath_qs­  s    zBaseRequest.path_qsc                 C   s   | j jS )zÙThe 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``
        )rN   rv   r†   r?   r?   r@   Úraw_pathµ  s    zBaseRequest.raw_pathzMultiDictProxy[str]c                 C   s   | j jS )z7A multidict with all the variables in the query string.)rU   Úqueryr†   r?   r?   r@   r¹   ¾  s    zBaseRequest.queryc                 C   s   | j jS )z:The query string in the URL.

        E.g., id=10
        )rU   Úquery_stringr†   r?   r?   r@   rº   Ã  s    zBaseRequest.query_stringr6   c                 C   s   | j S )z4A case-insensitive multidict proxy with all headers.)rR   r†   r?   r?   r@   r7   Ë  s    zBaseRequest.headersc                 C   s   | j jS )z$A sequence of pairs for all headers.)rN   r{   r†   r?   r?   r@   r{   Ð  s    zBaseRequest.raw_headers)Ú	_date_strrj   c                 C   s8   | dk	r4t | ƒ}|dk	r4tj|dd… dtjjiŽS dS )z/Process a date string, return a datetime objectNé   Útzinfo)r   ÚdatetimeÚtimezoneÚutc)r»   Ú	timetupler?   r?   r@   Ú
_http_dateÕ  s
    zBaseRequest._http_datec                 C   s   |   | j tj¡¡S )zyThe value of If-Modified-Since HTTP header, or None.

        This header is represented as a `datetime` object.
        )rÂ   r7   r°   r   ZIF_MODIFIED_SINCEr†   r?   r?   r@   Úif_modified_sinceÞ  s    zBaseRequest.if_modified_sincec                 C   s   |   | j tj¡¡S )z{The value of If-Unmodified-Since HTTP header, or None.

        This header is represented as a `datetime` object.
        )rÂ   r7   r°   r   ZIF_UNMODIFIED_SINCEr†   r?   r?   r@   Úif_unmodified_sinceæ  s    zBaseRequest.if_unmodified_sincec                 C   s   |   | j tj¡¡S )zpThe value of If-Range HTTP header, or None.

        This header is represented as a `datetime` object.
        )rÂ   r7   r°   r   ZIF_RANGEr†   r?   r?   r@   Úif_rangeî  s    zBaseRequest.if_rangec                 C   s
   | j j S )zIs keepalive enabled by client?)rN   Zshould_closer†   r?   r?   r@   Ú
keep_aliveö  s    zBaseRequest.keep_alivec                 C   s.   | j  tjd¡}t|ƒ}tdd„ | ¡ D ƒƒS )zMReturn request cookies.

        A read-only dictionary-like object.
        rB   c                 S   s   i | ]\}}||j “qS r?   )r“   )rE   r�   Úvalr?   r?   r@   Ú
<dictcomp>  s      z'BaseRequest.cookies.<locals>.<dictcomp>)r7   r°   r   ZCOOKIEr   r   r~   )rq   ÚrawÚparsedr?   r?   r@   Úcookiesû  s    zBaseRequest.cookiesc                 C   sæ   | j  tj¡}d\}}|dk	rÚzd}t ||¡d \}}W n tk
rV   tdƒ‚Y nX |rdt|ƒnd}|rtt|ƒnd}|dkr’|dk	r’| }d}|dk	rº|dk	rº|d7 }||krºtdƒ‚||  krÎdk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)
rR   r°   r   ÚRANGEÚreÚfindallÚ
IndexErrorÚ
ValueErrorÚintÚslice)rq   ÚrngÚstartÚendÚpatternr?   r?   r@   Ú
http_range  s(    zBaseRequest.http_rangec                 C   s   | j S )zReturn raw payload stream.)rQ   r†   r?   r?   r@   Úcontent)  s    zBaseRequest.contentc                 C   s   t jdtd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�   rQ   Úat_eofr†   r?   r?   r@   Úhas_body.  s      ÿzBaseRequest.has_bodyc                 C   s   | j  ¡  S )rÙ   )rQ   rÚ   r†   r?   r?   r@   Úcan_read_body6  s    zBaseRequest.can_read_bodyc                 C   s   t | jƒtk	S )z6Return True if request has HTTP BODY, False otherwise.)ÚtyperQ   r!   r†   r?   r?   r@   Úbody_exists;  s    zBaseRequest.body_existsc                 Ã   s    | j  ¡ s| j  ¡ I dH  q dS )zKRelease request.

        Eat unread part of HTTP BODY if present.
        N)rQ   rÚ   Úreadanyr†   r?   r?   r@   Úrelease@  s    
zBaseRequest.releasec                 Ã   sh   | j dkrbtƒ }| j ¡ I dH }| |¡ | jrPt|ƒ}|| jkrPt| j|d�‚|sqXqt|ƒ| _ | j S )z_Read request body if present.

        Returns bytes object with full request content.
        N©Úmax_sizeZactual_size)	rW   Ú	bytearrayrQ   rß   Úextendr[   r–   r(   Úbytes)rq   ÚbodyÚchunkZ	body_sizer?   r?   r@   ÚreadH  s    


 ÿ
zBaseRequest.readc                 Ã   s"   |   ¡ I dH }| jpd}| |¡S )z1Return BODY as text using encoding from .charset.Nrw   )rè   ÚcharsetÚdecode)rq   Z
bytes_bodyÚencodingr?   r?   r@   Útext]  s    
zBaseRequest.text)Úloads)rí   rj   c                Ã   s   |   ¡ I dH }||ƒS )zReturn BODY as JSON.N)rì   )rq   rí   ræ   r?   r?   r@   Újsonc  s    zBaseRequest.jsonc                 Ã   s   t | j| jƒS )z3Return async iterator to process BODY as multipart.)r    rR   rQ   r†   r?   r?   r@   Ú	multiparth  s    zBaseRequest.multipartz,MultiDictProxy[Union[str, bytes, FileField]]c                 Ã   sv  | j dk	r| j S | j| jkr.ttƒ ƒ| _ | j S | j}|dkrNttƒ ƒ| _ | j S tƒ }|dk�r(|  ¡ I dH }| j}| ¡ I dH }|dk	�rfd}|j	 
tj¡}t|tƒ�r|jdk	s¶t‚|j�r€t ¡ }|jdd�I dH }	|	�r:| |	¡}	| |	¡ |t|	ƒ7 }d|  k �r|k �r&n nt||d�‚|jdd�I dH }	qØ| d¡ |dk�rRd}t|j|jttj|ƒ||j	ƒ}
| |j|
¡ nŒ|jd	d
�I dH }|dk�s¨|  d¡�rÊ|j!dd�}| |j| |¡¡ n| |j|¡ |t|ƒ7 }d|  k �rü|k �rn nt||d�‚nt"dƒ‚| ¡ I dH }q€n>|  ¡ I dH }|�rf| j#�pFd}| $t%| &¡  |¡d	|d�¡ t|ƒ| _ | j S )zReturn POST parameters.N)rB   z!application/x-www-form-urlencodedúmultipart/form-datarð   r   i   )Úsizerá   zapplication/octet-streamT)rê   ztext/rw   )Údefaultz8To decode nested multipart you need to use custom reader)Úkeep_blank_valuesrë   )'rV   rS   ÚPOST_METHODSr   r   r5   rï   r[   Únextr7   r°   r   ZCONTENT_TYPEr³   r   r2   ro   r3   ÚtempfileÚTemporaryFileZ
read_chunkrê   Úwriter–   r(   Úseekr+   r   r=   r>   Úaddrè   Ú
startswithÚget_charsetrÐ   ré   rä   r   Úrstrip)rq   r5   Úoutrï   râ   Úfieldrñ   Zfield_ctÚtmprç   Zffr“   ré   Údatar?   r?   r@   Úpostl  sŒ    




 ÿ


û ÿÿýÿ
zBaseRequest.post)r2   rò   rj   c                 C   s0   | j }|dkr|S |j}|dkr$|S | ||¡S )z"Extra info from protocol transportN)rO   rn   rp   )rq   r2   rò   rf   rn   r?   r?   r@   rp   Ë  s    zBaseRequest.get_extra_infoc                 C   s(   | j  dd¡ d¡}d | jj| j|¡S )NÚasciiÚbackslashreplacez<{} {} {} >)rv   rx   rê   Úformatr€   r8   rS   )rq   Zascii_encodable_pathr?   r?   r@   Ú__repr__×  s    ÿ  ÿzBaseRequest.__repr__)Úotherrj   c                 C   s   t | ƒt |ƒkS rC   )Úid)rq   r  r?   r?   r@   Ú__eq__ß  s    zBaseRequest.__eq__c                 C   s   dS )NTr?   r†   r?   r?   r@   Ú__bool__â  s    zBaseRequest.__bool__©Úresponserj   c                 Ã   s   d S rC   r?   )rq   r  r?   r?   r@   Ú_prepare_hookå  s    zBaseRequest._prepare_hook)Úexcrj   c                 C   s   | j  |¡ d S rC   )rQ   Úset_exception)rq   r  r?   r?   r@   Ú_cancelè  s    zBaseRequest._cancel)N)br8   r9   r:   r   Z
METH_PATCHZ	METH_POSTZMETH_PUTZ
METH_TRACEZMETH_DELETErô   r   ÚATTRSÚ	frozensetr   r"   r   ÚasyncioZAbstractEventLooprÑ   r   r   r;   r   rr   r   r'   r%   r„   Úpropertyrh   rf   Z	Transportrn   r‡   r   rd   r   rt   ri   r’   r”   r•   r—   r   r™   Úboolr›   r   r	   r®   ra   rk   r   rl   rb   rc   rm   rv   r·   r¸   r¹   rº   r7   r&   r{   Ústaticmethodr¾   rÂ   rÃ   rÄ   rÅ   rÆ   rË   rÒ   r×   rØ   rÛ   rÜ   rÞ   rà   rå   rè   rì   r#   r$   rî   r    rï   r  rp   r  Úobjectr	  r
  r)   r  ÚBaseExceptionr  r?   r?   r?   r@   r*   a   s  ûïÿóò4ø÷9 <	#_r*   c                	       sÄ   e Zd ZejedgƒB Zeeddœ‡ fdd„ZerHe	eddœ‡ fdd„Z
eeeeeed	œe	eee	e	e	d d
œ‡ fdd„Zeddœdd„ƒZeddœdd„ƒZeedœdd„ƒZeddœdd„Z‡  ZS )r,   Ú_match_infoN)Úargsrƒ   rj   c                    s   t ƒ j||Ž d | _d S rC   )Úsuperrr   r  )rq   r  rƒ   ©r€   r?   r@   rr   ð  s    zRequest.__init__)r2   rÇ   rj   c                    s8   || j kr&tjd | jj|¡tdd� tƒ  ||¡ d S )Nz-Setting custom {}.{} attribute is discouragedrŽ   r‰   )	r  r‹   rŒ   r  r€   r8   r�   r  Ú__setattr__)rq   r2   rÇ   r  r?   r@   r  û  s    
 ÿüzRequest.__setattr__rs   ru   c          	         s.   t ƒ j||||||d�}tt|ƒ}| j|_|S )Nrs   )r  r„   r   r,   r  )	rq   rk   rt   r7   ra   rb   rc   ÚretZnew_retr  r?   r@   r„     s    
ú
zRequest.cloner/   r…   c                 C   s   | j }|dk	st‚|S )zResult of route resolving.N)r  ro   ©rq   Ú
match_infor?   r?   r@   r     s    zRequest.match_infor-   c                 C   s   | j }|dk	st‚|jS )zApplication instance.N)r  ro   Zcurrent_appr  r?   r?   r@   Úapp"  s    zRequest.appc                 C   sH   | j }|d k	st‚|j}| j}| |¡}tt|d |d … ƒƒ}t|ƒS )Nr   )r  ro   Zappsr!  Úindexr´   Úreversedr   )rq   r   Úlstr!  ÚidxZsublistr?   r?   r@   Úconfig_dict)  s    
zRequest.config_dictr  c                 Ã   s6   | j }|d krd S |jD ]}|j | |¡I d H  qd S rC   )r  Z_appsZon_response_prepareÚsend)rq   r  r   r!  r?   r?   r@   r  3  s
    
zRequest._prepare_hook)r8   r9   r:   r*   r  r  r   rr   r   r;   r  r   r'   r%   r„   r   r   r  r!  r   r&  r)   r  Ú__classcell__r?   r?   r  r@   r,   ì  s4   	ø÷	r,   )\r  r¾   r=   rÍ   r±   Ústringrö   r¡   r‹   Úemail.utilsr   Zhttp.cookiesr   r   Útypingr   r   r   r   r	   r
   r   r   r   r   Úurllib.parser   ÚattrZ	multidictr   r   r   r   Zyarlr   rB   r   Úabcr   Zhelpersr   r   r   r   r   Zhttp_parserr   Zhttp_writerr   rï   r   r    Zstreamsr!   r"   Ztypedefsr#   r$   r%   r&   r'   Zweb_exceptionsr(   Zweb_responser)   Ú__all__Zweb_appr-   Zweb_protocolr.   Zweb_urldispatcherr/   Úsr+   ÚdigitsÚascii_lettersZ_TCHARZ_TOKENr  r¶   r}   ÚrangeZ_QDTEXTZ_QUOTED_PAIRZ_QUOTED_STRINGZ_FORWARDED_PAIRÚcompiler¦   r¢   r;   r*   r,   r?   r?   r?   r@   Ú<module>   sp   0 ÿ ÿ ÿ

     