o
    =jŽ!  ã                   @   s\  U d dl Z d dl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mZ ddlmZmZmZmZ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  ddl!m"Z"m#Z#m$Z$m%Z% d	gZ&e  'e (d
¡¡Z)e  'd¡Z*dee+ dee+ fdd„Z,dee+ deee+e+f  fdd„Z-e  'e (d
¡¡Z.dedee fdd„Z/e  'e (d
¡¡Z0dede
eedf fdd„Z1G dd„ dƒZ2e  'e (d
¡¡Z3G dd„ dƒZ4G dd„ dƒZ5deddfdd„Z6ee
e	e$ ee	e$ e	e$ f f e
edef ee7edef f f f Z8eefe/e efe1e efe1eefe6eefe6eefe6e efe6e efe6e efe6ee4e2e5d œi
Z9e8e:d	< dS )!é    N)	ÚAnyÚCallableÚDictÚIterableÚNoReturnÚOptionalÚTupleÚTypeÚUnioné   )Úchunk_headerÚheader_fieldÚrequest_lineÚstatus_line)ÚDataÚEndOfMessageÚInformationalResponseÚRequestÚResponse)ÚReceiveBuffer)ÚCLIENTÚCLOSEDÚDONEÚIDLEÚ
MUST_CLOSEÚ	SEND_BODYÚSEND_RESPONSEÚSERVER)ÚLocalProtocolErrorÚRemoteProtocolErrorÚSentinelÚvalidateÚREADERSÚasciis   [ \t]+ÚlinesÚreturnc                 c   sŽ   � t | ƒ}d }|D ]2}t |¡}|r2|d u rtdƒ‚t|tƒs#t|ƒ}|d7 }||| ¡ d … 7 }q	|d ur9|V  |}q	|d urE|V  d S d S )Nz%continuation line at start of headersó    )ÚiterÚobs_fold_reÚmatchr   Ú
isinstanceÚ	bytearrayÚend)r$   ÚitÚlastÚliner)   © r0   úVC:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\site-packages\h11/_readers.pyÚ_obsolete_line_fold+   s$   €


ÿr2   c                 c   s4   � t | ƒD ]}tt|d|ƒ}|d |d fV  qd S )Nzillegal header line: {!r}Ú
field_nameZfield_value)r2   r!   Úheader_field_re)r$   r/   Úmatchesr0   r0   r1   Ú_decode_header_lines@   s
   €þr6   Úbufc                 C   sj   |   ¡ }|d u r|  ¡ rtdƒ‚d S |stdƒ‚tt|d d|d ƒ}tdtt|dd … ƒƒddœ|¤ŽS )	Núillegal request linezno request line receivedr   zillegal request line: {!r}r   T)ÚheadersÚ_parsedr0   )Úmaybe_extract_linesÚ+is_next_line_obviously_invalid_request_liner   r!   Úrequest_line_rer   Úlistr6   )r7   r$   r5   r0   r0   r1   Úmaybe_read_from_IDLE_clientK   s   ÿÿÿr?   c                 C   s´   |   ¡ }|d u r|  ¡ rtdƒ‚d S |stdƒ‚tt|d d|d ƒ}|d d u r+dn|d }|d d u r7dn|d }t|d	 ƒ}|d
k rGtnt}|tt	|dd … ƒƒd|||d�S )Nr8   zno response line receivedr   zillegal status line: {!r}Úhttp_versions   1.1Úreasonó    Ústatus_codeéÈ   r   T)r9   r:   rC   rA   r@   )
r;   r<   r   r!   Ústatus_line_reÚintr   r   r>   r6   )r7   r$   r5   r@   rA   rC   Úclass_r0   r0   r1   Ú$maybe_read_from_SEND_RESPONSE_server^   s*   ÿÿûrH   c                   @   sH   e Zd Zdeddfdd„Zdedeeedf fdd„Z	de
fd	d
„ZdS )ÚContentLengthReaderÚlengthr%   Nc                 C   s   || _ || _d S ©N)Ú_lengthÚ
_remaining)ÚselfrJ   r0   r0   r1   Ú__init__{   s   
zContentLengthReader.__init__r7   c                 C   sD   | j dkrtƒ S | | j ¡}|d u rd S |  j t|ƒ8  _ t|d�S )Nr   ©Údata)rM   r   Úmaybe_extract_at_mostÚlenr   ©rN   r7   rQ   r0   r0   r1   Ú__call__   s   

zContentLengthReader.__call__c                 C   s   t d | j| j | j¡ƒ‚)Nz]peer closed connection without sending complete message body (received {} bytes, expected {}))r   ÚformatrL   rM   ©rN   r0   r0   r1   Úread_eofˆ   s   ÿþzContentLengthReader.read_eof)Ú__name__Ú
__module__Ú__qualname__rF   rO   r   r
   r   r   rU   r   rX   r0   r0   r0   r1   rI   z   s    	rI   c                   @   s@   e Zd Zd
dd„Zdedeeedf fdd„Zde	fdd	„Z
dS )ÚChunkedReaderr%   Nc                 C   s   d| _ d| _d| _d S )Nr   rB   F)Ú_bytes_in_chunkÚ_bytes_to_discardÚ_reading_trailerrW   r0   r0   r1   rO   •   s   
zChunkedReader.__init__r7   c                 C   sh  | j r| ¡ }|d u rd S ttt|ƒƒd�S | jrM| t| jƒ¡}|d u r'd S || jd t|ƒ… kr>td|›d| j›d�ƒ‚| jt|ƒd … | _| jrMd S | jdksTJ ‚| j	dkr‚| 
¡ }|d u rcd S tt|d|ƒ}t|d d	d
�| _	| j	dkrd| _ | |ƒS d}nd}| j	dks‹J ‚| | j	¡}|d u r—d S |  j	t|ƒ8  _	| j	dkr«d| _d}nd}t|||d�S )N)r9   zmalformed chunk footer: z (expected ú)rB   r   zillegal chunk header: {!r}Ú
chunk_sizeé   )ÚbaseTFs   
)rQ   Úchunk_startÚ	chunk_end)r_   r;   r   r>   r6   r^   rR   rS   r   r]   Zmaybe_extract_next_liner!   Úchunk_header_rerF   r   )rN   r7   r$   rQ   r   r5   rd   re   r0   r0   r1   rU   œ   sV   ÿ
ü

zChunkedReader.__call__c                 C   s   t dƒ‚)NzVpeer closed connection without sending complete message body (incomplete chunked read))r   rW   r0   r0   r1   rX   Î   s   ÿzChunkedReader.read_eof)r%   N)rY   rZ   r[   rO   r   r
   r   r   rU   r   rX   r0   r0   r0   r1   r\   ”   s    
2r\   c                   @   s0   e Zd Zdedee fdd„Zdefdd„ZdS )ÚHttp10Readerr7   r%   c                 C   s    |  d¡}|d u rd S t|d�S )NiÿÉš;rP   )rR   r   rT   r0   r0   r1   rU   Ö   s   

zHttp10Reader.__call__c                 C   s   t ƒ S rK   )r   rW   r0   r0   r1   rX   Ü   s   zHttp10Reader.read_eofN)	rY   rZ   r[   r   r   r   rU   r   rX   r0   r0   r0   r1   rg   Õ   s    rg   c                 C   s   | rt dƒ‚d S )NzGot data when expecting EOF)r   )r7   r0   r0   r1   Úexpect_nothingà   s   rh   .)Úchunkedzcontent-lengthzhttp/1.0);ÚreÚtypingr   r   r   r   r   r   r   r	   r
   Z_abnfr   r   r   r   Z_eventsr   r   r   r   r   Z_receivebufferr   Ú_stater   r   r   r   r   r   r   r   Z_utilr   r   r    r!   Ú__all__ÚcompileÚencoder4   r(   Úbytesr2   r6   r=   r?   rE   rH   rI   rf   r\   rg   rh   ÚstrZReadersTyper"   Ú__annotations__r0   r0   r0   r1   Ú<module>   sb   
,(

ÿ
þÿ
þA"ÿÿýö