ó
ßüÚ\c           @` s·   d  d l  m Z m Z m Z d  d l Z d  d l Z d d l m Z e j j	 d ƒ Z
 e d „ Z d „  Z d „  Z d d	 „ Z d d
 „ Z e d „ Z d „  Z d „  Z d „  Z d S(   i    (   t   print_functiont   divisiont   absolute_importNi   (   t   registrys   distributed.comm.default-schemec         C` s‚   t  |  t j ƒ s+ t d |  j j ƒ ‚ n  |  j d ƒ \ } } } | ri | ri d |  } t | ƒ ‚ n  | sx t } n  | | f S(   sÎ   
    Split address into its scheme and scheme-dependent location string.

    >>> parse_address('tcp://127.0.0.1')
    ('tcp', '127.0.0.1')

    If strict is set to true the address must have a scheme.
    s   expected str, got %rs   ://sK   Invalid url scheme. Must include protocol like tcp://localhost:8000. Got %s(	   t
   isinstancet   sixt   string_typest	   TypeErrort	   __class__t   __name__t
   rpartitiont
   ValueErrort   DEFAULT_SCHEME(   t   addrt   strictt   schemet   sept   loct   msg(    (    s:   lib/python2.7/site-packages/distributed/comm/addressing.pyt   parse_address   s    		c         C` s   d |  | f S(   sb   
    Undo parse_address().

    >>> unparse_address('tcp', '127.0.0.1')
    'tcp://127.0.0.1'
    s   %s://%s(    (   R   R   (    (    s:   lib/python2.7/site-packages/distributed/comm/addressing.pyt   unparse_address%   s    c         C` s   t  t |  ƒ Œ  S(   s¶   
    Canonicalize address, adding a default scheme if necessary.

    >>> normalize_address('tls://[::1]')
    'tls://[::1]'
    >>> normalize_address('[::1]')
    'tcp://[::1]'
    (   R   R   (   R   (    (    s:   lib/python2.7/site-packages/distributed/comm/addressing.pyt   normalize_address/   s    	c         ` s÷   t  ˆ  t ƒ r ˆ  S‡  f d †  } ‡  ‡ f d †  } ˆ  j d ƒ r§ ˆ  d j d ƒ \ } } } | so | ƒ  n  | s | ƒ  } qç | j d ƒ sš | ƒ  n  | d } n@ ˆ  j d ƒ \ } } } | sÑ | ƒ  } n d | k rç | ƒ  n  | t | ƒ f S(   sB   
    Parse an endpoint address given in the form "host:port".
    c           ` s   t  d ˆ  f ƒ ‚ d  S(   Ns   invalid address %r(   R   (    (   t   address(    s:   lib/python2.7/site-packages/distributed/comm/addressing.pyt   _failB   s    c           ` s&   ˆ d  k r" t d ˆ  f ƒ ‚ n  ˆ S(   Ns!   missing port number in address %r(   t   NoneR   (    (   R   t   default_port(    s:   lib/python2.7/site-packages/distributed/comm/addressing.pyt   _defaultE   s    t   [i   t   ]t   :(   R   t   tuplet
   startswitht	   partitiont   int(   R   R   R   R   t   hostR   t   tailt   port(    (   R   R   s:   lib/python2.7/site-packages/distributed/comm/addressing.pyt   parse_host_port;   s&    


c         C` sE   d |  k r) |  j  d ƒ r) d |  }  n  | r= d |  | f S|  Sd S(   s!   
    Undo parse_host_port().
    R   R   s   [%s]s   %s:%sN(   R   (   R"   R$   (    (    s:   lib/python2.7/site-packages/distributed/comm/addressing.pyt   unparse_host_porta   s
    c         C` sc   t  |  d | ƒ\ } } t j | ƒ } y | j | ƒ SWn$ t k
 r^ t d |  f ƒ ‚ n Xd S(   s  
    Get a (host, port) tuple out of the given address.
    For definition of strict check parse_address
    ValueError is raised if the address scheme doesn't allow extracting
    the requested information.

    >>> get_address_host_port('tcp://1.2.3.4:80')
    ('1.2.3.4', 80)
    R   s6   don't know how to extract host and port for address %rN(   R   R   t   get_backendt   get_address_host_portt   NotImplementedErrorR   (   R   R   R   R   t   backend(    (    s:   lib/python2.7/site-packages/distributed/comm/addressing.pyR(   m   s    
c         C` s.   t  |  ƒ \ } } t j | ƒ } | j | ƒ S(   s  
    Return a hostname / IP address identifying the machine this address
    is located on.

    In contrast to get_address_host_port(), this function should always
    succeed for well-formed addresses.

    >>> get_address_host('tcp://1.2.3.4:80')
    '1.2.3.4'
    (   R   R   R'   t   get_address_host(   R   R   R   R*   (    (    s:   lib/python2.7/site-packages/distributed/comm/addressing.pyR+      s    c         C` s7   t  |  ƒ \ } } t j | ƒ } t | | j | ƒ ƒ S(   sh  
    Get a local listening address suitable for reaching *addr*.

    For instance, trying to reach an external TCP address will return
    a local TCP address that's routable to that external address.

    >>> get_local_address_for('tcp://8.8.8.8:1234')
    'tcp://192.168.1.68'
    >>> get_local_address_for('tcp://127.0.0.1:1234')
    'tcp://127.0.0.1'
    (   R   R   R'   R   t   get_local_address_for(   R   R   R   R*   (    (    s:   lib/python2.7/site-packages/distributed/comm/addressing.pyR,   ‘   s    c         C` s7   t  |  ƒ \ } } t j | ƒ } t | | j | ƒ ƒ S(   s  
    Apply scheme-specific address resolution to *addr*, replacing
    all symbolic references with concrete location specifiers.

    In practice, this can mean hostnames are resolved to IP addresses.

    >>> resolve_address('tcp://localhost:8786')
    'tcp://127.0.0.1:8786'
    (   R   R   R'   R   t   resolve_address(   R   R   R   R*   (    (    s:   lib/python2.7/site-packages/distributed/comm/addressing.pyR-   ¢   s    
(   t
   __future__R    R   R   R   t   daskt    R   t   configt   getR   t   FalseR   R   R   R   R%   R&   R(   R+   R,   R-   (    (    (    s:   lib/python2.7/site-packages/distributed/comm/addressing.pyt   <module>   s   	
	&		