
    ∋d                        U d dl mZ d dlZd dlmZ  ej        e          Z	 d dlm	Z	  G d de	          Z
n3# e$ r+ e                    d            G d dej                  Z
Y nw xY wd	 Zd
e
i fgZded<   dS )    )annotationsN)web)ProxyHandlerc                  Z     e Zd ZdZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Z fdZ xZS )GlobalProxyHandlerzx
        A tornado request handler that proxies HTTP and websockets
        from a port to any valid endpoint'.
        Nc                &    || _         |pi | _        d S N)	schedulerextraselfdask_serverr   s      6lib/python3.11/site-packages/distributed/http/proxy.py
initializezGlobalProxyHandler.initialize   s    (DN"DJJJ    c                "  K   || _         d| d| }|| j        _        d|z  }| j          d| }t          | j        |          s1d|z  }|                     d           |                     |           d S |                     ||           d {V S )Nz/proxy//z/%s:zWorker <%s> does not existi  )hostrequesturicheck_worker_dashboard_exitsr
   
set_statusfinishproxy)r   portr   proxied_pathr   workermsgs          r   http_getzGlobalProxyHandler.http_get   s       DI 2D11<11C"DL !</L	**D**F/GG 2V;$$$C   D,777777777r   c                @   K   |                      |||           d {V S r	   )
proxy_open)r   r   r   r   s       r   openzGlobalProxyHandler.open+   s.      t\BBBBBBBBBr   c                .    |                      ||          S r	   r   r   r   r   s      r   postzGlobalProxyHandler.post/       ::dL111r   c                .    |                      ||          S r	   r%   r&   s      r   putzGlobalProxyHandler.put2   r(   r   c                .    |                      ||          S r	   r%   r&   s      r   deletezGlobalProxyHandler.delete5   r(   r   c                .    |                      ||          S r	   r%   r&   s      r   headzGlobalProxyHandler.head8   r(   r   c                .    |                      ||          S r	   r%   r&   s      r   patchzGlobalProxyHandler.patch;   r(   r   c                .    |                      ||          S r	   r%   r&   s      r   optionszGlobalProxyHandler.options>   r(   r   c                T    t                                          | j        ||          S r	   )superr   r   )r   r   r   	__class__s      r   r   zGlobalProxyHandler.proxyA   s!     77==D,???r   NN)__name__
__module____qualname____doc__r   r    r#   r'   r*   r,   r.   r0   r2   r   __classcell__)r5   s   @r   r   r      s        	 	
	% 	% 	% 	%	8 	8 	8*	C 	C 	C	2 	2 	2	2 	2 	2	2 	2 	2	2 	2 	2	2 	2 	2	2 	2 	2	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@r   r   zzTo route to workers diagnostics web server please install jupyter-server-proxy: python -m pip install jupyter-server-proxyc                       e Zd ZdZddZd ZdS )r   z@Minimal Proxy handler when jupyter-server-proxy is not installedNc                &    || _         |pi | _        d S r	   )serverr   r   s      r   r   zGlobalProxyHandler.initializeP   s    %DK"DJJJr   c                p    | 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   
worker_urlr   s         r   getzGlobalProxyHandler.getT   sS     88488,88J&  ' . JJsOOOOOr   r6   )r7   r8   r9   r:   r   rC    r   r   r   r   M   s=        NN	% 	% 	% 	%	 	 	 	 	r   c                   |                     d          \  }}t          | j                                                  }|D ]>}|j                            dd          }||j        k    r|t          |          k    r dS ?dS )zCheck addr:port exists as a worker in scheduler list

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

    Returns
    -------
    bool
    r   	dashboard TF)splitlistworkersvaluesservicesrC   r   str)r
   r   addrr   rJ   w
bokeh_ports          r   r   r   p   s     c""JD$9$++--..G  Z^^K44
16>>dc*oo55445r   zproxy/(\d+)/(.*?)/(.*)zlist[tuple]routes)
__future__r   loggingtornador   	getLoggerr7   loggerjupyter_server_proxy.handlersr   r   ImportErrorinfoRequestHandlerr   rQ   __annotations__rD   r   r   <module>r\      s;   " " " " " " "       		8	$	$d::::::8@ 8@ 8@ 8@ 8@\ 8@ 8@ 8@ 8@t  ' ' '
KK	5           S/          'T  * 23ErJK K K K K K Ks   8 -A('A(