ó
ßüÚ\c           @` s4  d  d l  m Z m Z m Z d  d l Z d  d l Z d  d l Z y d  d l m Z Wn! e	 k
 rw d  d l
 m Z n Xd d l m Z m Z m Z d d l m Z m Z m Z m Z m Z d d l m Z m Z m Z d d	 l m Z e Z e j e ƒ Z d d
 d d „ Z e d d „ Z  d „  Z! d „  Z" d S(   i    (   t   print_functiont   divisiont   absolute_importN(   t   reducei   (   t   compressionst   maybe_compresst
   decompress(   t	   serializet   deserializet	   Serializet
   Serializedt   extract_serialize(   t   frame_split_sizet   merge_framest   msgpack_optsi   (   t   nbytest   messagec         ` sá  y³i  } t  |  t t f ƒ r6 t |  ƒ \ }  } } n  t |  ƒ \ } } | sX | | f Sd „  | j ƒ  Dƒ } ‡  ‡ ‡ f d †  | j ƒ  Dƒ } i i  d 6g  d 6t | ƒ d 6}	 g  }
 xÓ | j ƒ  D]Å \ } \ } } d | k rþ t t t | ƒ ƒ | d <n  d | k rMt	 | ƒ } | r:t
 t t | ƒ Œ  \ } } n g  } | | d <n  t | ƒ | d <| |	 d | <|	 d j | ƒ |
 j | ƒ qÄ Wx„ | j ƒ  D]v \ } \ } } d | k rÔt t t | ƒ ƒ | d <n  t | ƒ | d <| |	 d | <|	 d j | ƒ |
 j | ƒ qšWx{ t |
 ƒ D]m \ } } t | ƒ t k r!| j d k r!y | j d
 ƒ } Wn t k
 r€| j ƒ  } n X| |
 | <q!q!W| | t j |	 d t ƒg |
 SWn' t k
 rÜt j d d t ƒ‚  n Xd S(   sC    Transform Python message to bytestream suitable for communication c         S` s=   i  |  ]3 \ } } t  | ƒ t k r | j | j f | “ q S(    (   t   typeR
   t   headert   frames(   t   .0t   keyt   value(    (    s8   lib/python2.7/site-packages/distributed/protocol/core.pys
   <dictcomp>%   s   		c      
   ` sL   i  |  ]B \ } } t  | ƒ t k r t | j d  ˆ d ˆ d ˆ  ƒ| “ q S(   t   serializerst   on_errort   context(   R   R	   R   t   data(   R   R   R   (   R   R   R   (    s8   lib/python2.7/site-packages/distributed/protocol/core.pys
   <dictcomp>+   s   		t   headerst   keyst   bytestringst   lengthst   compressiont   counti   t   bt   use_bin_types   Failed to Serializet   exc_infoN(   i   (   t
   isinstancet   listt   dictR   t   dumps_msgpackt   itemst   tuplet   mapR   R   t   zipR   t   lent   appendt   extendt	   enumerateR   t
   memoryviewt   stridest   castt	   TypeErrort   tobytest   msgpackt   dumpst   Truet	   Exceptiont   loggert   critical(   t   msgR   R   R   R   R   t   small_headert   small_payloadt   preR   t
   out_framesR   t   headR   R   t   it   frame(    (   R   R   R   s8   lib/python2.7/site-packages/distributed/protocol/core.pyR6      s^    
!!	c         ` sÄ  |  d d d … }  t  |  t ƒ s1 t |  ƒ }  n  ye|  j ƒ  } |  j ƒ  } t | | ƒ } |  se | S|  j ƒ  } t j | d t t } | d } | d } t | d ƒ }	 xá | D]Ù }
 | |
 } | d } | r |  | d d … d d d … } |  | 3n g  } | s|
 |	 k r]d | k r6t
 | | ƒ } n  t | | ƒ } t | | d	 | ƒ} n t | | ƒ } ‡  f d
 †  ‰  ˆ  |
 | | ƒ } q´ W| SWn' t k
 r¿t j d d t ƒ‚  n Xd S(   s-    Transform bytestream back into Python value Niÿÿÿÿt   use_listR   R   R   R    R   t   deserializersc         ` sn   |  rd t  t j |  d  | ƒ } t | t ƒ rS t | ƒ } ˆ  |  d  | | ƒ } n  | | |  d <n | } | S(   s?   Inverse of get_in, but does type promotion in the case of listsiÿÿÿÿ(   R   t   operatort   getitemR$   R)   R%   (   R   t   collt   valt   holder(   t   put_in(    s8   lib/python2.7/site-packages/distributed/protocol/core.pyRJ   ‚   s    s   Failed to deserializeR#   (   R$   R%   t   popt   loads_msgpackR5   t   loadst   FalseR   t   sett   NoneR   R   t   _deserializeR
   R8   R9   R:   R7   (   R   R   RD   R<   R=   R;   R   R   R   R   R   R@   R    t   fsR   (    (   RJ   s8   lib/python2.7/site-packages/distributed/protocol/core.pyRM   _   sB    



!c         C` sn   i  } t  j |  d t ƒ} t | ƒ \ } } | r@ | | d <n  | r^ t  j | d t ƒ} n d } | | g S(   s    Dump msg into header and payload, both bytestrings

    All of the message must be msgpack encodable

    See Also:
        loads_msgpack
    R"   R   t    (   R5   R6   R7   R   (   R;   R   t   payloadt   fmtt   header_bytes(    (    s8   lib/python2.7/site-packages/distributed/protocol/core.pyR'   –   s    c         C` sŸ   |  r! t  j |  d t t }  n i  }  |  j d ƒ r‰ y" t |  d d } | | ƒ } Wq‰ t k
 r… t d t |  d ƒ ƒ ‚ q‰ Xn  t  j | d t t S(   s`    Read msgpack header and payload back to Python object

    See Also:
        dumps_msgpack
    RC   R   R   s9   Data is compressed as %s but we don't have this installed(	   R5   RM   RN   R   t   getR   t   KeyErrort
   ValueErrort   str(   R   RT   R   (    (    s8   lib/python2.7/site-packages/distributed/protocol/core.pyRL   ­   s    (#   t
   __future__R    R   R   t   loggingRE   R5   t   cytoolzR   t   ImportErrort   toolzR   R   R   R   R   R   R	   R
   R   t   utilsR   R   R   R   RQ   t	   getLoggert   __name__R9   RP   R6   R7   RM   R'   RL   (    (    (    s8   lib/python2.7/site-packages/distributed/protocol/core.pyt   <module>   s"   (G7	