a
    3`/b                     @  s   U d dl mZ d dlZd dlmZ eeZz d dlm	Z	 G dd de	Z
W n. eyz   ed G dd dejZ
Y n0 d	d
 Zde
i fgZded< dS )    )annotationsN)web)ProxyHandlerc                      sj   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Z fddZ  ZS )GlobalProxyHandlerzx
        A tornado request handler that proxies HTTP and websockets
        from a port to any valid endpoint'.
        Nc                 C  s   || _ |pi | _d S N)	schedulerextraselfZdask_serverr    r   5lib/python3.9/site-packages/distributed/http/proxy.py
initialize   s    GlobalProxyHandler.initializec                   st   || _ d| d| }|| j_d| }| j  d| }t| j|sbd| }| d | | d S | ||I d H S )Nz/proxy//z/%s:zWorker <%s> does not existi  )hostZrequesturicheck_worker_dashboard_exitsr   Z
set_statusZfinishproxy)r
   portr   proxied_pathr   workermsgr   r   r   http_get   s    

zGlobalProxyHandler.http_getc                   s   |  |||I d H S r   )Z
proxy_open)r
   r   r   r   r   r   r   open+   s    zGlobalProxyHandler.openc                 C  s   |  ||S r   r   r
   r   r   r   r   r   post/   s    zGlobalProxyHandler.postc                 C  s   |  ||S r   r   r   r   r   r   put2   s    zGlobalProxyHandler.putc                 C  s   |  ||S r   r   r   r   r   r   delete5   s    zGlobalProxyHandler.deletec                 C  s   |  ||S r   r   r   r   r   r   head8   s    zGlobalProxyHandler.headc                 C  s   |  ||S r   r   r   r   r   r   patch;   s    zGlobalProxyHandler.patchc                 C  s   |  ||S r   r   r   r   r   r   options>   s    zGlobalProxyHandler.optionsc                   s   t  | j||S r   )superr   r   r   	__class__r   r   r   A   s    zGlobalProxyHandler.proxy)NN)__name__
__module____qualname____doc__r   r   r   r   r   r   r    r!   r"   r   __classcell__r   r   r$   r   r      s   
r   zzTo route to workers diagnostics web server please install jupyter-server-proxy: python -m pip install jupyter-server-proxyc                   @  s"   e Zd ZdZdddZdd ZdS )r   z@Minimal Proxy handler when jupyter-server-proxy is not installedNc                 C  s   || _ |pi | _d S r   )Zserverr   r	   r   r   r   r   P   s    r   c                 C  s.   | d| d| }d ||}| | d S )Nr   r   a  
                <p> Try navigating to <a href=http://{}>{}</a> for your worker dashboard </p>

                <p>
                Dask tried to proxy you to that page through your
                Scheduler's dashboard connection, but you don't have
                jupyter-server-proxy installed.  You may want to install it
                with either conda or pip, and then restart your scheduler.
                </p>

                <p><pre> conda install jupyter-server-proxy -c conda-forge </pre></p>
                <p><pre> python -m pip install jupyter-server-proxy</pre></p>

                <p>
                The link above should work though if your workers are on a
                sufficiently open network.  This is common on single machines,
                but less common in production clusters.  Your IT administrators
                will know more
                </p>
            )formatwrite)r
   r   r   r   Z
worker_urlr   r   r   r   getT   s    zGlobalProxyHandler.get)NN)r&   r'   r(   r)   r   r-   r   r   r   r   r   M   s   
c                 C  sT   | d\}}t| j }|D ].}|jdd}||jkr |t|kr  dS q dS )zCheck addr:port exists as a worker in scheduler list

    Parameters
    ----------
    worker : str
        addr:port

    Returns
    -------
    bool
    r   Z	dashboard TF)splitlistworkersvaluesZservicesr-   r   str)r   r   Zaddrr   r1   wZ
bokeh_portr   r   r   r   p   s    r   zproxy/(\d+)/(.*?)/(.*)zlist[tuple]routes)Z
__future__r   loggingZtornador   Z	getLoggerr&   loggerZjupyter_server_proxy.handlersr   r   ImportErrorinfoZRequestHandlerr   r5   __annotations__r   r   r   r   <module>   s   
:#