o
    ii!                     @   s4  U 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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$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l0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: ddl;m<Z<m=Z= ddl>m?Z?m@Z@ ddlAmBZB dZCed ZDeEejFZGeeeH  eId< eJdZKeeH eId< eLdeK dZMeeeH  eId< eLdejNZOeeeH  eId< eLdejNZPeeeH  eId< eLdZQeeeR  eId< G dd deZSG d d! d!eZTed"eSeTZUG d#d$ d$eZVG d%d& d&eZWG d'd( d(ZXd)eeH d*eYfd+d,ZZG d-d. d.e j[eeU Z\G d/d0 d0e\eS Z]G d1d2 d2e\eT Z^G d3d4 d4Z_G d5d6 d6Z`e]Zae^ZbeSZceTZdze-sdd7lem]Z]m^Z^mSZSmTZT e]Zfe^ZgeSZheTZiW dS W dS  ejy   Y dS w )8    N)suppress)IntEnum)AnyClassVarFinalGenericListLiteral
NamedTupleOptionalPatternSetTupleTypeTypeVarUnion)CIMultiDictCIMultiDictProxyistr)URL   )hdrs)BaseProtocol)DEFAULT_MAX_DECOMPRESS_SIZE
HAS_BROTLIHAS_ZSTDBrotliDecompressorZLibDecompressorZSTDDecompressor)_EXC_SENTINELDEBUGEMPTY_BODY_METHODSEMPTY_BODY_STATUS_CODESNO_EXTENSIONSBaseTimerContextset_exception)
BadHttpMessageBadHttpMethodBadStatusLineContentEncodingErrorContentLengthErrorDecompressSizeErrorInvalidHeaderInvalidURLErrorLineTooLongTransferEncodingError)HttpVersionHttpVersion10)EMPTY_PAYLOADStreamReader)
RawHeaders)HeadersParser
HttpParserHttpRequestParserHttpResponseParserRawRequestMessageRawResponseMessage)   
   
ASCIISETz!#$%&'*+-.^_`|~_TCHAR_SPECIALSz
[0-9A-Za-zz]+TOKENREzHTTP/(\d)\.(\d)VERSREz\d+DIGITSs   [0-9a-fA-F]+	HEXDIGITSc                   @   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 )r9   methodpathversionCIMultiDictProxy[str]headersraw_headersshould_closecompressionupgradechunkedurlN)
__name__
__module____qualname__str__annotations__r0   r4   boolr   r    rT   rT   [/var/www/scraper.webshop2u.hu/html/venv/lib/python3.10/site-packages/aiohttp/http_parser.pyr9   Y   s   
 r9   c                   @   s^   e Zd ZU eed< eed< eed< ee ed< eed< e	ed< e
e ed< e	ed< e	ed	< d
S )r:   rE   codereasonrG   rH   rI   rJ   rK   rL   N)rN   rO   rP   r0   rR   intrQ   r   r4   rS   r   rT   rT   rT   rU   r:   f   s   
 r:   _MsgTc                   @   s   e Zd ZdZdZdZdZdS )
ParseStater   r         N)rN   rO   rP   
PARSE_NONEPARSE_LENGTHPARSE_CHUNKEDPARSE_UNTIL_EOFrT   rT   rT   rU   rZ   u   s
    rZ   c                   @   s    e Zd ZdZdZdZdZdZdS )
ChunkStater   r   r[   r\      N)rN   rO   rP   PARSE_CHUNKED_SIZEPARSE_CHUNKED_CHUNKPARSE_CHUNKED_CHUNK_EOFPARSE_MAYBE_TRAILERSPARSE_TRAILERSrT   rT   rT   rU   ra   }   s    ra   c                   @   sR   e Zd Z				dde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 )r5        Fmax_line_sizemax_headersmax_field_sizelaxreturnNc                 C   s   || _ || _|| _|| _d S N)rj   rk   rl   _lax)selfrj   rk   rl   rm   rT   rT   rU   __init__   s   
zHeadersParser.__init__linesrF   c                 C   s<  t  }g }d}|| }t|}|rz
|dd\}}W n ty(   t|d w t|dkr3t||d |d hddh@ rCt||d}t|| jkrctd|	d	d
t
| jt
t||	dd}	t|	srt|t|}
|d7 }|| }| jo|o|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|sd|}n|
| jkrtd|	d	d
t
| jt
|
|d}|	dd}d|v sd|v sd|v rt|||	| |||f |st|t|fS )Nr      :r       	   s    	zrequest header name {}utf8backslashreplaceutf-8surrogateescape)rv   rw   zrequest header field {}    
 )r   lensplit
ValueErrorr,   lstriprl   r.   formatdecoderQ   r?   	fullmatchrp   appendjoinstripaddr   tuple)rq   rs   rG   rH   	lines_idxline
line_countbnamebvaluenameheader_lengthcontinuation
bvalue_lstvaluerT   rT   rU   parse_headers   s   










QzHeadersParser.parse_headers)rh   ri   rh   F)rN   rO   rP   rX   rS   rr   r   bytesr   r4   r   rT   rT   rT   rU   r5      s*    

r5   rG   rn   c                 C   s"   |  tjd}| o| dv S )z)Check if the upgrade header is supported. >   tcp	websocket)getr   UPGRADEisasciilower)rG   urT   rT   rU   _is_supported_upgrade   s   r   c                   @   sn  e Zd ZU dZee ed< 													d0d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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ejd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 )1r6   Frm   N   rh   ri   Tprotocollooplimitrj   rk   rl   timerrV   rC   payload_exceptionresponse_with_bodyread_until_eofauto_decompressrn   c                 C   s   || _ || _|| _|| _|| _|| _|| _|	| _|
| _|| _	|| _
g | _d| _d| _d | _d | _|| _|| _t|||| j| _d S )Nr|   F)r   r   rj   rk   rl   r   rV   rC   r   r   r   _lines_tail	_upgraded_payload_payload_parser_auto_decompress_limitr5   rm   _headers_parser)rq   r   r   r   rj   rk   rl   r   rV   rC   r   r   r   r   rT   rT   rU   rr      s*   

zHttpParser.__init__rs   c                 C      d S ro   rT   )rq   rs   rT   rT   rU   parse_message"     zHttpParser.parse_messagetec                 C   r   ro   rT   rq   r   rT   rT   rU   _is_chunked_te%  r   zHttpParser._is_chunked_tec                 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 )Nru   z
r|   )r   feed_eofr   r   r   r   	Exceptionr   rq   rT   rT   rU   r   (  s   



 zHttpParser.feed_eofr;   r|   dataSEPEMPTYCONTENT_LENGTHMETH_CONNECTSEC_WEBSOCKET_KEY1c                    s
  g }| j r| j | d}| _ t|}d}	| j}
d}|	|k r| jd u rm| jsm|||	}||	kr<| js<|t| }	q||	krc|rGtd||	| }|dkrV|d}| j	| |t| }	| jd |krbz| 
| jW | j  n| j  w dtt f fd	d
}| }|jv rt|jotj| _td| j}tdd}| jd usJ |tv pt|o|tv }|s|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|| _nb||kr"t$t%sJ t| j| j|
| jd}d| _t|jj| j | j!| j"d| _n6|sV|d u rV| j&rVt| j| j|
| jd}t||j|j| j| j| j | j!| j"d
}|j#sU|| _nt'}|	|f j(}n||	d  | _ |}n| jd u r~| jr~| jr}J np|r|	|k r| jrJ | jd usJ z| j)||	d  |\}}W n7 t*y } z*|}| j+d ur| +t,|}t-| jj.|| d}d}t$|tt/frЂ W Y d }~nd }~ww |rd}	t|}d | _qnn|	|k s|r|	|k r||	d  }n|}|| j|fS )Nr|   r   FzData after `Connection: close`r<      ru   rn   c                     s2   j  } | d u rd S t| st t| S ro   )rG   r   rA   r   r,   rX   )
length_hdrr   msgrT   rU   get_content_lengthi  s   
z0HttpParser.feed_data.<locals>.get_content_lengthrC   rV   )r   r   r   )	lengthrL   rC   rJ   rV   r   r   rm   headers_parserT)rC   rJ   r   rm   r   )0r   r   r   r   r   findr   r&   rstripr   r   clearr   rX   rG   r,   rK   r   getattrrC   r   r"   rS   r!   rL   r3   r   r   HttpPayloadParserrJ   rV   r   r   rm   r   done
isinstancer9   r   r2   rI   	feed_dataBaseExceptionr   rQ   r%   payloadr/   )rq   r   r   r   r   r   r   messagesdata_len	start_posr   rI   posr   r   r   rC   rV   
empty_bodyr   payload_parsereofunderlying_excreraised_excrT   r   rU   r   8  s*  








  +zHttpParser.feed_datarF   c              
      s2  | 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}	|	rd|	 }
|
dkrQd}n|
d	krXd}n|
d
krd tjrdd} tjd}| rw| dv rw|} tj}|dur| |rd}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 )rT   r   N)r   getall).0hrG   rT   rU   	<genexpr>  s   & z+HttpParser.parse_headers.<locals>.<genexpr>zDuplicate 'z' header found.closeTz
keep-aliverK   r   >   brgzipzstddeflatez6Transfer-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   
CONNECTIONr   r   CONTENT_ENCODINGr   r   )rq   rs   rH   
close_connencodingrK   rL   
singletonsbad_hdrconnvencr   rT   r   rU   r     sP   


zHttpParser.parse_headersvalc                 C   s
   || _ dS )zZSet connection upgraded (to websocket) mode.

        :param bool val: new state.
        N)r   )rq   r   rT   rT   rU   set_upgraded=  s   
zHttpParser.set_upgraded)NNr   rh   ri   rh   NNNNTFT)%rN   rO   rP   rm   r   rS   rR   r   r   asyncioAbstractEventLooprX   r$   rQ   r   r   rr   abcabstractmethodr   r   rY   r   r   r   r   r   r   r   _SEPr   r   r3   r   r4   r   r   rT   rT   rT   rU   r6      s   
 	


'
 F
@r6   c                   @   s8   e Zd ZdZdee defddZdede	fddZ
d	S )
r7   zRead request status line.

    Exception .http_exceptions.BadStatusLine
    could be raised in case of any errors in status line.
    Returns RawRequestMessage.
    rs   rn   c                 C   s  |d  dd}z|jddd\}}}W n ty    t|d w t|| jkr5tdt| jtt|t	|s>t|t
	|}|d u rKt|tt|dt|d}|d	krftj|d
d}nD|dr|d\}	}
}|	d\}	}}tj|	||d
d}n%|dkr|dkrt|d
d}nt|d
d}|jdkrt|jdd d| |dd  \}}}}}}|d u r|tkrd
}nd}t||||||||||
S )Nr   rz   r{    r[   maxsplitStatus line is too longr   CONNECTT)	authorityencoded/#?)rD   query_stringfragmentr  *OPTIONS)r  r   )errorslatin1F)r   r   r   r'   r   rj   r.   rQ   r?   r   r@   r(   r0   rX   groupr   build
startswith	partitionschemer-   encoder   r1   r9   )rq   rs   r   rC   rD   rE   match	version_orM   	path_part_hash_separatorurl_fragment_question_mark_separatorqs_partrG   rH   r   rJ   rK   rL   rT   rT   rU   r   M  st   




zHttpRequestParser.parse_messager   c                 C   s8   |j dddd d}| r| dkrdS td)	N,r   r   ru    	rL   Tz'Request has invalid `Transfer-Encoding`)rsplitr   r   r   r&   r   rT   rT   rU   r     s   z HttpRequestParser._is_chunked_teN)rN   rO   rP   __doc__r   r   r9   r   rQ   rS   r   rT   rT   rT   rU   r7   E  s    Ur7   c                       s   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dedefddZ  ZS )r8   zRead response status line and headers.

    BadStatusLine could be raised in case of any errors in status line.
    Returns RawResponseMessage.
    Nr   r   argskwargsrn   c                    s0   |d u r
t rdnd}t j||g|R i |S )Nr;   r<   )r    superr   )rq   r   r   r   r!  	__class__rT   rU   r     s   zHttpResponseParser.feed_datars   c              
   C   s  |d  dd}z
|jdd\}}W n ty   t|d w z
|jdd\}}W n ty8   | }d}Y nw t|| jkrMtdt| jtt|t	
|}|d u rZt|tt|dt|d}t|d	kstt
|sxt|t|}| |dd  \}	}
}}}}|d u r|tkrd
}n!d|  krdk sn |dv rd}ntj|	v stj|	v rd}nd
}t||| |	|
||||	S )Nr   rz   r{   r   r   r   r  r[   r\   Td      >   0     F)r   r   r   r(   r   r   rj   r.   rQ   r@   r   r0   rX   r  rA   r   r1   r   r   r   r:   )rq   rs   r   rE   statusrW   r  r  status_irG   rH   r   rJ   rK   rL   rT   rT   rU   r     sd   


z HttpResponseParser.parse_messager   c                 C   s    |j dddd d dkS )Nr  r   r   ru   r  rL   )r  r   r   r   rT   rT   rU   r     s    z!HttpResponseParser._is_chunked_tero   )rN   rO   rP   r  r    rm   r   r   r   r   r   r   r:   r3   rS   r   r   rQ   r   __classcell__rT   rT   r#  rU   r8     s"    ?r8   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   rL   rJ   rV   rC   r   r   rm   r   rn   c
                C   s   d| _ tj| _tj| _d| _d| _|| _	|	| _
|
| _g | _d| _|r-|r-| j	r-t||}n|}|s=tj| _|  d| _n|rDtj| _n|d ur[tj| _|| _ | j dkr[|  d| _|| _d S )Nr   r|   FT)_lengthrZ   r`   _typera   rc   _chunk_chunk_size_chunk_tailr   rp   r   _trailer_linesr   DeflateBufferr]   r   r_   r^   r   )rq   r   r   rL   rJ   rV   rC   r   r   rm   r   real_payloadrT   rT   rU   rr     s8   


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 )Nz1Not enough data to satisfy content length header.z2Not enough data to satisfy transfer length header.)	r-  rZ   r`   r   r   r^   r*   r_   r/   r   rT   rT   rU   r   7  s   zHttpPayloadParser.feed_eofr;      ;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 | }d|||  }	v rtd|	}
t| j|
 |
n|d | }| jr| }tt|st|d | dd}
t| 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r4| j}t|}||kr|| | _| j|| dS d| _| j|d | | ||d  }tj| _
| j  | j
tjkrh| jrK|d
rK|dd  }|d t| |krc|t|d  }tj| _
n|| _	dS | j
tjkr||}|dk r~|| _	dS |d | }||t| d  }|dkr|d
}| j !| | j d dkrz| j"#| j \}}W | j $  n| j $  w | j  d|fS |s[dS | j tj%kr| j|t| dS )Nr   )Tr|   Tr|   r<   z"Unexpected LF in chunk-extension: asciir{      r   r   )Fr|   ru   )&r-  rZ   r^   r,  r   r   r   r   r_   r0  r.  ra   rc   r   r/   r%   rp   r   rer   rB   r   rX   r   rg   r  rd   r/  begin_http_chunk_receivingre   end_http_chunk_receivingr   r1  r   r   r   r   r`   )rq   r5  r   r6  required	chunk_lenr   isize_bextexcsizer   trailersraw_trailersrT   rT   rU   r   C  s   


p












czHttpPayloadParser.feed_data)NFNNNTTFrn   N)r;   r4  )rN   rO   rP   r3   r   rX   rS   rQ   r5   rr   r   r   r   r   r   rT   rT   rT   rU   r     sV    	


2
r   c                	   @   s   e Zd ZU dZeed< efdedee	 de
ddfdd	Zefd
e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 )r2  zDDeflateStream decompress stream and feed data into specified stream.decompressoroutr   max_decompress_sizern   Nc                 C   sv   || _ d| _| j|_|| _d| _|  |dkr!tstdt | _n|dkr0t	s+tdt
 | _nt|d| _|| _d S )Nr   Fr   zECan not decode content-encoding: brotli (br). Please install `Brotli`r   zRCan not decode content-encoding: zstandard (zstd). Please install `backports.zstd`)r   )rG  rB  total_compressed_bytesr   _started_decodingr   r)   r   rF  r   r   r   _max_decompress_size)rq   rG  r   rH  rT   rT   rU   rr     s(   


zDeflateBuffer.__init__rA  	exc_causec                 C   s   t | j|| d S ro   )r%   rG  )rq   rA  rL  rT   rT   rU   r%     s   zDeflateBuffer.set_exceptionr5  rB  c                 C   s   |sd S |  j |7  _ | j | j_| js(| jdkr(|d d@ dkr(t| jdd| _z| jj|| jd d}W n t	yC   t
d	| j w d| _t|| jkrUtd
| j |rb| j|t| d S d S )Nr   r         T)r   suppress_deflate_headerr   )
max_lengthz#Can not decode content-encoding: %sz:Decompressed data exceeds the configured limit of %d bytes)rB  rG  rI  rJ  r   r   rF  decompress_syncrK  r   r)   r   r+   r   )rq   r5  rB  rT   rT   rU   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   )
rF  flushrB  rG  r   r   r   r   r)   r   )rq   r5  rT   rT   rU   r     s   
zDeflateBuffer.feed_eofc                 C      | j   d S ro   )rG  r:  r   rT   rT   rU   r:  $     z(DeflateBuffer.begin_http_chunk_receivingc                 C   rS  ro   )rG  r;  r   rT   rT   rU   r;  '  rT  z&DeflateBuffer.end_http_chunk_receivingrE  )rN   rO   rP   r  r   rR   r   r3   r   rQ   rX   rr   r   r   r%   r   r   r   r:  r;  rT   rT   rT   rU   r2    s2   
 
#

+

r2  )r7   r8   r9   r:   )kr   r   r9  string
contextlibr   enumr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   	multidictr   r   r   yarlr   r   r   base_protocolr   compression_utilsr   r   r   r   r   r   helpersr   r    r!   r"   r#   r$   r%   http_exceptionsr&   r'   r(   r)   r*   r+   r,   r-   r.   r/   http_writerr0   r1   streamsr2   r3   typedefsr4   __all__r   set	printabler=   rQ   rR   escaper>   compiler?   ASCIIr@   rA   rB   r   r9   r:   rY   rZ   ra   r5   rS   r   ABCr6   r7   r8   r   r2  HttpRequestParserPyHttpResponseParserPyRawRequestMessagePyRawResponseMessagePy_http_parserHttpRequestParserCHttpResponseParserCRawRequestMessageCRawResponseMessageCImportErrorrT   rT   rT   rU   <module>   sn   
 @ $0			"l  OfY @h
