o
    #`^hՋ                     @   s   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$ ddl%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z:m;Z; ddl<m=Z= dZ>ed Z?e@ejAZBeeeC  eDd< eEdZFeeC eDd< eGdeF dZHeeeC  eDd< eGdejIZJeeeC  eDd< eGdejIZKeeeC  eDd< eGdZLeeeM  eDd< G dd deZNG d d! d!eZOed"eNeOZPG d#d$ d$eZQG d%d& d&eZRG d'd( d(ZSd)eeC d*eTfd+d,ZUG d-d. d.e jVeeP ZWG d/d0 d0eWeN ZXG d1d2 d2eWeO ZYG d3d4 d4ZZG d5d6 d6Z[eXZ\eYZ]eNZ^eOZ_ze(sdd7l`mXZXmYZYmNZNmOZO eXZaeYZbeNZceOZdW dS W dS  ee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)
HAS_BROTLIBrotliDecompressorZLibDecompressor)_EXC_SENTINELDEBUGNO_EXTENSIONSBaseTimerContextmethod_must_be_empty_bodyset_exceptionstatus_code_must_be_empty_body)BadHttpMessageBadStatusLineContentEncodingErrorContentLengthError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 )r4   methodpathversionCIMultiDictProxy[str]headersraw_headersshould_closecompressionupgradechunkedurlN)
__name__
__module____qualname__str__annotations__r+   r/   boolr   r    rO   rO   Q/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/aiohttp/http_parser.pyr4   P   s   
 r4   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 )r5   r@   codereasonrB   rC   rD   rE   rF   rG   N)rI   rJ   rK   r+   rM   intrL   r   r/   rN   r   rO   rO   rO   rP   r5   ]   s   
 r5   _MsgTc                   @   s   e Zd ZdZdZdZdZdS )
ParseStater   r         N)rI   rJ   rK   
PARSE_NONEPARSE_LENGTHPARSE_CHUNKEDPARSE_UNTIL_EOFrO   rO   rO   rP   rU   l   s
    rU   c                   @   s    e Zd ZdZdZdZdZdZdS )
ChunkStater   r   rV   rW      N)rI   rJ   rK   PARSE_CHUNKED_SIZEPARSE_CHUNKED_CHUNKPARSE_CHUNKED_CHUNK_EOFPARSE_MAYBE_TRAILERSPARSE_TRAILERSrO   rO   rO   rP   r\   t   s    r\   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 )r0        Fmax_line_sizemax_headersmax_field_sizelaxreturnNc                 C   s   || _ || _|| _|| _d S N)re   rf   rg   _lax)selfre   rf   rg   rh   rO   rO   rP   __init__}   s   
zHeadersParser.__init__linesrA   c                 C   s<  t  }g }d}|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)rq   rr   zrequest header field {}    
 )r   lensplit
ValueErrorr'   lstriprg   r)   formatdecoderL   r:   	fullmatchrk   appendjoinstripaddr   tuple)rl   rn   rB   rC   	lines_idxline
line_countbnamebvaluenameheader_lengthcontinuation
bvalue_lstvaluerO   rO   rP   parse_headers   s   










QzHeadersParser.parse_headers)rc   rd   rc   F)rI   rJ   rK   rS   rN   rm   r   bytesr   r/   r   rO   rO   rO   rP   r0   |   s*    

r0   rB   ri   c                 C   s   |  tjd dv S )z)Check if the upgrade header is supported. >   tcp	websocket)getr   UPGRADElowerrB   rO   rO   rP   _is_supported_upgrade   s   r   c                   @   sV  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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 ).r1   Frh   N   rc   rd   Tprotocollooplimitre   rf   rg   timerrQ   r>   payload_exceptionresponse_with_bodyread_until_eofauto_decompressri   c                 C   s   || _ || _|| _|| _|| _|| _|| _|	| _|
| _|| _	|| _
g | _d| _d| _d | _d | _|| _|| _t|||| j| _d S )Nrw   F)r   r   re   rf   rg   r   rQ   r>   r   r   r   _lines_tail	_upgraded_payload_payload_parser_auto_decompress_limitr0   rh   _headers_parser)rl   r   r   r   re   rf   rg   r   rQ   r>   r   r   r   r   rO   rO   rP   rm      s*   

zHttpParser.__init__rn   c                 C   s   d S rj   rO   )rl   rn   rO   rO   rP   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 )Nrp   z
rw   )r   feed_eofr   r   r   r   	Exceptionr   rl   rO   rO   rP   r     s   



 zHttpParser.feed_eofr6   rw   dataSEPEMPTYCONTENT_LENGTHMETH_CONNECTSEC_WEBSOCKET_KEY1c                    s  g }| j r| j | d}| _ t|}d}	| j}
|	|k r| jd u r[| js[|||	}||	kr:| js:|t| }	q||	krQ||	| }|dkrN|d}| j| |t| }	| jd |krPz| 	| 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|pt|ot|}|s|d ur|dksĈjr| jst| j| j|
| jd}t||j|j| j| j| j| j d	}|j!s|| _n]||krt"t#sJ t| j| j|
| jd}d| _t|jj| j| j d| _n4|sG|d u rG| j$rGt| j| j|
| jd}t||j|j| j| j| j| j d	}|j!sF|| _nt%}||f n~||	d  | _ |}nx| jd u rl| jrl| jrkJ ng|r|	|k r| jrzJ | jd usJ z| j&||	d  |\}}W n. t'y } z!|}| j(d ur| (t)|}t*| 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 )Nrw   r   r7      rp   ri   c                     s2   j  } | d u rd S t| st t| S rj   )rB   r   r<   r   r'   rS   )
length_hdrr   msgrO   rP   get_content_lengthX  s   
z0HttpParser.feed_data.<locals>.get_content_lengthr>   rQ   )r   r   r   )lengthrG   r>   rE   rQ   r   r   rh   T)r>   rE   r   rh   ),r   r{   r   r   r   findr   rstripr   r   clearr   rS   rB   r'   rF   r   getattrr>   r   r"   rN   r    rG   r.   r   r   HttpPayloadParserrE   rQ   r   r   rh   done
isinstancer4   r   r-   	feed_dataBaseExceptionr   rL   r!   payload)rl   r   r   r   r   r   r   messagesdata_len	start_posr   posr   r   r   r>   rQ   
empty_bodyr   payload_parsereofunderlying_excreraised_excrO   r   rP   r   +  s  








   zHttpParser.feed_datarA   c              
      s<  | 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}|rv| }|dv rv|} 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 )rO   r   N)r{   getall).0hr   rO   rP   	<genexpr>  s   & z+HttpParser.parse_headers.<locals>.<genexpr>zDuplicate 'z' header found.closeTz
keep-aliverF   )gzipdeflatebrrG   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   
CONNECTIONr   r   CONTENT_ENCODING)rl   rn   rC   
close_connencodingrF   rG   
singletonsbad_hdrconnvencterO   r   rP   r     sV   

zHttpParser.parse_headersvalc                 C   s
   || _ dS )zZSet connection upgraded (to websocket) mode.

        :param bool val: new state.
        N)r   )rl   r   rO   rO   rP   set_upgraded(  s   
zHttpParser.set_upgraded)NNr   rc   rd   rc   NNNNTFT)$rI   rJ   rK   rh   r   rN   rM   r   r   asyncioAbstractEventLooprS   r   rL   r   r   rm   abcabstractmethodr   r   rT   r   r   r   r   r   r   _SEPr   r   r.   r   r/   r   r   rO   rO   rO   rP   r1      s   
 	


'
 :
Dr1   c                   @   s&   e Zd ZdZdee defddZdS )r2   zRead request status line.

    Exception .http_exceptions.BadStatusLine
    could be raised in case of any errors in status line.
    Returns RawRequestMessage.
    rn   ri   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 u r|tkrd
}nd}t||||||||||
S )Nr   ru   rv    rV   maxsplitStatus line is too longr   CONNECTT)	authorityencoded/#?)r?   query_stringfragmentr   *OPTIONS)r   r   )errorslatin1F)r   r|   r}   r$   r{   re   r)   rL   r:   r   r;   r+   rS   groupr   build
startswith	partitionschemer(   encoder   r,   r4   )rl   rn   r   r>   r?   r@   match	version_orH   	path_part_hash_separatorurl_fragment_question_mark_separatorqs_partrB   rC   r   rE   rF   rG   rO   rO   rP   r   8  st   




zHttpRequestParser.parse_messageN)rI   rJ   rK   __doc__r   r   r4   r   rO   rO   rO   rP   r2   0  s    r2   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 )r3   zRead response status line and headers.

    BadStatusLine could be raised in case of any errors in status line.
    Returns RawResponseMessage.
    Nr   r   argskwargsri   c                    s0   |d u r
t rdnd}t j||g|R i |S )Nr6   r7   )r   superr   )rl   r   r   r  r  	__class__rO   rP   r     s   zHttpResponseParser.feed_datarn   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 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   ru   rv   r   r   r   r   rV   rW   Td      >   0     F)r   r|   r}   r$   r   r{   re   r)   rL   r;   r   r+   rS   r  r<   r   r,   r   r   r   r5   )rl   rn   r   r@   statusrR   r  r	  status_irB   rC   r   rE   rF   rG   rO   rO   rP   r     sd   


z HttpResponseParser.parse_messagerj   )rI   rJ   rK   r  r   rh   r   r   r   r   r   r   r5   r.   rN   r   r   __classcell__rO   rO   r  rP   r3     s     r3   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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   rG   rE   rQ   r>   r   r   rh   ri   c
                 C   s   d| _ tj| _tj| _d| _d| _|| _	|	| _
d| _|r'|r'| j	r't||}
n|}
|s7tj| _|
  d| _n|r>tj| _n|d urUtj| _|| _ | j dkrU|
  d| _|
| _d S )Nr   rw   FT)_lengthrU   r[   _typer\   r^   _chunk_chunk_size_chunk_tailr   rk   r   DeflateBufferrX   r   rZ   rY   r   )rl   r   r   rG   rE   rQ   r>   r   r   rh   real_payloadrO   rO   rP   rm     s4   


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  rU   r[   r   r   rY   r&   rZ   r*   r   rO   rO   rP   r     s   zHttpPayloadParser.feed_eofr6      ;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}	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r| j}t|}||kr|| | _| j|| d
S d| _| j|d | | ||d  }tj| _
| j  | j
tjkrN| jr1|dr1|d	d  }|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   )Trw   Trw   asciirv      r   r   )Frw   )!r  rU   rY   r  r{   r   r   r   rZ   r   r  r\   r^   r   rk   r   rer   r=   r*   r   r!   rS   r   ra   r  r_   r  begin_http_chunk_receivingr`   end_http_chunk_receivingrb   r[   )rl   r$  r   r%  required	chunk_lenr   isize_bexcsizeheadrO   rO   rP   r     s   


p










czHttpPayloadParser.feed_data)NFNNNTTFri   N)r6   r#  )rI   rJ   rK   r.   r   rS   rN   rL   rm   r   r   r   r   r   rO   rO   rO   rP   r     sR    	


.
r   c                   @   s   e Zd ZU dZeed< dede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 )r!  zDDeflateStream decompress stream and feed data into specified stream.decompressoroutr   ri   Nc                 C   sL   || _ d| _|| _d| _|  |dkrtstdt | _d S t|d| _d S )Nr   Fr   zECan not decode content-encoding: brotli (br). Please install `Brotli`)r   )	r4  r0  r   _started_decodingr   r%   r   r3  r   )rl   r4  r   rO   rO   rP   rm     s   zDeflateBuffer.__init__r/  	exc_causec                 C   s   t | j|| d S rj   )r!   r4  )rl   r/  r6  rO   rO   rP   r!     s   zDeflateBuffer.set_exceptionr$  r0  c                 C   s   |sd S |  j |7  _ | js#| jdkr#|d d@ dkr#t| jdd| _z| j|}W n ty9   td| j w d| _|rJ| j	|t
| d S d S )Nr   r         T)r   suppress_deflate_headerz#Can not decode content-encoding: %s)r0  r5  r   r   r3  decompress_syncr   r%   r4  r   r{   )rl   r$  r0  rO   rO   rP   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   )
r3  flushr0  r4  r   r{   r   r   r%   r   )rl   r$  rO   rO   rP   r     s   
zDeflateBuffer.feed_eofc                 C      | j   d S rj   )r4  r)  r   rO   rO   rP   r)       z(DeflateBuffer.begin_http_chunk_receivingc                 C   r<  rj   )r4  r*  r   rO   rO   rP   r*    r=  z&DeflateBuffer.end_http_chunk_receivingr2  )rI   rJ   rK   r  r   rM   r.   r   rL   rm   r   r   r!   r   rS   r   r   r)  r*  rO   rO   rO   rP   r!    s    
 

 

r!  )r2   r3   r4   r5   )fr   r   r(  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   helpersr   r   r   r   r    r!   r"   http_exceptionsr#   r$   r%   r&   r'   r(   r)   r*   http_writerr+   r,   streamsr-   r.   typedefsr/   __all__r   set	printabler8   rL   rM   escaper9   compiler:   ASCIIr;   r<   r=   r   r4   r5   rT   rU   r\   r0   rN   r   ABCr1   r2   r3   r   r!  HttpRequestParserPyHttpResponseParserPyRawRequestMessagePyRawResponseMessagePy_http_parserHttpRequestParserCHttpResponseParserCRawRequestMessageCRawResponseMessageCImportErrorrO   rO   rO   rP   <module>   sn   
 @$(	
		"l  E^U <N
