a
     ÑOcn  ã                
   @   sÜ  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 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+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8m9Z9 ddl:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ ddlAmBZB ddlCmDZD dZEe�r°ddlFmGZG ddlHmIZI ddlJmKZK ejLdddd�G dd„ dƒƒZMejNejO d ZPe<eQ eRd< deP› d�ZSe<eQ eRd< d  Td! Ud"d#„ d$eVeWd%d&ƒƒ D ƒ¡¡ZXe<eQ eRd'< d(ZYe<eQ eRd)< d*jTeXeYd+�ZZe<eQ eRd,< d-jTeSeZd.�Z[e<eQ eRd/< e \d0¡Z]e<eeQ  eRd1< e \e[¡Z^e<eeQ  eRd2< G d3d4„ d4eeQef e,ƒZ_G d5d6„ d6e_ƒZ`dS )7é    N)ÚSimpleCookie)ÚMappingProxyType)ÚTYPE_CHECKINGÚAnyÚDictÚIteratorÚMappingÚMutableMappingÚOptionalÚPatternÚTupleÚUnionÚcast)Ú	parse_qsl)ÚCIMultiDictÚCIMultiDictProxyÚ	MultiDictÚMultiDictProxy)ÚURLé   )Úhdrs)ÚAbstractStreamWriter)	ÚDEBUGÚETAG_ANYÚLIST_QUOTED_ETAG_REÚChainMapProxyÚETagÚHeadersMixinÚparse_http_dateÚreifyÚsentinel)ÚRawRequestMessage)ÚHttpVersion)ÚBodyPartReaderÚMultipartReader)ÚEmptyStreamReaderÚStreamReader)ÚDEFAULT_JSON_DECODERÚFinalÚ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 )r0   ÚnameÚfilenameÚfileÚcontent_typeúCIMultiDictProxy[str]ÚheadersN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚioÚBufferedReader© rD   rD   úJ/var/www/html/gsl.tools/lib/python3.9/site-packages/aiohttp/web_request.pyr0   D   s
   

r0   z!#$%&'*+.^_`|~-Ú_TCHARú[z]+Ú_TOKENz[{}]Ú c                 c   s   | ]}t |ƒV  qd S ©N)Úchr)Ú.0ÚcrD   rD   rE   Ú	<genexpr>S   ó    rN   )é	   é    é!   é#   é   Ú_QDTEXTz
\\[\t !-~]Ú_QUOTED_PAIRz"(?:{quoted_pair}|{qdtext})*")ZqdtextZquoted_pairÚ_QUOTED_STRINGz0({token})=({token}|{quoted_string})(:\d{{1,4}})?)ÚtokenZquoted_stringÚ_FORWARDED_PAIRz\\([\t !-~])Ú_QUOTED_PAIR_REPLACE_REÚ_FORWARDED_PAIR_REc                   @   s¨  e Zd ZejejejejejhZ	e
jeg d¢ƒ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d œd!d"„Z(eddœd#d$„Z)edœd%d&„Z*e+e dœd'd(„Z,e"e-dœd)d*„ƒZ.e"e/e0eef d+f dœd,d-„ƒZ1e"edœd.d/„ƒZ2e"edœd0d1„ƒZ3e"e4dœd2d3„ƒZ5e"edœd4d5„ƒZ6e"ee dœd6d7„ƒZ7e"e$dœd8d9„ƒZ8e"edœd:d;„ƒZ9e"edœd<d=„ƒZ:e"edœd>d?„ƒZ;e"d@dœdAdB„ƒZ<e"edœdCdD„ƒZ=e"dEdœdFdG„ƒZ>e"e?dœdHdI„ƒZ@e"eeAjA dœdJdK„ƒZBe"eeAjA dœdLdM„ƒZCeDee+eE dNœdOdP„ƒZFeGee ee/eEd+f  dQœdRdS„ƒZHe"ee/eEd+f  dœdTdU„ƒZIe"ee/eEd+f  dœdVdW„ƒZJe"eeAjA dœdXdY„ƒZKe"e-dœdZd[„ƒZLe"e0eef dœd\d]„ƒZMe"eNdœd^d_„ƒZOe"edœd`da„ƒZPee-dœdbdc„ƒZQee-dœddde„ƒZRe"e-dœdfdg„ƒZSddœdhdi„ZTeUdœdjdk„ZVedœdldm„ZWeXdnœeYedoœdpdq„ZZe[dœdrds„Z\dtdœdudv„Z]d‡eeedwœdxdy„Z^edœdzd{„Z_e`e-d|œd}d~„Zae-dœdd€„Zbecdd�œd‚dƒ„Zdeedd„œd…d†„Zfd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Úremoter3   zasyncio.Task[None])ÚmessageÚpayloadÚprotocolÚpayload_writerÚtaskÚlooprm   rn   ro   rp   rq   Úreturnc                C   s  |d u ri }|| _ || _|| _|| _|j| _|j| _|j| _	i | _
|j}| ¡ r~|| j
d< |j| j
d< |j| j
d< | ¡ | _n|j| _d | _d | _|| _|| _|| _|| _| jj}|d us¾J ‚| d¡| _| d¡| _|	d urè|	| j
d< |
d urú|
| j
d< |d u�r|| j
d< d S )NÚurlrp   ro   Z
sslcontextZpeernamerq   )r\   r]   r^   r_   r<   r`   Úmethodra   Úversionrb   rg   ry   Úis_absoluterp   ro   Úrelativerc   rd   re   rf   rh   ri   rj   Ú	transportÚget_extra_infork   rl   )Úselfrr   rs   rt   ru   rv   rw   rm   rn   ro   rp   rq   ry   r~   rD   rD   rE   Ú__init__Ž   sB    



zBaseRequest.__init__©rz   Úrel_urlr<   ro   rp   rq   ©rz   rƒ   r<   ro   rp   rq   rx   c                C   sò   | j rtdƒ‚i }|tur"||d< |turFt|ƒ}||d< t|ƒ|d< |turxtt|ƒƒ|d< tdd„ | ¡ D ƒƒ|d< | j	j
f i |¤Ž}	i }
|turž||
d	< |tur®||
d
< |tu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 contentrz   ry   Úpathr<   c                 s   s&   | ]\}}|  d ¡|  d ¡fV  qdS )úutf-8N)Úencode)rL   ÚkÚvrD   rD   rE   rN   ä   s   z$BaseRequest.clone.<locals>.<genexpr>Úraw_headersro   rp   rq   )rm   rn   )re   ÚRuntimeErrorr    r   r@   r   r   ÚtupleÚitemsr\   Ú_replaceÚ	__class__r_   r]   r^   rh   rj   ri   rf   Úcopy)r€   rz   rƒ   r<   ro   rp   rq   ÚdctÚnew_urlrr   ÚkwargsrD   rD   rE   ÚcloneÇ   sF    ÿúø	÷zBaseRequest.clone©rx   c                 C   s   | j S rJ   )rh   ©r€   rD   rD   rE   rv   þ   s    zBaseRequest.taskc                 C   s   | j S rJ   )r]   r–   rD   rD   rE   rt     s    zBaseRequest.protocolc                 C   s   | j d u rd S | j jS rJ   )r]   r~   r–   rD   rD   rE   r~     s    
zBaseRequest.transportc                 C   s   | j S rJ   )r^   r–   rD   rD   rE   Úwriter  s    zBaseRequest.writerc                 C   s   t jdtdd� | jS )NzRequest.message is deprecatedé   ©Ú
stacklevel)ÚwarningsÚwarnÚDeprecationWarningr\   r–   rD   rD   rE   rr     s    zBaseRequest.messagec                 C   s   | j S rJ   )rc   r–   rD   rD   rE   rƒ     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�   rj   r–   rD   rD   rE   rw     s    ÿzBaseRequest.loop)Úkeyrx   c                 C   s
   | j | S rJ   ©rf   ©r€   rŸ   rD   rD   rE   Ú__getitem__"  s    zBaseRequest.__getitem__)rŸ   Úvaluerx   c                 C   s   || j |< d S rJ   r    )r€   rŸ   r£   rD   rD   rE   Ú__setitem__%  s    zBaseRequest.__setitem__c                 C   s   | j |= d S rJ   r    r¡   rD   rD   rE   Ú__delitem__(  s    zBaseRequest.__delitem__c                 C   s
   t | jƒS rJ   )Úlenrf   r–   rD   rD   rE   Ú__len__+  s    zBaseRequest.__len__c                 C   s
   t | jƒS rJ   )Úiterrf   r–   rD   rD   rE   Ú__iter__.  s    zBaseRequest.__iter__c                 C   s
   | j dkS )z5A bool indicating if the request is handled with SSL.Úhttps)ro   r–   rD   rD   rE   Úsecure3  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u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v �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
        rD   r   FNú,ú"z\1r   éÿÿÿÿTú;z 	)r\   r<   Zgetallr   Z	FORWARDEDr¦   ÚappendÚtypesr   r[   ÚmatchÚfindÚgroupsrZ   ÚsubÚlowerÚgrouprŒ   )r€   ÚelemsZfield_valueÚlengthÚposZneed_separatorÚelemr²   r7   r£   ÚportrD   rD   rE   Ú	forwarded8  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)rk   r–   rD   rD   rE   ro   u  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.
        )ra   r–   rD   rD   rE   rz   …  s    zBaseRequest.methodc                 C   s   | j S )zxRead only property for getting HTTP version of request.

        Returns aiohttp.protocol.HttpVersion instance.
        )rb   r–   rD   rD   rE   r{   �  s    zBaseRequest.versionc                 C   s$   | j j tj¡}|dur|S t ¡ 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)r\   r<   Úgetr   ZHOSTÚsocketÚgetfqdn)r€   rp   rD   rD   rE   rp   •  s    
zBaseRequest.hostc                 C   s6   | j du rdS t| j ttfƒr,t| j d ƒS t| j ƒ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
        Nr   )rl   Ú
isinstanceÚlistrŒ   r@   r–   rD   rD   rE   rq   ¤  s
    	
zBaseRequest.remotec                 C   s   t j| j| jd�}| | j¡S )N)ro   rp   )r   Úbuildro   rp   Újoinrc   )r€   ry   rD   rD   rE   ry   ³  s    zBaseRequest.urlc                 C   s   | j jS )z_The URL including *PATH INFO* without the host or scheme.

        E.g., ``/app/blog``
        )rc   r…   r–   rD   rD   rE   r…   ¸  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@   rc   r–   rD   rD   rE   Ú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``
        )r\   r…   r–   rD   rD   rE   Úraw_pathÈ  s    zBaseRequest.raw_pathzMultiDictProxy[str]c                 C   s   t | jjƒS )z7A multidict with all the variables in the query string.)r   rc   Úqueryr–   rD   rD   rE   rÈ   Ò  s    zBaseRequest.queryc                 C   s   | j jS )z:The query string in the URL.

        E.g., id=10
        )rc   Úquery_stringr–   rD   rD   rE   rÉ   ×  s    zBaseRequest.query_stringr;   c                 C   s   | j S )z4A case-insensitive multidict proxy with all headers.)r`   r–   rD   rD   rE   r<   ß  s    zBaseRequest.headersc                 C   s   | j jS )z$A sequence of pairs for all headers.)r\   rŠ   r–   rD   rD   rE   rŠ   ä  s    zBaseRequest.raw_headersc                 C   s   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   ZIF_MODIFIED_SINCEr–   rD   rD   rE   Úif_modified_sinceé  s    zBaseRequest.if_modified_sincec                 C   s   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   ZIF_UNMODIFIED_SINCEr–   rD   rD   rE   Úif_unmodified_sinceñ  s    zBaseRequest.if_unmodified_since)Úetag_headerrx   c                 c   sZ   | t krtdt d�V  n>t | ¡D ]2}| ddd¡\}}}|rB qVtt|ƒ|d�V  q"dS )z'Extract `ETag` objects from raw header.F)Úis_weakr£   rž   r˜   é   N)r   r   r   Úfinditerr·   Úbool)rÌ   r²   rÍ   r£   ÚgarbagerD   rD   rE   Ú_etag_valuesù  s    þ
þzBaseRequest._etag_values)Úheader_valuerx   c                 C   s   |sd S t |  |¡ƒS rJ   )rŒ   rÒ   )ÚclsrÓ   rD   rD   rE   Ú_if_match_or_none_impl  s    z"BaseRequest._if_match_or_none_implc                 C   s   |   | 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   ZIF_MATCHr–   rD   rD   rE   Úif_match  s    zBaseRequest.if_matchc                 C   s   |   | 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   ZIF_NONE_MATCHr–   rD   rD   rE   Úif_none_match  s    zBaseRequest.if_none_matchc                 C   s   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   ZIF_RANGEr–   rD   rD   rE   Úif_range'  s    zBaseRequest.if_rangec                 C   s
   | j j S )zIs keepalive enabled by client?)r\   Zshould_closer–   rD   rD   rE   Ú
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.
        rI   c                 S   s   i | ]\}}||j “qS rD   )r£   )rL   rŸ   ÚvalrD   rD   rE   Ú
<dictcomp><  rO   z'BaseRequest.cookies.<locals>.<dictcomp>)r<   r¿   r   ZCOOKIEr   r   r�   )r€   ÚrawÚparsedrD   rD   rE   Úcookies4  s    zBaseRequest.cookiesc                 C   sä   | j  tj¡}d\}}|durØzd}t ||¡d \}}W n tyT   tdƒ‚Y n0 |rbt|ƒnd}|rrt|ƒnd}|du r�|dur�| }d}|dur¸|dur¸|d7 }||kr¸tdƒ‚||  u rÌd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)
r`   r¿   r   ÚRANGEÚreÚfindallÚ
IndexErrorÚ
ValueErrorÚintÚslice)r€   ÚrngÚstartÚendÚpatternrD   rD   rE   Ú
http_range>  s(    zBaseRequest.http_rangec                 C   s   | j S )zReturn raw payload stream.)r_   r–   rD   rD   rE   Úcontentb  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�   r_   Úat_eofr–   rD   rD   rE   Úhas_bodyg  s    ÿzBaseRequest.has_bodyc                 C   s   | j  ¡  S )rì   )r_   rí   r–   rD   rD   rE   Úcan_read_bodyo  s    zBaseRequest.can_read_bodyc                 C   s   t | jƒtuS )z6Return True if request has HTTP BODY, False otherwise.)Útyper_   r%   r–   rD   rD   rE   Úbody_existst  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)r_   rí   Úreadanyr–   rD   rD   rE   Úreleasey  s    
zBaseRequest.releasec                 Ã   sh   | j du 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)	re   Ú	bytearrayr_   rò   Úextendri   r¦   r-   Úbytes)r€   ÚbodyÚchunkZ	body_sizerD   rD   rE   Úread�  s    


ÿ
zBaseRequest.readc                 Ã   s"   |   ¡ I dH }| jpd}| |¡S )z1Return BODY as text using encoding from .charset.Nr†   )rû   ÚcharsetÚdecode)r€   Z
bytes_bodyÚencodingrD   rD   rE   Útext–  s    
zBaseRequest.text)Úloads)r   rx   c                Ã   s   |   ¡ I dH }||ƒS )zReturn BODY as JSON.N)rÿ   )r€   r   rù   rD   rD   rE   Újsonœ  s    zBaseRequest.jsonc                 Ã   s   t | j| jƒS )z3Return async iterator to process BODY as multipart.)r$   r`   r_   r–   rD   rD   rE   Ú	multipart¡  s    zBaseRequest.multipartz,MultiDictProxy[Union[str, bytes, FileField]]c                 Ã   s~  | j dur| j S | j| jvr.ttƒ ƒ| _ | j S | j}|dvrNttƒ ƒ| _ | j S tƒ }|dk�r0|  ¡ I dH }| j}| ¡ I dH }|du�rnd}|j	 
tj¡}t|tƒ�r|jdus¶J ‚|j�rˆt ¡ }|jdd�I dH }	|	�rB| |	¡}	| |	¡ |t|	ƒ7 }d|  k �r|k �r.n n| ¡  t||d�‚|jdd�I dH }	qØ| d¡ |du �rZd}t|j|jttj|ƒ||j	ƒ}
| |j|
¡ nŒ|jd	d
�I dH }|du �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 }|�rn| j#�pNd}| $t%| &¡  |¡d	|d�¡ t|ƒ| _ | j S )zReturn POST parameters.N)rI   z!application/x-www-form-urlencodedúmultipart/form-datar  r   i   )Úsizerô   zapplication/octet-streamT)rý   ztext/r†   )Údefaultz8To decode nested multipart you need to use custom reader)Úkeep_blank_valuesrþ   )'rd   ra   ÚPOST_METHODSr   r   r:   r  ri   Únextr<   r¿   r   ÚCONTENT_TYPErÂ   r#   r7   r8   ÚtempfileÚTemporaryFileZ
read_chunkrý   Úwriter¦   Úcloser-   Úseekr0   r   rB   rC   Úaddrû   Ú
startswithÚget_charsetrã   rü   r÷   r   Úrstrip)r€   r:   Úoutr  rõ   Úfieldr  Zfield_ctÚtmprú   Úffr£   rü   ÚdatarD   rD   rE   Úpost¥  sŠ    




ÿ


ûÿÿýÿ
zBaseRequest.post)r7   r  rx   c                 C   s0   | j }|du r|S |j}|du r$|S | ||¡S )z"Extra info from protocol transportN)r]   r~   r   )r€   r7   r  rt   r~   rD   rD   rE   r     s    zBaseRequest.get_extra_infoc                 C   s(   | j  dd¡ d¡}d | jj| j|¡S )NÚasciiÚbackslashreplacez<{} {} {} >)r…   r‡   rý   Úformatr�   r=   ra   )r€   Zascii_encodable_pathrD   rD   rE   Ú__repr__  s    ÿÿzBaseRequest.__repr__)Úotherrx   c                 C   s   t | ƒt |ƒkS rJ   )Úid)r€   r  rD   rD   rE   Ú__eq__  s    zBaseRequest.__eq__c                 C   s   dS )NTrD   r–   rD   rD   rE   Ú__bool__  s    zBaseRequest.__bool__©Úresponserx   c                 Ã   s   d S rJ   rD   )r€   r"  rD   rD   rE   Ú_prepare_hook  s    zBaseRequest._prepare_hook)Úexcrx   c                 C   s   | j  |¡ d S rJ   )r_   Zset_exception)r€   r$  rD   rD   rE   Ú_cancel"  s    zBaseRequest._cancel)N)gr=   r>   r?   r   Z
METH_PATCHZ	METH_POSTZMETH_PUTZ
METH_TRACEZMETH_DELETEr  r   ÚATTRSÚ	frozensetr!   r&   r   ÚasyncioZAbstractEventLooprä   r
   r   r@   r   r�   r    r,   r*   r”   Úpropertyrv   rt   Ú	Transportr~   r—   r   rr   r   rƒ   rw   r¢   r¤   r¥   r§   r   r©   rÐ   r«   r   r   r½   ro   rz   r"   r{   rp   rq   ry   r…   rÆ   rÇ   rÈ   rÉ   r<   r+   rŠ   ÚdatetimerÊ   rË   Ústaticmethodr   rÒ   ÚclassmethodrÕ   rÖ   r×   rØ   rÙ   rÞ   rå   rê   rë   rî   rï   rñ   ró   rø   rû   rÿ   r'   r)   r  r$   r  r  r   r  Úobjectr  r   r.   r#  ÚBaseExceptionr%  rD   rD   rD   rE   r/   n   s  ûÿóò<ø÷7 <	þ	#`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 )r1   Ú_match_infoN)Úargsr“   rx   c                    s   t ƒ j|i |¤Ž d | _d S rJ   )Úsuperr�   r0  )r€   r1  r“   ©r�   rD   rE   r�   *  s    zRequest.__init__)r7   rÚ   rx   c                    s8   || j vr&tjd | jj|¡tdd� tƒ  ||¡ d S )Nz-Setting custom {}.{} attribute is discouragedrž   r™   )	r&  r›   rœ   r  r�   r=   r�   r2  Ú__setattr__)r€   r7   rÚ   r3  rD   rE   r4  5  s    
ÿüzRequest.__setattr__r‚   r„   c          	         s.   t ƒ j||||||d�}tt|ƒ}| j|_|S )Nr‚   )r2  r”   r   r1   r0  )	r€   rz   rƒ   r<   ro   rp   rq   ÚretZnew_retr3  rD   rE   r”   ?  s    
ú
zRequest.cloner4   r•   c                 C   s   | j }|dusJ ‚|S )zResult of route resolving.N)r0  ©r€   Ú
match_inforD   rD   rE   r7  U  s    zRequest.match_infor2   c                 C   s   | j }|dusJ ‚|jS )zApplication instance.N)r0  Zcurrent_appr6  rD   rD   rE   Úapp\  s    zRequest.appc                 C   sH   | j }|d usJ ‚|j}| j}| |¡}tt|d |d … ƒƒ}t|ƒS )Nr   )r0  Zappsr8  ÚindexrÃ   Úreversedr   )r€   r7  Úlstr8  ÚidxZsublistrD   rD   rE   Úconfig_dictc  s    
zRequest.config_dictr!  c                 Ã   s6   | j }|d u rd S |jD ]}|j | |¡I d H  qd S rJ   )r0  Z_appsZon_response_prepareÚsend)r€   r"  r7  r8  rD   rD   rE   r#  m  s
    
zRequest._prepare_hook)r=   r>   r?   r/   r&  r'  r   r�   r   r@   r4  r    r,   r*   r”   r   r7  r)  r8  r   r=  r.   r#  Ú__classcell__rD   rD   r3  rE   r1   &  s4   	ø÷	r1   )ar(  r+  rB   rà   rÀ   Ústringr
  r±   r›   Úhttp.cookiesr   r   Útypingr   r   r   r   r   r	   r
   r   r   r   r   Úurllib.parser   ÚattrZ	multidictr   r   r   r   Zyarlr   rI   r   Úabcr   Zhelpersr   r   r   r   r   r   r   r   r    Zhttp_parserr!   Zhttp_writerr"   r  r#   r$   Zstreamsr%   r&   Ztypedefsr'   r(   r)   r*   r+   r,   Zweb_exceptionsr-   Zweb_responser.   Ú__all__Zweb_appr2   Zweb_protocolr3   Zweb_urldispatcherr4   Úsr0   ÚdigitsÚascii_lettersrF   r@   rA   rH   r  rÅ   rŒ   ÚrangerU   rV   rW   rY   ÚcompilerZ   r[   r/   r1   rD   rD   rD   rE   Ú<module>   sp   
4,  ÿÿÿþÿ     =