B
    Ce              	   @   s  d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
 d dlmZmZ d dlmZ d dlZeedejf eejddf ddd	Zejejed
ZeedZe ZW dQ R X G dd de
ZddddZG dd dejZddddZ dS )    N)closingcontextmanager)SimpleHTTPRequestHandler)Callable	Generator)urlopen.)handlerreturnc             c   sH   t d| }tj|jddid}d|_z|  |V  W d |  X d S )N)z	127.0.0.1r   poll_intervalg{Gz?)targetkwargsT)socketserver	TCPServer	threadingThreadserve_foreverdaemonstartshutdown)r   httpdthread r   v/var/www/downstreamdata.science/rtclock/rtclock-venv/lib/python3.7/site-packages/h11/tests/test_against_stdlib_http.pysocket_server   s    
r   zdata/test-filerbc               @   s   e Zd ZeedddZdS )SingleMindedRequestHandler)pathr	   c             C   s   t S )N)test_file_path)selfr   r   r   r   translate_path$   s    z)SingleMindedRequestHandler.translate_pathN)__name__
__module____qualname__strr   r   r   r   r   r   #   s   r   )r	   c              C   s   t t} tt| j}ttj}|	|
tjdddgd |	|
t  t }xt| }t| |tjkr||d qbt|tjkr|jdkstt|tjkr||j7 }t|tjkrbP qbW t|tkstW d Q R X W d Q R X d S )NGETz/foo)Host	localhost)methodr   headers
      )r   r   r   socketcreate_connectionserver_addressh11
ConnectionZCLIENTsendallsendRequestEndOfMessage	bytearray
next_eventprint	NEED_DATAreceive_datarecvtypeResponsestatus_codeAssertionErrorDatadatabytestest_file_data)r   scr?   eventr   r   r   test_h11_as_client(   s,    


rE   c               @   s   e Zd ZddddZdS )H11RequestHandlerN)r	   c          	   C   s   t | j}ttj}d }xJ| }|tjkrB||d qt	|tj
krT|}t	|tjkrP qW |d k	sttt|jd|jddd |jD d}||tjdg d ||tj|dd ||t  W d Q R X d S )	Nr)   asciic             S   s"   i | ]\}}| d | d qS )rG   )decode).0namevaluer   r   r   
<dictcomp>]   s   z,H11RequestHandler.handle.<locals>.<dictcomp>)r'   r   r(   r*   )r<   r(   )r?   )r   requestr.   r/   ZSERVERr5   r7   r8   r9   r:   r2   r3   r=   jsondumpsr'   rH   r   r(   r0   r1   r;   r>   encode)r   rB   rC   rM   rD   infor   r   r   handleI   s*    


zH11RequestHandler.handle)r    r!   r"   rR   r   r   r   r   rF   H   s   rF   c           
   C   s   t tL} | j\}}d||}tt|}| dks>t| }W d Q R X W d Q R X t	
|d}t| |d dkst|d dkstd|d	 d
 kstd S )Nzhttp://{}:{}/some-pathr*   rG   r'   r$   r   z
/some-pathurllibr(   z
user-agent)r   rF   r-   formatr   r   getcoder=   readrN   loadsrH   r6   )r   hostporturlfr?   rQ   r   r   r   test_h11_as_serverh   s    

r\   )!rN   os.pathosr+   r   r   
contextlibr   r   Zhttp.serverr   typingr   r   urllib.requestr   r.   BaseRequestHandlerr   r   r   joindirname__file__r   openr[   rV   rA   r   rE   rF   r\   r   r   r   r   <module>   s&     