ó
ßüÚ\c           @` sÇ  d  d l  m Z m Z m Z d  d l Z e j d ƒ d  d l Z 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 d  d l m Z d  d l m Z m Z d  d l m Z m Z m Z d  d l m Z m Z m Z d  d	 l m Z d  d
 l m Z d „  Z d „  Z d „  Z d „  Z  d „  Z! e j" j# e
 j$ j% d ƒ d d ƒd „  ƒ Z& d „  Z' d „  Z( d „  Z) d „  Z* d „  Z+ d Z, d „  Z- d „  Z. d Z/ d „  Z0 d „  Z1 d S(   i    (   t   print_functiont   divisiont   absolute_importNt   requests(   t   sleep(   t   gen(   t	   Schedulert   Client(   t   get_ipt   get_ip_interfacet   tmpfile(   t   popent&   assert_can_connect_from_everywhere_4_6t   assert_can_connect_locally_4(   t   loop(   t   timec      
   C` s¨   t  d d g ƒ H } t j d „  ƒ } t d t j d |  ƒ } | j | ƒ Wd  QXWd  QXt j t	 ƒ  t
 j d ƒ Wd  QXt j t	 ƒ  t
 j d ƒ } Wd  QXd  S(   Ns   dask-schedulers
   --no-bokehc           s` s   t  d d ƒ g Vd  S(   NiR"  g      @(   R   (    (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   f   s    s   127.0.0.1:%dR   s   http://127.0.0.1:8787/status/s   http://127.0.0.1:9786/info.json(   R   R   t	   coroutineR   R   t   default_portt   synct   pytestt   raisest	   ExceptionR   t   get(   R   t   procR   t   ct   response(    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   test_defaults   s    c      
   C` s{   t  d d d d g ƒ ] t j d „  ƒ } t d d |  ƒ2 } t | j ƒ  ƒ d k s^ t ‚ | j | ƒ Wd  QXWd  QXd  S(   Ns   dask-schedulers
   --no-bokehs   --hosts   127.0.0.1:8978c           s` s   t  d d ƒ g Vd  S(   Ni#  g      @(   R   (    (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyR   0   s    R   i    (   R   R   R   R   t   lent   ncorest   AssertionErrorR   (   R   R   R   (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   test_hostport-   s
    c         C` s¯   t  j d ƒ t d d g ƒ Š } t d t j d |  ƒh } x; t d ƒ D]- } | j j ƒ  } d | j	 ƒ  k sK t
 ‚ qK Wt  j t ƒ  t j d ƒ Wd  QXWd  QXWd  QXd  S(   Nt   bokehs   dask-schedulers
   --no-bokehs   127.0.0.1:%dR   i   s   http://127.0.0.1:8787/status/(   R   t   importorskipR   R   R   R   t   ranget   stderrt   readlinet   lowerR   R   R   R   R   (   R   R   R   t   it   line(    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   test_no_bokeh<   s    c   	   
   C` sF  t  j d ƒ t d g ƒ } t d t j d |  ƒ } Wd  QXd d t ƒ  g } d t j k rx | j	 t
 j ƒ  ƒ n  t ƒ  } x• t ry> x6 | D]. } d | } t j | ƒ } | j s” t ‚ q” WPWq„ t k
 r} t d	 | | f ƒ t d
 ƒ t ƒ  | d k  st ‚ q„ Xq„ WWd  QXt  j t ƒ  t j d ƒ Wd  QXd  S(   NR    s   dask-schedulers   127.0.0.1:%dR   t	   localhosts	   127.0.0.1t   linuxs   http://%s:8787/status/s   got error on %r: %sgš™™™™™¹?i
   s   http://127.0.0.1:8787/status/(   R   R!   R   R   R   R   R   t   syst   platformt   appendt   sockett   gethostnameR   t   TrueR   R   t   okR   R   t   printR   R   (	   R   R   R   t   namest   startt   namet   uriR   R   (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt
   test_bokehG   s*    		

'c      
   C` sã   t  j d ƒ t d d d d d g ƒ ’ } t d d |  ƒ } Wd  QXt ƒ  } xd t rµ y# t j d	 ƒ } | j sy t	 ‚ PWqR t
 k
 r± t d
 ƒ t ƒ  | d k  s² t	 ‚ qR XqR WWd  QXt  j t
 ƒ  t j d	 ƒ Wd  QXd  S(   NR    s   dask-schedulers   --portt   3448s   --dashboard-addresss   :4832s   127.0.0.1:3448R   s   http://localhost:4832/status/gš™™™™™¹?i   (   R   R!   R   R   R   R0   R   R   R1   R   R   R   R   (   R   R   R   R4   R   (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   test_bokeh_non_standard_portsd   s"    		
'R*   t   reasons    Need 127.0.0.2 to mean localhostc         C` s  t  j d ƒ t  j t ƒ  t j d ƒ j Wd  QXt d d d d d g ƒ À } t d t	 j
 d |  ƒ } Wd  QXt ƒ  } x‹ t r	y> x6 d	 d
 g D]( } t j d | ƒ } | j s• t ‚ q• WPWq t k
 r} t | ƒ t d ƒ t ƒ  | d k  st ‚ q Xq WWd  QXd  S(   NR    s   http://localhost:8787/status/s   dask-schedulers   --bokeh-whitelists   127.0.0.2:8787s   127.0.0.3:8787s   127.0.0.1:%dR   s	   127.0.0.2s	   127.0.0.3s   http://%s:8787/status/gš™™™™™¹?i   (   R   R!   R   R   R   R   R1   R   R   R   R   R   R0   R   R2   R   (   R   R   R   R4   R5   R   R   (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   test_bokeh_whitelistz   s.    		

c         C` sÈ   t  d d g ƒ ° } t  d d d g ƒ ’ } t  d d d g ƒ t } t d t j d |  ƒR } t ƒ  } x? t | j ƒ  ƒ d k  r« t d ƒ t ƒ  | d	 k  sm t ‚ qm WWd  QXWd  QXWd  QXWd  QXd  S(
   Ns   dask-schedulers
   --no-bokehs   dask-workers   localhost:8786s   127.0.0.1:%dR   i   gš™™™™™¹?i
   (	   R   R   R   R   R   R   R   R   R   (   R   t   st   at   bR   R4   (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   test_multiple_workers›   s    	
c   
      C` sr  t  j d ƒ } t | j ƒ  ƒ } xV | D]: } y t | ƒ } Wn t k
 rQ q( X| d k r( Pq( q( Wt  j d | f ƒ t d d d | g ƒ Ú } t d d d d | g ƒ ¶ } t d	 t	 j
 d
 |  ƒ” } t ƒ  } x9 t | j ƒ  ƒ st d ƒ t ƒ  | d k  sÛ t ‚ qÛ W| j ƒ  }	 d |	 d k s6t ‚ t d „  |	 d j ƒ  Dƒ ƒ s\t ‚ Wd  QXWd  QXWd  QXd  S(   Nt   psutils	   127.0.0.1s@   Could not find loopback interface. Available interfaces are: %s.s   dask-schedulers
   --no-bokehs   --interfaces   dask-workers   127.0.0.1:8786s   tcp://127.0.0.1:%dR   gš™™™™™¹?i   s   tcp://127.0.0.1t   addressc         s` s   |  ] } d  | d k Vq d S(   s	   127.0.0.1t   hostN(    (   t   .0t   d(    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pys	   <genexpr>Â   s    t   workers(   R   R!   t   sortedt   net_if_addrsR	   t
   ValueErrort   skipR   R   R   R   R   R   R   R   R   t   scheduler_infot   allt   values(
   R   R@   t   if_namest   if_namet	   ipv4_addrR<   R=   R   R4   t   info(    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   test_interface¦   s0    	
c         C` s   d „  } t  ƒ  x } t d d | d g ƒ  } | | | ƒ Wd  QXt  ƒ  8 } t d d d | d g ƒ  } | | | ƒ Wd  QXWd  QXWd  QXd  S(   Nc         S` së   t  ƒ  } x9 t j j | ƒ sD t d ƒ t  ƒ  | d k  s t ‚ q Wt } t  ƒ  } xN | s¤ t d ƒ t  ƒ  | d k  s€ t ‚ t | ƒ  } | j ƒ  } Wd  QXqW Wt	 | ƒ } t
 j j d ƒ rÒ | sç t ‚ n |  j | k sç t ‚ d  S(   Ng{®Gáz„?i   t   win(   R   t   ost   patht   existsR   R   t   Falset   opent   readt   intR+   R,   t
   startswitht   pid(   R   t   pidfileR4   t   textR   R[   (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   check_pidfileÆ   s    	
		
s   dask-schedulers
   --pid-files
   --no-bokehs   dask-workers   127.0.0.1:8786(   R
   R   (   R   R^   R<   t   schedt   wt   worker(    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   test_pid_fileÅ   s    	c         C` s…   t  ƒ  v } t d d d | d d g ƒ O } t d | d |  ƒ 1 } | j j sW t ‚ | j j d k so t ‚ Wd  QXWd  QXWd  QXd  S(	   Ns   dask-schedulers
   --no-bokehs   --scheduler-files   --portt   0t   scheduler_fileR   iR"  (   R
   R   R   t	   schedulert   portR   (   R   t   fnR_   R   (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   test_scheduler_port_zeroæ   s    c      
   C` s¶   t  j d ƒ t ƒ  š } t d d d g ƒ | } d } xl | d k  r¥ | j j ƒ  } d | j ƒ  k sy d | j ƒ  k r: t d ƒ | d 7} d | k s¢ t ‚ q: q: WWd  QXWd  QXd  S(	   NR    s   dask-schedulers   --dashboard-addresss   :0i    i   t   webg{®Gáz„?(	   R   R!   R
   R   R#   R$   R%   R   R   (   R   Rg   R   t   countR'   (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   test_bokeh_port_zeroð   s    $

s©   
_scheduler_info = {}

def dask_setup(scheduler):
    _scheduler_info['address'] = scheduler.address

def get_scheduler_address():
    return _scheduler_info['address']
c         C` sÛ   d „  } t  j ƒ  } z± t j j | d ƒ } t | d ƒ  } | j t ƒ Wd  QXt ƒ  h } t	 d d | d | g ƒ D t
 d | d |  ƒ ( } | j | ƒ | j j k s³ t ‚ Wd  QXWd  QXWd  QXWd  t j | ƒ Xd  S(	   Nc          S` s   d d  l  }  |  j ƒ  S(   Ni    (   RJ   t   get_scheduler_address(   RJ   (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   check_scheduler	  s    s   scheduler_info.pyR`   s   dask-schedulers   --scheduler-files	   --preloadRd   R   (   t   tempfilet   mkdtempRS   RT   t   joinRW   t   writet   PRELOAD_TEXTR
   R   R   t   run_on_schedulerRe   RA   R   t   shutilt   rmtree(   R   Rm   t   tmpdirRT   R   Rg   R   (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   test_preload_file  s    	7c         C` s  d „  } t  j ƒ  } zõ t j j | d ƒ } t | d ƒ  } | j t ƒ Wd  QXt j j	 ƒ  } d | k r† | d | d | d <n
 | | d <t
 ƒ  n } t d d | d d	 g d
 | ƒD t d | d |  ƒ ( } | j | ƒ | j j k s÷ t ‚ Wd  QXWd  QXWd  QXWd  t j | ƒ Xd  S(   Nc          S` s   d d  l  }  |  j ƒ  S(   Ni    (   RJ   Rl   (   RJ   (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyRm     s    s   scheduler_info.pyR`   t
   PYTHONPATHt   :s   dask-schedulers   --scheduler-files	   --preloadRJ   t   envRd   R   (   Rn   Ro   RS   RT   Rp   RW   Rq   Rr   t   environt   copyR
   R   R   Rs   Re   RA   R   Rt   Ru   (   R   Rm   Rv   RT   R   Rz   Rg   R   (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   test_preload_module  s*    	
	
7sô   
import click
_config = {}

@click.command()
@click.option("--passthrough", type=str, default="default")
def dask_setup(scheduler, passthrough):
    _config["passthrough"] = passthrough

def get_passthrough():
    return _config["passthrough"]
c         C` så   d „  } t  j ƒ  } z» t j j | d ƒ } t | d ƒ  } | j t ƒ Wd  QXt ƒ  r } t	 | ƒ t
 d d | d | d d g ƒ > t d	 | d
 |  ƒ " } | j | ƒ d k s½ t ‚ Wd  QXWd  QXWd  QXWd  t j | ƒ Xd  S(   Nc          S` s   d d  l  }  |  j ƒ  S(   Ni    (   t   passthrough_infot   get_passthrough(   R~   (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   check_passthroughK  s    s   passthrough_info.pyR`   s   dask-schedulers   --scheduler-files	   --preloads   --passthrought   foobarRd   R   (   Rn   Ro   RS   RT   Rp   RW   Rq   t   PRELOAD_COMMAND_TEXTR
   R2   R   R   Rs   R   Rt   Ru   (   R   R€   Rv   RT   R   Rg   R   (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   test_preload_commandJ  s&    	
1c         C` sñ   d „  } t  j ƒ  } zÇ t j j | d ƒ } t | d ƒ  } | j t ƒ Wd  QXt ƒ  ~ } t	 | ƒ t
 d d | d | g d t j d t j ƒ> t d	 | d
 |  ƒ " } | j | ƒ d k sÉ t ‚ Wd  QXWd  QXWd  QXWd  t j | ƒ Xd  S(   Nc          S` s   d d  l  }  |  j ƒ  S(   Ni    (   R~   R   (   R~   (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyR€   j  s    s   passthrough_info.pyR`   s   dask-schedulers   --scheduler-files	   --preloadt   stdoutR#   Rd   R   t   default(   Rn   Ro   RS   RT   Rp   RW   Rq   R‚   R
   R2   R   R+   R„   R#   R   Rs   R   Rt   Ru   (   R   R€   Rv   RT   R   t   fn2R   (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   test_preload_command_defaulti  s    	
	1(2   t
   __future__R    R   R   R   R!   RS   R   R.   Rt   R+   Rn   R   R   t   tornadoR   t   distributedR   R   t   distributed.utilsR   R	   R
   t   distributed.utils_testR   R   R   R   t   distributed.metricsR   R   R(   R7   R9   t   markt   skipifR,   RZ   R;   R?   RQ   Rb   Rh   Rk   Rr   Rw   R}   R‚   Rƒ   R‡   (    (    (    sH   lib/python2.7/site-packages/distributed/cli/tests/test_dask_scheduler.pyt   <module>   sB   						% 			!	
			,	