o
    GEDij                     @   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rd 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w 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]ze%sdd3l^mVZVmWZWmMZMmOZO eVZ_eWZ`eMZaeOZbW dS W dS  e?y   Y dS w )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   b/var/www/www-root/data/www/ovozai.pdev.uz/venv/lib/python3.10/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                	   @   sL   e Zd Z			ddedededdfdd	Zd
ee dedef fddZ	dS )r,        max_line_sizemax_headersmax_field_sizereturnNc                 C   s   || _ || _|| _d S N)r]   r^   r_   )selfr]   r^   r_   rI   rI   rJ   __init__   s   
zHeadersParser.__init__linesr;   c                 C   s  t  }g }d}|d }t|}|rz
|dd\}}W n ty(   t|d w |d |d hddh@ r9t||d}t|rGt|t|| jkrbt	d
|d	d
t| jtt|t|}	|d7 }|| }|ou|d dv }
|
r|g}|
r|	t|7 }	|	| jkrt	d
|d	d
t| jt|	|| |d7 }||k r|| }|r|d dv }
nd}n|
s}d|}n|	| jkrt	d
|d	d
t| jt|	|d}|dd}|dd}d|v sd|v sd|v rt|||| |||f |st|t|fS )Nr      :r       	   s    	zrequest header name {}utf8xmlcharrefreplace)rg   rh   zrequest header field {}    utf-8surrogateescape
 )r   lensplit
ValueErrorr   lstripr7   searchr_   r    formatdecoderF   appendjoinstripaddr   tuple)rb   rd   r<   r=   	lines_idxline
line_countbnamebvalueheader_lengthcontinuation
bvalue_lstnamevaluerI   rI   rJ   parse_headers   s   










Oz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.dee d	ee	j
 d
ededededee dee dee dedeee  dedededdfddZejdee defddZdee fddZddejejejfd ed!ed"ed#ed$ed%edeeeeef  eef fd&d'Z dee ded(e!ee ee eef fd)d*Z"d+eddf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 )Nrk   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   rd   rI   rI   rJ   parse_message  s   zHttpParser.parse_messagec                 C   s   | j d ur| j   d | _ d S | jr| j| j | jrC| jd dkr)| jd tt | | jW  d    S 1 s>w   Y  d S )Nrf   z
rk   )r   feed_eofr   r   rx   r   	Exceptionr   rb   rI   rI   rJ   r     s   



 zHttpParser.feed_eofr2   rk   dataSEPEMPTYCONTENT_LENGTHMETH_CONNECTSEC_WEBSOCKET_KEY1c                    s  g }| j r| j | d}| _ t|}d}	| j}
|	|k r| jd u rK| jsK|||	}||	kr:| js:|t| }	q||	krA||	| }|dkrN|d}| j| |t| }	| jd |kr@z| 	| jW | j
  n| j
  w dtt f fdd}| }|jv rt|j| _td	| j}| jd usJ |d ur|dksjrՈjst| j| j|
| jd
}t||j|j| j| j| j| j| jd
}|js|| _nd||krtt sJ t| j| j|
| jd
}d| _t|jjd| j| jd| _n;tdddkr7|d u r7| j!r7t| j| j|
| jd
}t||j|j| jd| j| j| jd
}|js6|| _nt"}||f n||	d  | _ |}n{| jd u r\| jr\| jr[J nj|r|	|k r| jrjJ | jd usrJ z| j#||	d  |\}}W n1 t$y } z$| j%d ur| jj&'| %t(| n| jj&'| d}d}W Y d }~nd }~ww |rd}	t|}d | _qnn|	|k s|r|	|k r||	d  }n|}|| j|fS )Nrk   r   r3      rf   r`   c                     s6   j  } | d u rd S | d st t| S )Nz 	)r<   getrz   	isdecimalr   r   )
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   rq   r   r   r   findr   rstriprx   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   messagesdata_len	start_posr   posr~   r   r   r8   r   payload_parsereofexcrI   r   rJ   r   *  s  







  zHttpParser.feed_datar;   c              
      s0  | 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rQd}n|
d	krXd}n|
d
kr^d} tj}|rp| }|dv rp|} tj}|durd| krd}ntdtj v rt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)rq   getall).0hr<   rI   rJ   	<genexpr>  s   & 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   CONTENT_LOCATIONCONTENT_RANGECONTENT_TYPEETAGHOSTMAX_FORWARDSSERVERTRANSFER_ENCODING
USER_AGENTnextr   r   
CONNECTIONlowerCONTENT_ENCODING)rb   rd   r=   
close_connencodingr@   rA   
singletonsbad_hdrconnvencterI   r   rJ   r     sV   

zHttpParser.parse_headersvalc                 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   asyncio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-      s   
 	


'
 8
Cr-   c                   @   s&   e Zd ZdZdee def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   r`   c                 C   s^  |d  dd}z|jdd\}}}W n ty   t|d w t|| jkr4tdt| jtt|t	|s=t|t
	|}|d u rJt|tt|dt|d}|dkretj|d	d
}n%|dr|d\}	}
}|	d\}	}}tj|	||d	d}nt|d	d}| |\}}}}}}|d u r|tkrd	}nd}t||||||||||
S )Nr   rl   rm   rO   maxsplitStatus line is too longr   CONNECTT)	authorityencoded/#?)r9   query_stringfragmentr   )r   F)rw   rr   rs   r   rq   r]   r    rF   r5   matchr6   r"   r   groupr   build
startswith	partitionr   r#   r0   )rb   rd   r~   r8   r9   r:   r   	version_orB   	path_part_hash_separatorurl_fragment_question_mark_separatorqs_partr<   r=   r   r?   r@   rA   rI   rI   rJ   r   4  sh   



	
zHttpRequestParser.parse_messageN)rC   rD   rE   __doc__r   r   r0   r   rI   rI   rI   rJ   r.   ,  s    r.   c                       sp   e Zd ZdZe Z	ddedee de	de	de
ee
eef  eef f
 fdd	Zd
ee def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.
    Nr   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   s0  |d  dd}z
|jdd\}}W n ty   t|d w z
|jdd\}}W n ty4   d}Y nw t|| jkrItdt| jtt|t	|}|d u rVt|t
t|dt|d}t|d	kso| sst|t|}| |\}	}
}}}}|d u r|tk}t||| |	|
||||	S )
Nr   rl   rm   r   r    r   rO   r)   )rw   rr   rs   r   rq   r]   r    rF   r6   r   r"   r   r   r   r   r#   r1   rz   )rb   rd   r~   r:   statusrL   r   r   status_ir<   r=   r   r?   r@   rA   rI   rI   rJ   r     sV   


z HttpResponseParser.parse_messagera   )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                   @   s   e Zd Z									ddedee dedee dee d	ee d
ededededdfddZdddZ		dde
dede
deee
f fddZdS )r   NFTr   r   rA   r?   rK   r8   r   r   r   r   r`   c                 C   s   d| _ tj| _tj| _d| _d| _|	| _	|
| _
d| _|r'|r'| j	r't||}n|}|s7tj| _|  d| _n>|r>tj| _n7|d urVtj| _|| _ | j dkrU|  d| _n|ra|dkratj| _n|dv rutd tj| _|  d| _|| _d S )Nr   rk   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   real_payloadrI   rI   rJ   rc     sH   



zHttpPayloadParser.__init__c                 C   sF   | j tjkr| j  d S | j tjkrtd| j tjkr!t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_EXTc                 C   s  | j tjkrF| j}t|}||kr+|| | _| j|| | jdkr)| j  dS d
S d| _| j|d | | | j  d||d  fS | j tjkr| j	rX| j	| }d| _	|r| j
tjkr||}|dkr||d|}|dkr||d | }n|d | }| jr| }tt|st|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r*| j}t|}||kr|| | _| j|| d
S d| _| j|d | | ||d  }| jr!|dr!|d	d  }tj| _
| j  | j
tjkrN|d t| |krI|t|d  }tj| _
n|| _	d
S | j
tjkr|d t| }||krq| j  d|t|d  fS |svd
S ||d d	 kr|| _	d
S tj| _
| j
tjkr||}|dkr||t| d  }tj| _
n|| _	d
S |s[d
S | j tj kr| j|t| d
S )Nr   )Trk   Trk   asciirm      r   r   )Frk   )!r  rN   rQ   r  rq   r   r   r   rR   r  r  rT   rV   r   r  rz   re	fullmatchHEXDIGITr!   rw   r   r   r   rY   r   rW   r  begin_http_chunk_receivingrX   end_http_chunk_receivingrZ   rS   )rb   r  r   r  required	chunk_lenr   isize_br   sizeheadrI   rI   rJ   r     s   


p










czHttpPayloadParser.feed_data)	NFNNNFTTFr`   N)r2   r  )rC   rD   rE   r&   r	   r   rH   rF   rc   r   r   r   r   r   rI   rI   rI   rJ   r     sX    	


:
r   c                   @   sz   e Zd ZU dZeed< dedee ddfddZ	d	e
ddfd
dZdededdfddZdddZdddZdddZdS )r  zDDeflateStream decompress stream and feed data into specified stream.decompressoroutr   r`   Nc                 C   sp   || _ d| _|| _d| _|dkr#tstdG dd d}| | _d S |dkr,dtj ntj}tj	|d	| _d S )
Nr   Fr   zECan not decode content-encoding: brotli (br). Please install `Brotli`c                   @   s6   e Zd Zd
ddZdedefddZdefdd	ZdS )z-DeflateBuffer.__init__.<locals>.BrotliDecoderr`   Nc                 S   s   t  | _d S ra   )brotliDecompressor_objr   rI   rI   rJ   rc        z6DeflateBuffer.__init__.<locals>.BrotliDecoder.__init__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flushrk   )r,  r)  r   r   r.  r   rI   rI   rJ   r.    s   z3DeflateBuffer.__init__.<locals>.BrotliDecoder.flushr$  )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   c                 C   s   | j | d S ra   )r&  r   )rb   r   rI   rI   rJ   r     s   zDeflateBuffer.set_exceptionr  r"  c                 C   s   |sd S |  j |7  _ | js$| jdkr$|d d@ dkr$tjtj d| _z| j|}W n ty:   t	d| j w d| _|rK| j
|t| d S d S )Nr   r      r*   r0  z#Can not decode content-encoding: %sT)r"  r2  r   r4  r6  r5  r%  r+  r   r   r&  r   rq   )rb   r  r"  rI   rI   rJ   r     s&   
zDeflateBuffer.feed_datac                 C   sR   | j  }|s| jdkr"| j|t| | jdkr"| j js"td| j	  d S )Nr   r   )
r%  r.  r"  r&  r   rq   r   r   r   r   )rb   r  rI   rI   rJ   r     s   
zDeflateBuffer.feed_eofc                 C      | j   d S ra   )r&  r  r   rI   rI   rJ   r    r*  z(DeflateBuffer.begin_http_chunk_receivingc                 C   r9  ra   )r&  r  r   rI   rI   rJ   r    r*  z&DeflateBuffer.end_http_chunk_receivingr$  )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sysr4  
contextlibr   enumr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   	multidictr   r   r   yarlr   r  r   base_protocolr   helpersr   r   r   http_exceptionsr   r   r   r   r   r    r!   http_writerr"   r#   logr$   streamsr%   r&   typedefsr'   r(   version_infor+   typing_extensionsr'  r3  ImportError__all__r   set	printabler4   rF   rG   compiler5   r6   r7   r   r  r0   
namedtupler1   rM   rN   rT   r,   ABCr-   r.   r/   r   r  HttpRequestParserPyHttpResponseParserPyRawRequestMessagePyRawResponseMessagePy_http_parserHttpRequestParserCHttpResponseParserCRawRequestMessageCRawResponseMessageCrI   rI   rI   rJ   <module>   s   
 <$	
		
g  BVK HZ
