a
    }3ej                     @   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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m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" dd
l#m$Z$m%Z%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8m9Z9 ej:dkrTd dlm;Z; nd dl<m;Z; zd dl=Z=dZ>W n e?y   dZ>Y n0 dZ@e;d ZAeBejCZDe8eeE  eFd< eGdZHe8eeE  eFd< eGdZIe8eeE  eFd< eGdZJe8eeK  eFd< eGdZLG dd deZMeNd g d!ZOed"eMeOZPG d#d$ d$e
ZQG d%d& d&e
ZRG d'd( d(ZSG d)d* d*e jTeeP ZUG d+d, d,eUeM ZVG d-d. d.eUeO ZWG d/d0 d0ZXG d1d2 d2ZYeVZZeWZ[eMZ\eOZ]z2e%sdd3l^mVZVmWZWmMZMmOZO eVZ_eWZ`eMZaeOZbW n e?y   Y n0 dS )4    N)suppress)IntEnum)AnyClassVarGenericList
NamedTupleOptionalPatternSetTupleTypeTypeVarUnioncast)CIMultiDictCIMultiDictProxyistr)URL   )hdrs)BaseProtocol)DEBUGNO_EXTENSIONSBaseTimerContext)BadHttpMessageBadStatusLineContentEncodingErrorContentLengthErrorInvalidHeaderLineTooLongTransferEncodingError)HttpVersionHttpVersion10)internal_logger)EMPTY_PAYLOADStreamReader)Final
RawHeaders)      )LiteralTF)HeadersParser
HttpParserHttpRequestParserHttpResponseParserRawRequestMessageRawResponseMessage)   
   
ASCIISETz[!#$%&'*+\-.^_`|~0-9A-Za-z]+METHREzHTTP/(\d).(\d)VERSREs%   [\x00-\x1F\x7F()<>@,;:\[\]={} \t\"\\]HDRREs   [0-9a-fA-F]+c                   @   sb   e Zd ZU eed< eed< eed< ded< eed< eed< ee ed< eed	< eed
< e	ed< dS )r0   methodpathversionCIMultiDictProxy[str]headersraw_headersshould_closecompressionupgradechunkedurlN)
__name__
__module____qualname__str__annotations__r"   r(   boolr	   r    rI   rI   F/home/pi/bot/my_env/lib/python3.9/site-packages/aiohttp/http_parser.pyr0   U   s   
r0   r1   )	r:   codereasonr<   r=   r>   r?   r@   rA   _MsgTc                   @   s   e Zd ZdZdZdZdZdS )
ParseStater   r      r)   N)rC   rD   rE   
PARSE_NONEPARSE_LENGTHPARSE_CHUNKEDPARSE_UNTIL_EOFrI   rI   rI   rJ   rN   u   s   rN   c                   @   s    e Zd ZdZdZdZdZdZdS )
ChunkStater   r   rO   r)      N)rC   rD   rE   PARSE_CHUNKED_SIZEPARSE_CHUNKED_CHUNKPARSE_CHUNKED_CHUNK_EOFPARSE_MAYBE_TRAILERSPARSE_TRAILERSrI   rI   rI   rJ   rT   }   s
   rT   c                   @   s>   e Zd ZdeeeddddZee edef dd	d
Z	dS )r,        N)max_line_sizemax_headersmax_field_sizereturnc                 C   s   || _ || _|| _d S N)r]   r^   r_   )selfr]   r^   r_   rI   rI   rJ   __init__   s    zHeadersParser.__init__r;   linesr`   c                 C   s0  t  }g }d}|d }t|}|r z|dd\}}W n tyT   t|d Y n0 |d |d hddh@ rvt||d}t|rt|t|| jkrt	d
|d	d
t| jtt|t|}	|d7 }|| }|o|d dv }
|
r|g}|
r|	t|7 }	|	| jkr>t	d
|d	d
t| jt|	|| |d7 }||k rv|| }|r~|d dv }
qd}qqd|}n0|	| jkrt	d
|d	d
t| jt|	|d}|dd}|dd}d|v sd|v sd|v rt|||| |||f qt|t|fS )Nr      :r       	   s    	zrequest header name {}utf8xmlcharrefreplace)rh   ri   zrequest header field {}    utf-8surrogateescape
 )r   lensplit
ValueErrorr   lstripr7   searchr_   r    formatdecoderF   appendjoinstripaddr   tuple)rb   re   r<   r=   Z	lines_idxline
line_countZbnameZbvalueheader_lengthZcontinuationZ
bvalue_lstnamevaluerI   rI   rJ   parse_headers   s    








zHeadersParser.parse_headers)r[   r\   r[   )
rC   rD   rE   intrc   r   bytesr   r(   r   rI   rI   rI   rJ   r,      s      
r,   c                   @   s  e Zd ZU dZee ed< dee ee	j
 eeeeee ee ee eeee  eeeddd	d
Zejee edddZee dddZddejejejfeeeeeeeeeeef  eef dddZ ee ede!ee ee eef dddZ"eddddZ#dS )r-   FlaxN   r[   r\   T)protocollooplimitr]   r^   r_   timerrK   r8   readallpayload_exceptionresponse_with_bodyread_until_eofauto_decompressr`   c                 C   s   || _ || _|| _|| _|| _|| _|| _|	| _|
| _|| _	|| _
|| _g | _d| _d| _d | _d | _|| _|| _t|||| _d S )Nrl   F)r   r   r]   r^   r_   r   rK   r8   r   r   r   r   _lines_tail	_upgraded_payload_payload_parser_auto_decompress_limitr,   _headers_parser)rb   r   r   r   r]   r^   r_   r   rK   r8   r   r   r   r   r   rI   rI   rJ   rc      s(    zHttpParser.__init__rd   c                 C   s   d S ra   rI   )rb   re   rI   rI   rJ   parse_message  s    zHttpParser.parse_messager`   c                 C   s   | j d ur| j   d | _ nh| jr0| j| j | jr| jd dkrP| jd tt | | jW  d    S 1 sz0    Y  d S )Nrg   z
rl   )r   feed_eofr   r   ry   r   	Exceptionr   rb   rI   rI   rJ   r     s    


*zHttpParser.feed_eofr2   rl   )dataSEPEMPTYCONTENT_LENGTHMETH_CONNECTSEC_WEBSOCKET_KEY1r`   c                    s  g }| j r| j | d }| _ t|}d}	| j}
|	|k r| jd u r| js|||	}||	krt| jst|t| }	q.||	kr||	| }|dkr|d}| j| |t| }	| jd |krz| 	| jW | j
  n| j
  0 tt d fdd}| }|jv rt|j| _td	| j}| jd usDJ |d urX|dkshjrjst| j| j|
| jd
}t||j|j| j| j| j| j| jd
}|js|| _n||krtt sJ t| j| j|
| jd
}d| _t|jjd| j| jd| _nvtdddkr|d u r| j!rt| j| j|
| jd
}t||j|j| jd| j| j| jd
}|js|| _nt"}||f n||	d  | _ |}qq.| jd u r| jr| jrJ qq.|r|	|k r| jrJ | jd usJ z| j#||	d  |\}}W nb t$y~ } zH| j%d urT| jj&'| %t(| n| jj&'| d}d}W Y d }~n
d }~0 0 |rd}	t|}d | _q.q.qq.|r|	|k r||	d  }n|}|| j|fS )Nrl   r   r3      rg   r   c                     s6   j  } | d u rd S | d s.t t| S )Nz 	)r<   getr{   	isdecimalr   r   )Z
length_hdrr   msgrI   rJ   get_content_lengthW  s    z0HttpParser.feed_data.<locals>.get_content_lengthr8   )r   r   r   )	lengthrA   r8   r?   rK   r   r   r   r   T)r8   r?   r   r   r   rK   d      ))r   rr   r   r   r   findr   rstripry   r   clearr	   r   r<   r   r@   getattrr8   r   rA   r&   r   r   HttpPayloadParserr?   rK   r   r   r   r   done
isinstancer0   r   r%   	feed_dataBaseExceptionr   payloadset_exceptionrF   )rb   r   r   r   r   r   r   messagesZdata_lenZ	start_posr   posr~   r   r   r8   r   Zpayload_parsereofexcrI   r   rJ   r   *  s   






zHttpParser.feed_datar;   c              
      s6  | j |\ }d}d}d}d}tjtjtjtjtjtjtj	tj
tjtjf
}t fdd|D d}|dur|td| d tj}	|	r|	 }
|
dkrd}n|
d	krd}n|
d
krd} tj}|r| }|dv r|} tj}|dur&d| kr
d}ntdtj v r&td |||||fS )zParses RFC 5322 headers from a stream.

        Line continuations are supported. Returns list of header name
        and value pairs. Header name is in upper case.
        NFc                 3   s&   | ]}t  |d dkr|V  qdS )rI   r   N)rr   Zgetall).0hr<   rI   rJ   	<genexpr>  rl   z+HttpParser.parse_headers.<locals>.<genexpr>zDuplicate 'z' header found.closeTz
keep-aliver@   )gzipdeflatebrrA   z'Request has invalid `Transfer-Encoding`z6Transfer-Encoding can't be present with Content-Length)r   r   r   r   ZCONTENT_LOCATIONZCONTENT_RANGECONTENT_TYPEZETAGZHOSTZMAX_FORWARDSZSERVERZTRANSFER_ENCODINGZ
USER_AGENTnextr   r   Z
CONNECTIONlowerZCONTENT_ENCODING)rb   re   r=   Z
close_connencodingr@   rA   Z
singletonsZbad_hdrconnvencterI   r   rJ   r     sV    

zHttpParser.parse_headers)valr`   c                 C   s
   || _ dS )zZSet connection upgraded (to websocket) mode.

        :param bool val: new state.
        N)r   )rb   r   rI   rI   rJ   set_upgraded$  s    zHttpParser.set_upgraded)NNr   r[   r\   r[   NNNFNTFT)$rC   rD   rE   r   r   rH   rG   r	   r   asyncioZAbstractEventLoopr   r   rF   r   r   rc   abcabstractmethodr   r   rM   r   r   r   r   r   r   _SEPr   r   r&   r   r(   r   r   rI   rI   rI   rJ   r-      sp   
              
' 9Cr-   c                   @   s$   e Zd ZdZee edddZdS )r.   zRead request status line.

    Exception .http_exceptions.BadStatusLine
    could be raised in case of any errors in status line.
    Returns RawRequestMessage.
    rd   c                 C   sh  |d  dd}z|jdd\}}}W n tyB   t|d Y n0 t|| jkrltdt| jtt|t	|s~t|t
	|}|d u rt|tt|dt|d}|dkrtj|d	d
}nL|dr|d\}	}
}|	d\}	}}tj|	||d	d}nt|d	d}| |\}}}}}}|d u rN|tkrJd	}nd}t||||||||||
S )Nr   rm   rn   rO   maxsplitStatus line is too longr   ZCONNECTT)	authorityencoded/#?)r9   Zquery_stringfragmentr   )r   F)rx   rs   rt   r   rr   r]   r    rF   r5   matchr6   r"   r   groupr   build
startswith	partitionr   r#   r0   )rb   re   r~   r8   r9   r:   r   	version_orB   Z	path_partZ_hash_separatorZurl_fragmentZ_question_mark_separatorZqs_partr<   r=   r   r?   r@   rA   rI   rI   rJ   r   4  sf    

	


zHttpRequestParser.parse_messageN)rC   rD   rE   __doc__r   r   r0   r   rI   rI   rI   rJ   r.   ,  s   r.   c                
       sd   e Zd ZdZe Zd	eee e	e	e
ee
eef  eef d fddZee edddZ  ZS )
r/   zRead response status line and headers.

    BadStatusLine could be raised in case of any errors in status line.
    Returns RawResponseMessage.
    N)r   r   argskwargsr`   c                    s0   |d u rt rdnd}t j||g|R i |S )Nr2   r3   )r   superr   )rb   r   r   r   r   	__class__rI   rJ   r     s    zHttpResponseParser.feed_datard   c              
   C   s6  |d  dd}z|jdd\}}W n ty@   t|d Y n0 z|jdd\}}W n tyl   d}Y n0 t|| jkrtdt| jtt|t	|}|d u rt|t
t|dt|d}t|d	ks| st|t|}| |\}	}
}}}}|d u r|tk}t||| |	|
||||	S )
Nr   rm   rn   r   r    r   rO   r)   )rx   rs   rt   r   rr   r]   r    rF   r6   r   r"   r   r   r   r   r#   r1   r{   )rb   re   r~   r:   statusrL   r   r   Zstatus_ir<   r=   r   r?   r@   rA   rI   rI   rJ   r     sR    



z HttpResponseParser.parse_message)N)rC   rD   rE   r   r   r   r   r	   r   r   r   r   r1   r&   rH   r   r   __classcell__rI   rI   r   rJ   r/     s    r/   c                   @   sl   e Zd Zdeee eee ee ee eeeeddddZdddd	Z	de
ee
eee
f dddZdS )r   NFT)r   r   rA   r?   rK   r8   r   r   r   r   r`   c                 C   s   d| _ tj| _tj| _d| _d| _|	| _	|
| _
d| _|rN|rN| j	rNt||}n|}|sntj| _|  d| _n||r|tj| _nn|d urtj| _|| _ | j dkr|  d| _n>|r|dkrtj| _n(|dv rtd tj| _|  d| _|| _d S )Nr   rl   FT   )PUTPOSTz6Content-Length or Transfer-Encoding header is required)_lengthrN   rP   _typerT   rV   _chunk_chunk_size_chunk_tailr   _laxr   DeflateBufferr   rR   rQ   rS   r$   warningr   )rb   r   r   rA   r?   rK   r8   r   r   r   r   Zreal_payloadrI   rI   rJ   rc     sF    


zHttpPayloadParser.__init__r   c                 C   sF   | j tjkr| j  n*| j tjkr.tdn| j tjkrBtdd S )Nz2Not enough data for satisfy content length header.z3Not enough data for satisfy transfer length header.)	r   rN   rS   r   r   rQ   r   rR   r!   r   rI   rI   rJ   r     s    zHttpPayloadParser.feed_eofr2      ;)chunkr   	CHUNK_EXTr`   c                 C   s  | j tjkr| j}t|}||krT|| | _| j|| | jdkr| j  dS n6d| _| j|d | | | j  d||d  fS n | j tjkrn| j	r| j	| }d| _	|r| j
tjkr||}|dkr||d|}|dkr|d | }n|d | }| jr| }tt|sPt|d | dd}	| j|	 |	tt|d}
||t| d  }|
dkrtj| _
| jr|dr|d	d  }ntj| _
|
| _| j  n
|| _	d
S | j
tjkrf| j}t|}||kr|| | _| j|| d
S d| _| j|d | | ||d  }| jrT|drT|d	d  }tj| _
| j  | j
tjkr|d t| |kr|t|d  }tj| _
n
|| _	d
S | j
tjkr"|d t| }||kr| j  d|t|d  fS |sd
S ||d d	 kr|| _	d
S tj| _
| j
tjkr||}|dkr`||t| d  }tj| _
q|| _	d
S qn | j tj kr| j|t| d
S )Nr   )Trl   Trl   asciirn      r   r   )Frl   )!r   rN   rQ   r   rr   r   r   r   rR   r   r   rT   rV   r   r   r{   re	fullmatchHEXDIGITr!   rx   r   r   r   rY   r   rW   r   begin_http_chunk_receivingrX   end_http_chunk_receivingrZ   rS   )rb   r   r   r   requiredZ	chunk_lenr   iZsize_br   sizeheadrI   rI   rJ   r     s    
















zHttpPayloadParser.feed_data)	NFNNNFTTF)r2   r   )rC   rD   rE   r&   r	   r   rH   rF   rc   r   r   r   r   r   rI   rI   rI   rJ   r     s8            : 
r   c                   @   s|   e Zd ZU dZeed< eee ddddZ	e
dddd	Zeedd
ddZddddZddddZddddZdS )r   zDDeflateStream decompress stream and feed data into specified stream.decompressorN)outr   r`   c                 C   sn   || _ d| _|| _d| _|dkrDts,tdG dd d}| | _n&|dkrVdtj ntj}tj	|d	| _d S )
Nr   Fr   zECan not decode content-encoding: brotli (br). Please install `Brotli`c                   @   s8   e Zd ZddddZeedddZeddd	ZdS )
z-DeflateBuffer.__init__.<locals>.BrotliDecoderNr   c                 S   s   t  | _d S ra   )brotliZDecompressor_objr   rI   rI   rJ   rc     s    z6DeflateBuffer.__init__.<locals>.BrotliDecoder.__init__)r   r`   c                 S   s0   t | jdrtt| j|S tt| j|S )N
decompress)hasattrr  r   r   r  process)rb   r   rI   rI   rJ   r    s    z8DeflateBuffer.__init__.<locals>.BrotliDecoder.decompressc                 S   s    t | jdrtt| j S dS )Nflushrl   )r  r  r   r   r
  r   rI   rI   rJ   r
    s    z3DeflateBuffer.__init__.<locals>.BrotliDecoder.flush)rC   rD   rE   rc   r   r  r
  rI   rI   rI   rJ   BrotliDecoder  s   r  r   r   wbits)
r  r  r   _started_decoding
HAS_BROTLIr   r  zlib	MAX_WBITSdecompressobj)rb   r  r   r  	zlib_moderI   rI   rJ   rc     s    
zDeflateBuffer.__init__)r   r`   c                 C   s   | j | d S ra   )r  r   )rb   r   rI   rI   rJ   r     s    zDeflateBuffer.set_exception)r   r  r`   c                 C   s   |sd S |  j |7  _ | jsH| jdkrH|d d@ dkrHtjtj d| _z| j|}W n  tyx   t	d| j Y n0 d| _|r| j
|t| d S )Nr   r      r*   r  z#Can not decode content-encoding: %sT)r  r  r   r  r  r  r  r  r   r   r  r   rr   )rb   r   r  rI   rI   rJ   r     s&    
zDeflateBuffer.feed_datar   c                 C   sR   | j  }|s| jdkrD| j|t| | jdkrD| j jsDtd| j	  d S )Nr   r   )
r  r
  r  r  r   rr   r   r   r   r   )rb   r   rI   rI   rJ   r     s    
zDeflateBuffer.feed_eofc                 C   s   | j   d S ra   )r  r   r   rI   rI   rJ   r     s    z(DeflateBuffer.begin_http_chunk_receivingc                 C   s   | j   d S ra   )r  r   r   rI   rI   rJ   r     s    z&DeflateBuffer.end_http_chunk_receiving)rC   rD   rE   r   r   rG   r&   r	   rF   rc   r   r   r   r   r   r   r   r   rI   rI   rI   rJ   r     s   
#
r   )r.   r/   r0   r1   )cr   r   collectionsr   stringsysr  
contextlibr   enumr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   Z	multidictr   r   r   Zyarlr   r   r   Zbase_protocolr   Zhelpersr   r   r   Zhttp_exceptionsr   r   r   r   r   r    r!   Zhttp_writerr"   r#   logr$   Zstreamsr%   r&   Ztypedefsr'   r(   version_infor+   Ztyping_extensionsr  r  ImportError__all__r   set	printabler4   rF   rG   compiler5   r6   r7   r   r   r0   
namedtupler1   rM   rN   rT   r,   ABCr-   r.   r/   r   r   ZHttpRequestParserPyZHttpResponseParserPyZRawRequestMessagePyZRawResponseMessagePyZ_http_parserZHttpRequestParserCZHttpResponseParserCZRawRequestMessageCZRawResponseMessageCrI   rI   rI   rJ   <module>   s   
<$	
		
g  BVK HZ