o
    .'h@  ã                   @   sÊ  d dl mZmZmZmZ d dl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 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!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- ddl.m/Z/ eefeddddgd�dfe"e!feddgdd�dfe"e!fedg dd�dfe"e!feddgdd�dfe"e!fedg dd�dfgZ0ded ded e1fd!d"„Z2deded#ed dfd$d%„Z3d&e1d efd'd(„Z4d)ed&e1d#ed dfd*d+„Z5dYd,d-„Z6dYd.d/„Z7dYd0d1„Z8dYd2d3„Z9dYd4d5„Z:d)ed6e1d7e;d eeddf fd8d9„Z<d:ed ee
 fd;d<„Z=dZd>ed&e1d#ed7e;d df
d?d@„Z>dYdAdB„Z?dYdCdD„Z@dYdEdF„ZAdYdGdH„ZBdYdIdJ„ZCdYdKdL„ZDdYdMdN„ZEdYdOdP„ZFdYdQdR„ZGdYdSdT„ZHdYdUdV„ZIdYdWdX„ZJdS )[é    )ÚAnyÚCallableÚ	GeneratorÚListNé   )ÚConnectionClosedÚDataÚEndOfMessageÚEventÚInformationalResponseÚRequestÚResponse)ÚHeadersÚnormalize_and_validate)Ú_obsolete_line_foldÚChunkedReaderÚContentLengthReaderÚHttp10ReaderÚREADERS©ÚReceiveBuffer)
ÚCLIENTÚCLOSEDÚDONEÚIDLEÚMIGHT_SWITCH_PROTOCOLÚ
MUST_CLOSEÚ	SEND_BODYÚSEND_RESPONSEÚSERVERÚSWITCHED_PROTOCOL)ÚLocalProtocolError)ÚChunkedWriterÚContentLengthWriterÚHttp10WriterÚwrite_any_responseÚwrite_headersÚwrite_requestÚWRITERSé   )Únormalize_data_eventsÚGETz/a©ÚHostÚfoo©Ú
ConnectionÚclose©ÚmethodÚtargetÚheaderss1   GET /a HTTP/1.1
Host: foo
Connection: close

éÈ   ó   OK)Ústatus_coder5   Úreasons&   HTTP/1.1 200 OK
Connection: close

s   HTTP/1.1 200 OK

ée   )ZUpgradeZ	websockets   Upgrades,   HTTP/1.1 101 Upgrade
Upgrade: websocket

s   HTTP/1.1 101 Upgrade

Úwriter).NÚobjÚreturnc                 C   s   g }| ||j ƒ d |¡S )Nó    )ÚappendÚjoin)r;   r<   Zgot_list© rA   úGC:\Users\shubh\Videos\agent\nova\Lib\site-packages\h11/tests/test_io.pyÚdowriteR   s   
rC   Úexpectedc                 C   s   t | |ƒ}||ksJ ‚d S ©N)rC   )r;   r<   rD   ÚgotrA   rA   rB   ÚtwX   s   
rG   Údatac                 C   s   t ƒ }|| 7 }|S rE   r   )rH   ÚbufrA   rA   rB   Úmakebuf]   s   rJ   Úreaderc                    sª   dt dd f‡ fdd„}t|ƒ}|| |ƒƒ |rJ ‚tƒ }tt|ƒƒD ]}| |ƒd u s,J ‚||||d … 7 }q"|| |ƒƒ t|ƒ}|d7 }|| |ƒƒ t|ƒdksSJ ‚d S )NrF   r=   c                    sF   | ˆ ksJ ‚t | dg ƒD ]\}}t|ƒtu sJ ‚t|ƒtu s J ‚qd S )Nr5   )ÚgetattrÚtypeÚbytes)rF   ÚnameÚvalue©rD   rA   rB   Úcheckd   s
   þztr.<locals>.checkr)   ó   trailing)r   rJ   r   ÚrangeÚlenrN   )rK   rH   rD   rR   rI   ÚirA   rQ   rB   Útrc   s   	rW   c                  C   s,   t D ]\\} }}}tt| |f ||ƒ qd S rE   )ÚSIMPLE_CASESrG   r(   ©ZroleÚstateÚeventÚbinaryrA   rA   rB   Útest_writers_simple   ó   ÿr]   c                  C   s,   t D ]\\} }}}tt| |f ||ƒ qd S rE   )rX   rW   r   rY   rA   rA   rB   Útest_readers_simple„   r^   r_   c                	   C   s²   t ttddgƒdƒ t ttg ƒdƒ t t¡� t ttddddgd	d
�d ƒ W d   ƒ n1 s0w   Y  t t¡� t t	t
ddgd	d�d ƒ W d   ƒ d S 1 sRw   Y  d S )N©r.   Úbar)ZbazZquuxs   foo: bar
baz: quux

s   
r+   ú/r,   r/   ú1.0©r3   r4   r5   Úhttp_versionr6   )r8   r5   re   )rG   r&   r   r   ÚpytestÚraisesr!   r'   r   r%   r   rA   rA   rA   rB   Útest_writers_unusual‰   s6   
ýüøÿÿû"ÿrh   c                	   C   sº  t tttf dtdddgdd�ƒ t tttf dtddg dd�ƒ t tttf dtd	dgdd
d�ƒ t tttf dtd	dgdd
d�ƒ t tttf dtd	dgdd
d�ƒ t tttf dtd	dgdd
d�ƒ t tttf dtd	dgddd�ƒ t tttf dtd	dgddd�ƒ t tttf dtd	ddgddd�ƒ t tttf dtd	ddgddd�ƒ t tttf dtddg d¢d�ƒ t 	t
¡� t tttf dd ƒ W d   ƒ n1 sÖw   Y  t 	t
¡� t tttf d d ƒ W d   ƒ n1 sõw   Y  t 	t
¡� t tttf d!d ƒ W d   ƒ n	1 �sw   Y  t 	t
¡� t tttf d!d ƒ W d   ƒ n	1 �s5w   Y  t 	t
¡� t tttf d"d ƒ W d   ƒ d S 1 �sVw   Y  d S )#Ns$   HEAD /foo HTTP/1.0
Some: header

ÚHEADú/foo©ÚSomeÚheaderrc   rd   s   HEAD /foo HTTP/1.0

s!   HTTP/1.0 200 OK
Some: header

r6   r7   )r8   r5   re   r9   s$   HTTP/1.0 200 OK
Foo: a a a a a 

)ÚFooz	a a a a as   HTTP/1.0 200 OK
Foo:

)rn   Ú s   HTTP/1.0 200 OK
Foo: 	 	 

s   HTTP/1.0 200
Foo: bar

)rn   ra   r>   s#   HTTP/1.1 200 OK
SomeHeader: val

)Z
SomeHeaderÚvalz1.1ÚOKs5   HTTP/1.1 200 OK
SomeHeader1: val1
SomeHeader2: val2

)ZSomeHeader1Zval1)ZSomeHeader2Zval2s7   HTTP/1.1 200 OK
SomeHeader1: val1
SomeHeader2: val2

sŸ   HEAD /foo HTTP/1.1
Host: example.com
Some: multi-line
 header
	nonsense
    	   		I guess
Connection: close
More-nonsense: in the
    last header  

)©r-   zexample.com)rl   z"multi-line header nonsense I guessr/   )zMore-nonsensezin the last headerr2   s&   HEAD /foo HTTP/1.1
  folded: line

s#   HEAD /foo HTTP/1.1
foo  : line

s"   HEAD /foo HTTP/1.1
foo	: line

s   HEAD /foo HTTP/1.1
: line

)rW   r   r   r   r   r   r   r   rf   rg   r!   rA   rA   rA   rB   Útest_readers_unusual¨   sü   
üý
ý
üý
üý

ÿý

ÿý	

ÿý

üý
üý
üý
	ýõ
ýÿ
ýÿ
ýÿ
ýÿ$ÿrs   c                   C   s&   t tg d¢ƒƒdtdƒdgksJ ‚d S )N)ó   aaas   bbbs     cccó   dddrt   s   bbb cccru   )Úlistr   Ú	bytearrayrA   rA   rA   rB   Útest__obsolete_line_fold_bytesH  s
   ýrx   rI   Údo_eofc                 c   sJ   � 	 | |ƒ}|d u rn|V  t |ƒtu rnq|r#|rJ ‚|  ¡ V  d S d S rE   )rM   r	   Zread_eof)rK   rI   ry   r[   rA   rA   rB   Ú_run_reader_iterU  s   €ø	þrz   Úargsc                  G   s   t t| Ž ƒ}t|ƒS rE   )rv   rz   r*   )r{   ÚeventsrA   rA   rB   Ú_run_readerf  s   r}   FÚthunkc           	      C   sÜ   t dƒ t|ƒ}t| ƒ ||ƒ|ksJ ‚t dƒ | ƒ }tƒ }g }tt|ƒƒD ]}|t||dƒ7 }||||d … 7 }q%|t|||ƒ7 }t|ƒ|ksJJ ‚tdd„ |D ƒƒ}|rh|sjt|d ƒ}t| ƒ |dƒ|kslJ ‚d S d S d S )NzTest 1zTest 2Fr)   c                 s   s   � | ]	}t |ƒtu V  qd S rE   )rM   r	   )Ú.0r[   rA   rA   rB   Ú	<genexpr>|  s   € z t_body_reader.<locals>.<genexpr>rS   )ÚprintrJ   r}   r   rT   rU   r*   Úany)	r~   rH   rD   ry   rI   rK   r|   rV   Zis_completerA   rA   rB   Út_body_readerk  s$   þrƒ   c                   C   s4   t dd„ dtƒ gƒ t dd„ dtdd�tƒ gƒ d S )Nc                   S   ó   t dƒS )Nr   ©r   rA   rA   rA   rB   Ú<lambda>ƒ  ó    z*test_ContentLengthReader.<locals>.<lambda>r>   c                   S   r„   )Né
   r…   rA   rA   rA   rB   r†   †  r‡   s
   0123456789©rH   )rƒ   r	   r   rA   rA   rA   rB   Útest_ContentLengthReader‚  s   ýrŠ   c                   C   sL   t tdtƒ gdd� t tdtdd�gdd� t tdtdd�tƒ gdd� d S )Nr>   T)ry   s   asdfr‰   F)rƒ   r   r	   r   rA   rA   rA   rB   Útest_Http10ReaderŒ  s
   
ÿr‹   c                   C   s  t tdtƒ gƒ t tdtdgd�gƒ t tdtdd�tdgd�gƒ t tdtdd�tƒ gƒ t td	td
d�tƒ gƒ t t¡� t tdtdd�gƒ W d   ƒ n1 sTw   Y  t t¡� t tdd ƒ W d   ƒ n1 sow   Y  t tdtdd�tƒ gƒ t tdtdd�tƒ gƒ d S )Nó   0

s   0
Some: header

rk   ©r5   s3   5
01234
10
0123456789abcdef
0
Some: header

s   012340123456789abcdefr‰   s%   5
01234
10
0123456789abcdef
0

sµ   aA
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
0

sª   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxsi   9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
xxxs   xxxs   10 
xxxsG   5; hello=there
xxxxx
0; random="junk"; some=more; canbe=lonnnnngg

s   xxxxxs   5   	 
01234
0

s   01234)rƒ   r   r	   r   rf   rg   r!   rA   rA   rA   rB   Útest_ChunkedReader”  sN   ý
þúýýýÿú	ýrŽ   c                  C   s   t dƒ} t| tdd�ƒdksJ ‚t| tdd�ƒdksJ ‚t| tƒ ƒdks&J ‚t dƒ} t t¡� t| tdd�ƒ W d   ƒ n1 sBw   Y  t dƒ} t| tdd�ƒ t t¡� t| tdd�ƒ W d   ƒ n1 skw   Y  t dƒ} t| tdd�ƒ t t¡� t| tƒ ƒ W d   ƒ n1 s’w   Y  t dƒ} t| tdd�ƒdk t| tdd�ƒdk t t¡� t| tdgd	�ƒ W d   ƒ d S 1 sÉw   Y  d S )
Né   s   123r‰   s   45r>   s   123456s   456©ZEtagZasdfr�   )r#   rC   r   r	   rf   rg   r!   ©ÚwrA   rA   rB   Útest_ContentLengthWriterÑ  s0   ÿÿÿ"ÿr“   c                  C   s‚   t ƒ } t| tdd�ƒdksJ ‚t| tdd�ƒdksJ ‚t| tdd�ƒdks'J ‚t| tƒ ƒdks1J ‚t| tdd	gd
�ƒdks?J ‚d S )Nrt   r‰   s   3
aaa
s   aaaaaaaaaaaaaaaaaaaas   14
aaaaaaaaaaaaaaaaaaaa
r>   rŒ   r�   )ÚaÚbr�   s   0
Etag: asdf
a: b

)r"   rC   r   r	   r‘   rA   rA   rB   Útest_ChunkedWriterì  s   ÿr–   c                  C   st   t ƒ } t| tdd�ƒdksJ ‚t| tƒ ƒdksJ ‚t t¡� t| tdgd�ƒ W d   ƒ d S 1 s3w   Y  d S )Ns   1234r‰   r>   r�   r�   )r$   rC   r   r	   rf   rg   r!   r‘   rA   rA   rB   Útest_Http10Writerû  s   "ÿr—   c                   C   óD   t  t¡� ttttf dd ƒ W d   ƒ d S 1 sw   Y  d S )Ns   HTTP/1.0 200 OK xxxx

)rf   rg   r!   rW   r   r   r   rA   rA   rA   rB   Ú&test_reject_garbage_after_request_line  s   "ÿr™   c                   C   r˜   )Ns&   HEAD /foo HTTP/1.1 xxxxxx
Host: a

©rf   rg   r!   rW   r   r   r   rA   rA   rA   rB   Ú'test_reject_garbage_after_response_line	  ó   
ý"ÿr›   c                   C   r˜   )Ns%   HEAD /foo HTTP/1.1
Host: foo bar

rš   rA   rA   rA   rB   Ú"test_reject_garbage_in_header_line  rœ   r�   c               	   C   sh   dD ]/} t dƒ}| | ¡ | d¡ t t¡� tttt	f |d ƒ W d   ƒ n1 s,w   Y  qd S )Ns     îs   HEAD /s    HTTP/1.1
Host: foobar

)
rw   r?   Úextendrf   rg   r!   rW   r   r   r   )Zbad_charÚmessagerA   rA   rB   Útest_reject_non_vchar_in_path  s   

ÿ€ür    c                   C   s&   t tttf dtddddgd�ƒ d S )Ns\   HEAD /foo HTTP/1.1
Host: foo
Set-Cookie: ___utmvafIumyLc=kUdUpAt; path=/; Max-Age=900

ri   rj   r,   )z
Set-Cookiez-___utmvafIumyLc=kUdUpAt; path=/; Max-Age=900r2   )rW   r   r   r   r   rA   rA   rA   rB   Ú"test_allow_some_garbage_in_cookies%  s   
þýúr¡   c                   C   s   t ttddgƒdƒ d S )Nr`   rr   s   Host: example.com
foo: bar

)rG   r&   r   rA   rA   rA   rB   Útest_host_comes_first7  s
   
ýr¢   )r=   N)F)KÚtypingr   r   r   r   rf   Z_eventsr   r   r	   r
   r   r   r   Ú_headersr   r   Ú_readersr   r   r   r   r   Z_receivebufferr   Ú_stater   r   r   r   r   r   r   r   r   r    Z_utilr!   Ú_writersr"   r#   r$   r%   r&   r'   r(   Úhelpersr*   rX   rN   rC   rG   rJ   rW   r]   r_   rh   rs   rx   Úboolrz   r}   rƒ   rŠ   r‹   rŽ   r“   r–   r—   r™   r›   r�   r    r¡   r¢   rA   rA   rA   rB   Ú<module>   sŒ    $	0$	ýù
ýýÿûýå#



 
!ÿÿÿ
þ 




=


	

	
	

