U
    /e!                     @  s   d Z ddlmZ ddlZee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 ddlZdZdZejeZejd	d
ZdZG dd de
ZG dd dZejdddddddZde d e Zej ese!e dst"edS )z Define a simple web server for testing purpose.

Used for serves the testing html pages that are needed by the webdriver unit
tests.

    )annotationsN)BaseHTTPRequestHandler
HTTPServer)Any)	URLopenerz	127.0.0.1i@  	WEBDRIVERz<undefined>)file_serverHtmlOnlyHandlerSimpleWebServerc                   @  s0   e Zd ZdZddddZddddd	d
ZdS )r	   zHttp handler.Nonereturnc              	   C  s   | j dd dd }zTttj t|dd4}| d | dd	 |   | j	
|  W 5 Q R X W n& tk
r   | d
d|  Y nX dS )zGET method handler.   N?r   rb)mode   zContent-typez	text/htmli  zFile Not Found: )pathsplitopenosjoin	HTML_ROOTZsend_responseZsend_headerZend_headerswfilewritereadOSErrorZ
send_error)selfr   f r   F/tmp/pip-unpacked-wheel-f5fndrjf/bokeh/_testing/plugins/file_server.pydo_GET<   s    
zHtmlOnlyHandler.do_GETstrr   )formatargsr   c                 G  s   dS )z)Override default to avoid trashing stderrNr   )r   r#   r$   r   r   r    log_messageH   s    zHtmlOnlyHandler.log_messageN)__name__
__module____qualname____doc__r!   r%   r   r   r   r    r	   :   s   r	   c                   @  sb   e Zd ZdZeefddddddZddd	d
ZddddZddddZ	dddddZ
dS )r
   zA very basic web server.r"   intr   )hostportr   c                 C  sp   d| _ z$t||ft| _|| _|| _W q\W q tk
rX   td| d |d7 }Y qX qt	j
| jd| _d S )NFzport z is in use, trying to next oner   )target)stop_servingr   r	   serverr+   r,   r   logdebug	threadingThread_run_web_serverthread)r   r+   r,   r   r   r    __init__O   s    zSimpleWebServer.__init__r   c                 C  s*   t d | js| j  q
| j  dS )zRuns the server loop.zweb server startedN)r0   r1   r.   r/   handle_requestserver_closer   r   r   r    r4   ]   s    
zSimpleWebServer._run_web_serverc                 C  s   | j   dS )zStarts the server.N)r5   startr9   r   r   r    r:   d   s    zSimpleWebServer.startc                 C  sT   d| _ z t d| j d| j  W n tk
r:   Y nX td | j	  dS )zStops the server.Thttp://:zShutting down the webserverN)
r.   r   r   r+   r,   r   r0   infor5   r   r9   r   r   r    stoph   s     
zSimpleWebServer.stop)r   r   c                 C  s   d| j  d| j d| S )Nr;   r<   /)r+   r,   )r   r   r   r   r    where_iss   s    zSimpleWebServer.where_isN)r&   r'   r(   r)   DEFAULT_HOSTDEFAULT_PORTr6   r4   r:   r>   r@   r   r   r   r    r
   M   s   r
   session)Zscopezpytest.FixtureRequest)requestr   c                 C  s   t  }|  | |j |S )N)r
   r:   Zaddfinalizerr>   )rD   r/   r   r   r    r   v   s    r   zXCan't find 'common_web' directory, try setting WEBDRIVER environment variable WEBDRIVER:z  HTML_ROOT:)#r)   
__future__r   logging	getLoggerr&   r0   r   r2   Zhttp.serverr   r   typingr   urllib.requestr   ZpytestrA   rB   r   dirname__file__r   environgetr   __all__r	   r
   Zfixturer   Z_html_root_error_messageisdirerrorAssertionErrorr   r   r   r    <module>   s,   


)

