σ
O'^c           @@  s(  d  Z  d d l m Z d d l Z d d l Z d d l Z d d l Z d d l m Z m	 Z	 d d l
 m Z m Z d d l m Z d d l m Z d d	 l m Z d
 Z d Z d Z d Z d e j f d     YZ d e j e j f d     YZ d e j f d     YZ d e j f d     YZ d S(   s   
kombu.transport.librabbitmq
===========================

`librabbitmq`_ transport.

.. _`librabbitmq`: http://pypi.python.org/librabbitmq/

i    (   t   absolute_importN(   t   ChannelErrort   ConnectionError(   t   itemst   values(   t   get_manager(   t   version_string_as_tuplei   (   t   bases   
    librabbitmq version too old to detect RabbitMQ version information
    so make sure you are using librabbitmq 1.5 when using rabbitmq > 3.3
i(  i'  sA   ssl not supported by librabbitmq, please use pyamqp:// or stunnelt   Messagec           B@  s   e  Z d    Z RS(   c         C@  sh   t  t |   j | d | d | d | d | j d  d | j d  d | j d  d | j d  d  S(   Nt   bodyt   delivery_infot
   propertiest   delivery_tagt   content_typet   content_encodingt   headers(   t   superR   t   __init__t   get(   t   selft   channelt   propst   infoR	   (    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyR   '   s    (   t   __name__t
   __module__R   (    (    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyR   %   s   t   Channelc           B@  s&   e  Z e Z d d d d d d   Z RS(   c         C@  sK   | d k	 r | n i  } | j i | d 6| d 6| d 6| d 6 | | f S(   s%   Encapsulate data into a AMQP message.R   R   R   t   priorityN(   t   Nonet   update(   R   R	   R   R   R   R   R   (    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyt   prepare_message6   s    N(   R   R   R   R   R   (    (    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyR   3   s   t
   Connectionc           B@  s   e  Z e Z e Z RS(    (   R   R   R   R   (    (    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyR   B   s   t	   Transportc           B@  sΠ   e  Z e Z e Z e Z e j j	 e
 e j e e f Z	 e j j e f Z d  Z d Z e Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d	   Z d
   Z d   Z d   Z e  d    Z! RS(   t   amqpt   librabbitmqc         K@  sL   | |  _  | j d  p |  j |  _ | j d  p9 |  j |  _ d  |  _ d  S(   Nt   default_portt   default_ssl_port(   t   clientR   R"   R#   R   t   _Transport__reader(   R   R$   t   kwargs(    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyR   Y   s
    	c         C@  s   t  j S(   N(   R    t   __version__(   R   (    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyt   driver_version`   s    c         C@  s
   | j    S(   N(   R   (   R   t
   connection(    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyt   create_channelc   s    c         K@  s   | j  |   S(   N(   t   drain_events(   R   R)   R&   (    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyR+   f   s    c         C@  sό   |  j  } xB t |  j  D]1 \ } } t | | d	  s t | | |  q q W| j rf t t   n  t	 i | j
 d 6| j d 6| j d 6| j d 6| j d 6| j d 6| j d 6| j d 6| j pΘ i   } |  j |   } |  j  | _  | j |  j  _ | S(
   s(   Establish connection to the AMQP broker.t   hostt   useridt   passwordt   virtual_hostt   login_methodt   insistt   sslt   connect_timeoutN(   R$   R   t   default_connection_paramst   getattrR   t   setattrR2   t   NotImplementedErrort   NO_SSL_ERRORt   dictR,   R-   R.   R/   R0   R1   R3   t   transport_optionsR   R+   (   R   t   conninfot   namet   default_valuet   optst   conn(    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyt   establish_connectioni   s(    		







c         C@  s   d |  j _ | j   d S(   s!   Close the AMQP broker connection.N(   R   R$   R+   t   close(   R   R)   (    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyt   close_connection   s    c         C@  s   | d  k	 rw x  t | j  D] } d  | _ q Wy t j | j    Wn t k
 rY n X| j j   | j	 j   n  d  |  j
 _ d  |  _
 d  S(   N(   R   R   t   channelsR)   t   osRA   t   filenot   OSErrort   cleart	   callbacksR$   R+   (   R   R)   R   (    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyt   _collect   s    c         C@  s   | j  S(   N(   t	   connected(   R   R)   (    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyt   verify_connection   s    c         C@  s#   | j  | j   |  j | |  d  S(   N(   t
   add_readerRE   t   on_readable(   R   R)   t   loop(    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyt   register_with_event_loop   s    c         O@  s   t  |  j | |  S(   N(   R   R$   (   R   t   argsR&   (    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyR      s    c         C@  sa   y | j  } Wn$ t k
 r3 t j t t   n* X| j d  d k r] t | d  d k  St S(   Nt   productt   RabbitMQt   versioni   (   i   i   (	   t   server_propertiest   AttributeErrort   warningst   warnt   UserWarningt	   W_VERSIONR   R   t   True(   R   R)   R   (    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyt   qos_semantics_matches_spec   s    c         C@  s?   i d d 6d d 6|  j  j r& |  j n |  j d 6d d 6d d 6S(	   Nt   guestR-   R.   t   portt	   localhostt   hostnamet   AMQPLAINR0   (   R$   R2   R#   R"   (   R   (    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyR4   §   s    
("   R   R   R   t   DEFAULT_PORTR"   t   DEFAULT_SSL_PORTR#   R   R   t   connection_errorsR   t   sockett   errort   IOErrorRF   t   channel_errorsR   t   driver_typet   driver_nameRZ   t   supports_evR   R(   R*   R+   R@   RB   RI   RK   RO   R   R[   t   propertyR4   (    (    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyR   G   s*   												
(   t   __doc__t
   __future__R    RD   Rd   RV   R!   R    R   R   t
   kombu.fiveR   R   t   kombu.utils.amq_managerR   t   kombu.utils.textR   t    R   RY   Ra   Rb   R8   R   R   t
   StdChannelR   R   (    (    (    s=   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/librabbitmq.pyt   <module>	   s$   