
     f@                        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fe"e!f eddgd          dfe"e!f edg d          dfe"e!f eddgd          dfe"e!f edg d          dfgZ0ded         ded e1fd!Z2deded"ed dfd#Z3d$e1d efd%Z4d&ed$e1d"ed dfd'Z5dAd(Z6dAd)Z7dAd*Z8dAd+Z9dAd,Z:d&ed-e1d.e;d eeddf         fd/Z<d0ed ee
         fd1Z=dBd3ed$e1d"ed.e;d df
d4Z>dAd5Z?dAd6Z@dAd7ZAdAd8ZBdAd9ZCdAd:ZDdAd;ZEdAd<ZFdAd=ZGdAd>ZHdAd?ZIdAd@ZJdS )C    )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_coder6   reasons&   HTTP/1.1 200 OK
Connection: close

s   HTTP/1.1 200 OK

e   )Upgrade	websockets   Upgrades,   HTTP/1.1 101 Upgrade
Upgrade: websocket

s   HTTP/1.1 101 Upgrade

writer).Nobjreturnc                 R    g } | ||j                    d                    |          S )N    )appendjoin)r>   r?   got_lists      T/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/h11/tests/test_io.pydowriterG   R   s-    H
F3   88HrB   expectedc                 6    t          | |          }||k    sJ d S N)rG   )r>   r?   rH   gots       rF   twrL   X   s"    
&#

C(??????rB   datac                 ,    t                      }|| z  }|S rJ   r   )rM   bufs     rF   makebufrP   ]   s    
//C4KCJrB   readerc                    dt           dd ffd}t          |          } | | |                     |rJ t                      }t          t	          |                    D ]} | |          J ||||dz            z  }  | | |                     t          |          }|dz  } | | |                     t          |          dk    sJ d S )NrK   r@   c                     | k    sJ t          | dg           D ]5\  }}t          |          t          u sJ t          |          t          u sJ 6d S )Nr6   )getattrtypebytes)rK   namevaluerH   s      rF   checkztr.<locals>.checkd   sl    h #3	266 	( 	(KD%::&&&&;;%'''''	( 	(rB   r*      trailing)r   rP   r   rangelenrV   )rQ   rM   rH   rY   rO   is     `   rF   trr^   c   s   (3 (4 ( ( ( ( ( ( $--C	E&&++NNN //C3t99  vc{{"""tAAI	E&&++ $--C;C	E&&++::$$$$$$rB   c                  d    t           D ]'\  \  } }}}t          t          | |f         ||           (d S rJ   )SIMPLE_CASESrL   r)   rolestateeventbinarys       rF   test_writers_simplerf      sD    *6 0 0&$v
74;////0 0rB   c                  d    t           D ]'\  \  } }}}t          t          | |f         ||           (d S rJ   )r`   r^   r   ra   s       rF   test_readers_simplerh      sD    *6 0 0&$v
74;////0 0rB   c            
         t          t          t          ddg          d           t          t          t          g           d           t	          j        t                    5  t          t          t          ddddgd	
          d            d d d            n# 1 swxY w Y   t	          j        t                    5  t          t          t          ddgd	          d            d d d            d S # 1 swxY w Y   d S )Nr/   bar)bazquuxs   foo: bar
baz: quux

s   
r,   /r-   r0   1.0r4   r5   r6   http_versionr7   )r9   r6   rq   )rL   r'   r   r   pytestraisesr"   r(   r   r&   r    rB   rF   test_writers_unusualru      s   @AA(  
 }gbkk7+++ 
)	*	* 

 


(*AB"	   		
 		
 		


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
)	*	* 
 

*A)BQV   	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s$   "*BBB<(C11C58C5c            
         t          t          t          t          f         dt	          dddgd                     t          t          t          t          f         dt	          ddg 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
                     t          t          t
          t          f         dt          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                     t          t          t
          t          f         dt          d	dgdd                     t          t          t
          t          f         dt          d	ddgdd                     t          t          t
          t          f         dt          d	ddgdd                     t          t          t          t          f         dt	          ddg d                     t          j	        t                    5  t          t          t          t          f         dd            d d d            n# 1 swxY w Y   t          j	        t                    5  t          t          t          t          f         d d            d d d            n# 1 swxY w Y   t          j	        t                    5  t          t          t          t          f         d!d            d d d            n# 1 swxY w Y   t          j	        t                    5  t          t          t          t          f         d!d            d d d            n# 1 swxY w Y   t          j	        t                    5  t          t          t          t          f         d"d            d d d            d S # 1 swxY w Y   d S )#Ns$   HEAD /foo HTTP/1.0
Some: header

HEAD/fooSomeheaderro   rp   s   HEAD /foo HTTP/1.0

s!   HTTP/1.0 200 OK
Some: header

r7   r8   )r9   r6   rq   r:   s$   HTTP/1.0 200 OK
Foo: a a a a a 

)Fooz	a a a a as   HTTP/1.0 200 OK
Foo:

)r|    s   HTTP/1.0 200 OK
Foo: 	 	 

s   HTTP/1.0 200
Foo: bar

)r|   rk   rB   s#   HTTP/1.1 200 OK
SomeHeader: val

)
SomeHeadervalz1.1OKs5   HTTP/1.1 200 OK
SomeHeader1: val1
SomeHeader2: val2

)SomeHeader1val1)SomeHeader2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)rz   z"multi-line header nonsense I guessr0   )zMore-nonsensezin the last headerr3   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

)r^   r   r   r   r   r    r   r   rr   rs   r"   rt   rB   rF   test_readers_unusualr      s   5'(		
 	
 	
	 	 	 %vfbuMMM   %&2'(		
 	
 	
	 	 	 %&9)*		
 	
 	
	 	 	 %&.k]u	
 	
 	
   %&5k]u	
 	
 	
   %&/n%5ERU	
 	
 	
   %&3*+		
 	
 	
	 	 	 %&D,.EF		
 	
 	
	 	 	 %&H,.EF		
 	
 	
	 	 	 	% 	  		
 		
 		
  . 
)	*	* 
 

FDL!?	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
)	*	* 
 

FDL!<	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
)	*	* 
 

FDL!<	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
)	*	* 
 

FDL!<	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
)	*	* U U
764< "MtTTTU U U U U U U U U U U U U U U U U UsZ   )KKK2)L''L+.L+)N  NN$)OO O=)P33P7:P7c                  n    t          t          g d                    dt          d          dgk    sJ d S )N)   aaas   bbbs     ccc   dddr   s   bbb cccr   )listr   	bytearrayrt   rB   rF   test__obsolete_line_fold_bytesr   H  sT     #$F$F$FGGHH*M      rB   rO   do_eofc              #      K   	  | |          }|n|V  t          |          t          u rn*|r|rJ |                                 V  d S d S rJ   )rU   r
   read_eof)rQ   rO   r   rd   s       rF   _run_reader_iterr   U  s}      s= ;;,&&   oo   rB   argsc                  L    t          t          |            }t          |          S rJ   )r   r   r+   )r   eventss     rF   _run_readerr   f  s#    "D)**F (((rB   Fthunkc                 N   t          d           t          |          }t           |             ||          |k    sJ t          d            |             }t                      }g }t	          t          |                    D ]&}|t          ||d          z  }||||dz            z  }'|t          |||          z  }t          |          |k    sJ t          d |D                       }|r3|s3t          |dz             }t           |             |d          |k    sJ d S d S d S )NzTest 1zTest 2Fr*   c              3   B   K   | ]}t          |          t          u V  d S rJ   )rU   r
   ).0rd   s     rF   	<genexpr>z t_body_reader.<locals>.<genexpr>|  s-      HHed5kk\1HHHHHHrB   rZ   )printrP   r   r   r[   r\   r+   any)	r   rM   rH   r   rO   rQ   r   r]   is_completes	            rF   t_body_readerr   k  sU   	(OOO
$--CuuwwV,,8888 
(OOOUWWF
//CF3t99  +fc5111tAAI
k&#v...F ((H4444HHxHHHHHK <6 <d[())5577C//8;;;;< < < <;;rB   c                      t          d dt                      g           t          d dt          d          t                      g           d S )Nc                       t          d          S )Nr   r   rt   rB   rF   <lambda>z*test_ContentLengthReader.<locals>.<lambda>  s    -a00 rB   rB   c                       t          d          S )N
   r   rt   rB   rF   r   z*test_ContentLengthReader.<locals>.<lambda>  s    #B'' rB   s
   0123456789rM   )r   r
   r	   rt   rB   rF   test_ContentLengthReaderr     s[    00#7GHHH''	=	!	!	!<>>2    rB   c                     t          t          dt                      gd           t          t          dt          d          gd           t          t          dt          d          t                      gd           d S )NrB   T)r   s   asdfr   F)r   r   r
   r	   rt   rB   rF   test_Http10Readerr     s    ,lnn%5dCCCC,$G*<*<*<)=eLLLLg' 2 2 2LNNCD     rB   c                     t          t          dt                      g           t          t          dt          dg          g           t          t          dt          d          t          dg          g           t          t          dt          d          t                      g           t          t          d	t          d
          t                      g           t	          j        t                    5  t          t          dt          d          g           d d d            n# 1 swxY w Y   t	          j        t                    5  t          t          dd            d d d            n# 1 swxY w Y   t          t          dt          d          t                      g           t          t          dt          d          t                      g           d S )N   0

s   0
Some: header

ry   r6   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	   rr   rs   r"   rt   rB   rF   test_ChunkedReaderr     sw   -/?@@@$	12	3	3	34   	"
 .///"4!5666	

 
 
 H	+	,	,	,lnn=   8	;			0   
)	*	* S S 	m%<t?P?P?P>QRRRS S S S S S S S S S S S S S S 
)	*	* = =m%5t<<<= = = = = = = = = = = = = = = 	B 
8			lnn-   -	8			lnn-    s$   <&D..D25D2E55E9<E9c                     t          d          } t          | t          d                    dk    sJ t          | t          d                    dk    sJ t          | t                                dk    sJ t          d          } t	          j        t                    5  t          | t          d                     d d d            n# 1 swxY w Y   t          d          } t          | t          d                     t	          j        t                    5  t          | t          d                     d d d            n# 1 swxY w Y   t          d          } t          | t          d                     t	          j        t                    5  t          | t                                 d d d            n# 1 swxY w Y   t          d          } t          | t          d                    dk     t          | t          d                    dk     t	          j        t                    5  t          | t          dg	                     d d d            d S # 1 swxY w Y   d S )
N   s   123r   s   45rB   s   123456s   456Etagasdfr   )r$   rG   r	   r
   rr   rs   r"   ws    rF   test_ContentLengthWriterr     s:   AA1d'''((F22221d&&&''500001lnn%%,,,,AA	)	*	* ) )4Y'''((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) 	AAAt   !!!	)	*	* & &4V$$$%%%& & & & & & & & & & & & & & & 	AAAt   !!!	)	*	* # #<>>"""# # # # # # # # # # # # # # # 	AAAt   !!V++At  E))	)	*	* = =<)9(:;;;<<<= = = = = = = = = = = = = = = = = =sH   "CCCE		EEGG
G: I''I+.I+c                     t                      } t          | t          d                    dk    sJ t          | t          d                    dk    sJ t          | t          d                    dk    sJ t          | t                                dk    sJ t          | t          dd	g
                    dk    sJ d S )Nr   r   s   3
aaa
s   aaaaaaaaaaaaaaaaaaaas   14
aaaaaaaaaaaaaaaaaaaa
rB   r   r   )abr   s   0
Etag: asdf
a: b

)r#   rG   r	   r
   r   s    rF   test_ChunkedWriterr     s    A1d'''((O;;;;1d	***++/NNNNN1dnnn%%,,,,1lnn%%5555 	<)9:(FGGGHH-	. 	. 	. 	. 	. 	.rB   c                  P   t                      } t          | t          d                    dk    sJ t          | t                                dk    sJ t	          j        t                    5  t          | t          dg                     d d d            d S # 1 swxY w Y   d S )Ns   1234r   rB   r   r   )r%   rG   r	   r
   rr   rs   r"   r   s    rF   test_Http10Writerr     s    A1d((())W44441lnn%%,,,,	)	*	* = =<)9(:;;;<<<= = = = = = = = = = = = = = = = = =s   . BB"Bc                      t          j        t                    5  t          t          t
          t          f         dd            d d d            d S # 1 swxY w Y   d S )Ns   HTTP/1.0 200 OK xxxx

)rr   rs   r"   r^   r   r    r   rt   rB   rF   &test_reject_garbage_after_request_liner     s    	)	*	* U U
76=()+MtTTTU U U U U U U U U U U U U U U U U U   )AAAc                      t          j        t                    5  t          t          t
          t          f         dd            d d d            d S # 1 swxY w Y   d S )Ns&   HEAD /foo HTTP/1.1 xxxxxx
Host: a

rr   rs   r"   r^   r   r   r   rt   rB   rF   'test_reject_garbage_after_response_liner   	  s    	)	*	* 
 

FDL!?	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
r   c                      t          j        t                    5  t          t          t
          t          f         dd            d d d            d S # 1 swxY w Y   d S )Ns%   HEAD /foo HTTP/1.1
Host: foo bar

r   rt   rB   rF   "test_reject_garbage_in_header_liner     s    	)	*	* 
 

FDL!A	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
r   c                  4   dD ]} t          d          }|                    |            |                    d           t          j        t
                    5  t          t          t          t          f         |d            d d d            n# 1 swxY w Y   d S )Ns     s   HEAD /s    HTTP/1.1
Host: foobar

)
r   rC   extendrr   rs   r"   r^   r   r   r   )bad_charmessages     rF   test_reject_non_vchar_in_pathr     s    ' 5 5I&&x   ;<<<]-.. 	5 	5wvt|$gt444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5	5 5s   )BB	B	c            
      z    t          t          t          t          f         dt	          ddddg                     d S )Ns\   HEAD /foo HTTP/1.1
Host: foo
Set-Cookie: ___utmvafIumyLc=kUdUpAt; path=/; Max-Age=900

rw   rx   r-   )z
Set-Cookiez-___utmvafIumyLc=kUdUpAt; path=/; Max-Age=900r3   )r^   r   r   r   r   rt   rB   rF   "test_allow_some_garbage_in_cookiesr   %  sT    	 	R	
 	
 	
    rB   c                  P    t          t          t          ddg          d           d S )Nrj   r   s   Host: example.com
foo: bar

)rL   r'   r   rt   rB   rF   test_host_comes_firstr   7  s5    0GHII0    rB   )r@   N)F)Ktypingr   r   r   r   rr   _eventsr   r	   r
   r   r   r   r   _headersr   r   _readersr   r   r   r   r   _receivebufferr   _stater   r   r   r   r   r   r   r   r    r!   _utilr"   _writersr#   r$   r%   r&   r'   r(   r)   helpersr+   r`   rV   rG   rL   rP   r^   rf   rh   ru   r   r   boolr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rt   rB   rF   <module>r      s   1 1 1 1 1 1 1 1 1 1 1 1                   7 6 6 6 6 6 6 6              + * * * * *                        ' & & & & &                  + * * * * * 
$&=>	
 	
 	

 	E 
S+B*CERRR7 
S"U;;;" 
&>%?
	
 	
 	
 	> 
#r*MMM'7 FHY' c e    s       
% M    %s %% %3 %4 % % % %80 0 0 0
0 0 0 0

 
 
 
>]U ]U ]U ]U@
 
 
 
   %) sD$       ")s )tE{ ) ) ) )
< < <E <S <$ <SW < < < <.      : : : :z= = = =6   = = = =U U U U

 
 
 

 
 
 
5 5 5 5   $     rB   