ó
O'—^c           @@  s2  d  Z  d d l m Z d d l Z d d l Z d d l Z d d l Z y d d l Z	 Wn e
 k
 ro d Z	 n Xd d l m Z d d l m Z d d l m Z 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 m Z d d d d d g Z e d d g ƒ Z  e d d g ƒ Z! e j" j# d ƒ rKd „  Z$ n	 e j% Z$ e	 p]e Z e j& Z' e( e j) j* d d ƒ ƒ Z+ e d d3 ƒ Z, e e- f e f d „ ƒ Z. e' d „ Z/ d „  Z0 d e1 f d  „  ƒ  YZ2 e2 ƒ  Z3 e3 j4 Z5 Z4 e3 j% Z6 Z% e3 j7 Z7 e3 j8 Z8 d! „  Z9 d" „  Z: d# „  Z; e j< d d$ k rHd% „  Z= n e/ Z= d& „  Z> d' „  Z? e: ƒ  e> ƒ  e; ƒ  e? ƒ  e3 j@ d( ƒ i e: d( 6e> d 6e; d) 6e? d* 6e: d+ 6e; d, 6e> d- 6e? d. 6ZA d d) d* g d/ „ ZB d( g d0 „ ZC eC ƒ  x* e d1 ƒ D] \ ZD ZE e7 eD jF eE Œ qÿWe3 jG d2 „ ZH d S(4   sD   
kombu.serialization
===================

Serialization utilities.

i    (   t   absolute_importN(   t
   namedtuple(   t   contextmanageri   (   t   ContentDisallowedt   DecodeErrort   EncodeErrort   SerializerNotInstalled(   t   BytesIOt   reraiset   text_t(   t   entrypoints(   t   str_to_bytest   bytes_tt   picklet   loadst   dumpst   registert
   unregistert   binarys
   ascii-8bits   application/datas   application/textt   javac         C@  s   t  j | ƒ |  ƒ d S(   Ni    (   t   codecst
   getdecoder(   t   tt   coding(    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   _decode$   s    t   PICKLE_PROTOCOLi   t   codect   content_typet   content_encodingt   encoderc         c@  sV   y	 d  VWnF | k
 r ‚  n3 | k
 rQ } t  |  |  | ƒ t j ƒ  d ƒ n Xd  S(   Ni   (   R   t   syst   exc_info(   t   wrappert   includet   excludet   exc(    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   _reraise_errors3   s    	c         C@  s   | t  |  ƒ ƒ S(   N(   R   (   t   st   load(    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   pickle_loads>   s    c         C@  s   |  r d |  | f S| S(   Ns   %s (%s)(    (   t   firstt   second(    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   parenthesize_aliasC   s    t   SerializerRegistryc           B@  sz   e  Z d  Z d „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d d „ Z
 e
 Z d e e d	 „ Z e Z d
 „  Z RS(   s2   The registry keeps track of serialization methods.c         C@  sO   i  |  _  i  |  _ d  |  _ d  |  _ d  |  _ t ƒ  |  _ i  |  _ i  |  _	 d  S(   N(
   t	   _encoderst	   _decoderst   Nonet   _default_encodet   _default_content_typet   _default_content_encodingt   sett   _disabled_content_typest   type_to_namet   name_to_type(   t   self(    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   __init__J   s    						s   utf-8c         C@  sV   | r" t  | | | ƒ |  j | <n  | r8 | |  j | <n  | |  j | <| |  j | <d  S(   N(   R   R,   R-   R4   R5   (   R6   t   nameR   t   decoderR   R   (    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyR   T   s    c         C@  s0   d | k r |  j  | } n  |  j j | ƒ d  S(   Nt   /(   R5   R3   t   discard(   R6   R8   (    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   enable_   s    c         C@  s0   d | k r |  j  | } n  |  j j | ƒ d  S(   NR:   (   R5   R3   t   add(   R6   R8   (    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   disabled   s    c         C@  sŠ   y] |  j  | } |  j j | d  ƒ |  j j | d  ƒ |  j j | d  ƒ |  j  j | d  ƒ Wn& t k
 r… t d j | ƒ ƒ ‚ n Xd  S(   Ns$   No encoder/decoder installed for {0}(	   R5   R-   t   popR.   R,   R4   t   KeyErrorR   t   format(   R6   R8   R   (    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyR   i   s    c         C@  sP   y# |  j  | \ |  _ |  _ |  _ Wn& t k
 rK t d j | ƒ ƒ ‚ n Xd S(   s  
        Set the default serialization method used by this library.

        :param name: The name of the registered serialization method.
            For example, `json` (default), `pickle`, `yaml`, `msgpack`,
            or any custom methods registered using :meth:`register`.

        :raises SerializerNotInstalled: If the serialization method
            requested is not available.
        s   No encoder installed for {0}N(   R,   R0   R1   R/   R@   R   RA   (   R6   R8   (    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   _set_default_serializert   s
    #c         C@  s  | d k r t  | ƒ S| rG |  j j | ƒ rG t d j | ƒ ƒ ‚ n  | rj t | t ƒ rj d d | f S| rµ t | t ƒ rµ t t	 d d ƒ | j
 d ƒ } Wd  QXd d | f S| rÔ |  j | \ } } } n |  j } |  j } |  j } t t	 ƒ  | | ƒ } Wd  QX| | | f S(	   Nt   raws   No encoder installed for {0}s   application/dataR   R"   s   utf-8s
   text/plain(    (   t
   raw_encodeR,   t   getR   RA   t
   isinstanceR   R	   R$   R   t   encodeR/   R0   R1   (   R6   t   datat
   serializert   payloadR   R   R   (    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyR   †   s&    
			c         C@  s	  | p	 d } | d  k	 rH | | k rs | | k rs |  j | d ƒ ‚ qs n+ | |  j k rs | rs |  j | d ƒ ‚ n  | p| d j ƒ  } | r|  j j | ƒ } | rÃ t t ƒ  | | ƒ SWd  QXn  | t k rt	 | t
 ƒ rt t ƒ  t | | ƒ SWd  QXqn  | S(   Ns   application/datat	   untrustedt   disableds   utf-8(   R.   t   _for_untrusted_contentR3   t   lowerR-   RE   R$   R   t   SKIP_DECODERF   R	   R   (   R6   RH   R   R   t   acceptt   forcet   _trusted_contentt   decode(    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyR   ¨   s$    c         C@  s.   t  d j | t |  j j | | ƒ | ƒ ƒ ƒ S(   Ns/   Refusing to deserialize {0} content of type {1}(   R   RA   R*   R4   RE   (   R6   t   ctypet   why(    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyRM   À   s    N(   t   __name__t
   __module__t   __doc__R7   R   R<   R>   R   RB   R.   R   RG   t   Falset   TRUSTED_CONTENTR   RS   RM   (    (    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyR+   G   s   	
				 c         C@  s_   d } |  } t  | t ƒ rL d } t t d d ƒ | j | ƒ } Wd QXn d } | | | f S(   s   Special case serializer.s   application/datas   utf-8R"   NR   (    (   RF   R	   R$   R   RG   (   RH   R   RJ   R   (    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyRD   '  s    c          @  sH   d d l  m ‰  m }  ‡  f d †  } t j d |  | d d d d ƒd	 S(
   s2   Register a encoder/decoder for JSON serialization.i    (   R   R   c         @  s+   t  |  t ƒ r! |  j d ƒ }  n  ˆ  |  ƒ S(   Ns   utf-8(   RF   R   RS   (   t   obj(   t
   json_loads(    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   _loads8  s    t   jsonR   s   application/jsonR   s   utf-8N(   t   anyjsonR   R   t   registryR   (   t
   json_dumpsR]   (    (   R\   s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   register_json4  s
    c          C@  sl   y5 d d l  }  t j d |  j |  j d d d d ƒWn0 t k
 rg d „  } t j d d | d ƒ n Xd S(	   s²   Register a encoder/decoder for YAML serialization.

    It is slower than JSON, but allows for more data types
    to be serialized. Useful if you need to send data such as datesi    Nt   yamlR   s   application/x-yamlR   s   utf-8c          _@  s   t  d ƒ ‚ d S(   sO   In case a client receives a yaml message, but yaml
            isn't installed.s9   No decoder installed for YAML. Install the PyYAML libraryN(   R   (   t   argst   kwargs(    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   not_availableN  s    (   Rc   R`   R   t	   safe_dumpt	   safe_loadt   ImportErrorR.   (   Rc   Rf   (    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   register_yamlB  s    	i   c         C@  s   t  t |  ƒ ƒ S(   N(   R'   R   (   R%   (    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   unpickleX  s    c          C@  s2   t  j d „ }  t j d |  t d d d d ƒd S(   sJ   The fastest serialization method, but restricts
    you to python clients.c         S@  s   | |  d t  ƒS(   Nt   protocol(   t   pickle_protocol(   R[   t   dumper(    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   pickle_dumpsc  s    R   R   s   application/x-python-serializeR   R   N(   R   R   R`   R   Rk   (   Ro   (    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   register_pickle_  s    c          @  sÃ   d }  } yi d d l } | j d k r_ d d l m ‰  m ‰ ‡  f d †  }  ‡ f d †  } n d „  } | }  } Wn* t t f k
 rŸ d „  } | }  } n Xt j d	 |  | d
 d d d ƒd S(   s#   See http://msgpack.sourceforge.net/i    Ni   (   t   packbt   unpackbc         @  s   ˆ  |  d t  ƒS(   Nt   use_bin_type(   t   True(   R%   (   Rq   (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   packs  s    c         @  s   ˆ  |  d d ƒS(   Nt   encodings   utf-8(    (   R%   (   Rr   (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   unpackv  s    c          _@  s   t  d ƒ ‚ d  S(   Ns(   msgpack requires msgpack-python >= 0.4.0(   R   (   Rd   Re   (    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   version_mismatchy  s    c          _@  s   t  d ƒ ‚ d  S(   NsK   No decoder installed for msgpack. Please install the msgpack-python library(   R   (   Rd   Re   (    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyRf   ~  s    t   msgpackR   s   application/x-msgpackR   R   (   i    i   (	   R.   Ry   t   versionRq   Rr   Ri   t
   ValueErrorR`   R   (   Ru   Rw   Ry   Rx   Rf   (    (   Rq   Rr   s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   register_msgpackk  s     
		R^   Rc   Ry   s   application/jsons   application/x-yamls   application/x-python-serializes   application/x-msgpackc         C@  s:   x3 |  D]+ } y t  j | ƒ Wq t k
 r1 q Xq Wd S(   sØ   Enable serializers that are considered to be unsafe.

    Will enable ``pickle``, ``yaml`` and ``msgpack`` by default,
    but you can also specify a list of serializers (by name or content type)
    to enable.

    N(   R`   R<   R@   (   t   choicest   choice(    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   enable_insecure_serializersŸ  s
    c         C@  sR   x t  j D] } t  j | ƒ q
 W|  d k	 rN x |  D] } t  j | ƒ q4 Wn  d S(   sG  Disable untrusted serializers.

    Will disable all serializers except ``json``
    or you can specify a list of deserializers to allow.

    .. note::

        Producers will still be able to serialize data
        in these formats, but consumers will not accept
        incoming data using the untrusted content types.

    N(   R`   R-   R>   R.   R<   (   t   allowedR8   (    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   disable_insecure_serializers®  s
    s   kombu.serializersc         @  s*   |  d  k	 r& t ‡  f d †  |  Dƒ ƒ S|  S(   Nc         3@  s+   |  ]! } d  | k r | n ˆ  | Vq d S(   R:   N(    (   t   .0t   n(   R5   (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pys	   <genexpr>Ì  s    (   R.   R2   (   t   lR5   (    (   R5   s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   prepare_accept_contentÊ  s    (   R   R   R   (I   RX   t
   __future__R    R   t   osR   R   t   pypicklet   cPicklet   cpickleRi   R.   t   collectionsR   t
   contextlibR   t
   exceptionsR   R   R   R   t   fiveR   R   R	   t   utilsR
   t   utils.encodingR   R   t   __all__t	   frozensetRO   RZ   t   platformt
   startswithR   RS   R&   t   pickle_loadt   intt   environRE   Rm   R   t	   ExceptionR$   R'   R*   t   objectR+   R`   RG   R   R   R   R   RD   Rb   Rj   t   version_infoRk   Rp   R|   RB   t
   _setupfunsR   R   t   epRd   R8   R5   R…   (    (    (    s5   /tmp/pip-unpacked-wheel-UAnTfW/kombu/serialization.pyt   <module>   s~   
"				ƒ	!	
						
