ó
O'—^c           @@  s-  d  Z  d d l m Z d d l Z d d l Z d d l m Z m Z d d l Z d d l	 m
 Z
 m Z d d l m Z d d l m Z m Z d d	 l m Z y$ d d
 l m Z d d l m Z Wn e k
 rÝ d Z Z n Xe d „  e j Dƒ ƒ Z d e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d S(   sP   
kombu.transport.SLMQ
====================

SoftLayer Message Queue transport.

i    (   t   absolute_importN(   t   loadst   dumps(   t   Emptyt   text_t(   t   cached_property(   t   bytes_to_strt   safe_stri   (   t   virtual(   t
   get_client(   t   ResponseErrorc         c@  s-   |  ]# } | d  k r t  | ƒ d f Vq d S(   t   _i_   N(   t   ord(   t   .0t   c(    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pys	   <genexpr>   s    t   Channelc           B@  sã   e  Z d  Z d Z d Z i  Z e ƒ  Z d „  Z	 d „  Z
 d „  Z e d „ Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z RS(   i  s   kombu%(vhost)sc         O@  se   t  d  k r t d ƒ ‚ n  t t |  ƒ j | | Ž  |  j j ƒ  } x | D] } | |  j | <qJ Wd  S(   Ns7   SLMQ transport requires the softlayer_messaging library(	   R	   t   Nonet   ImportErrort   superR   t   __init__t   slmqt   queuest   _queue_cache(   t   selft   argst   kwargsR   t   queue(    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyR   )   s    c         O@  s8   | r |  j  j | ƒ n  t t |  ƒ j | | | | Ž S(   N(   t   _noack_queuest   addR   R   t   basic_consume(   R   R   t   no_ackR   R   (    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyR   3   s    c         C@  sE   | |  j  k r/ |  j | } |  j j | ƒ n  t t |  ƒ j | ƒ S(   N(   t
   _consumerst   _tag_to_queueR   t   discardR   R   t   basic_cancel(   R   t   consumer_tagR   (    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyR"   9   s    c         C@  s   t  t | ƒ ƒ j | ƒ S(   s4   Format AMQP queue name into a valid SLQS queue name.(   R   R   t	   translate(   R   t   namet   table(    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyt   entity_name?   s    c         K@  sŒ   |  j  |  j | ƒ } y |  j | SWn` t k
 r‡ y |  j j | d |  j ƒWn t k
 re n X|  j j | ƒ } |  j | <| SXd S(   s   Ensures a queue exists in SLQS.t   visibility_timeoutN(	   R'   t   queue_name_prefixR   t   KeyErrorR   t   create_queueR(   R
   R   (   R   R   R   t   q(    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyt
   _new_queueC   s    	c         G@  sX   |  j  | ƒ } |  j j | d ƒ |  j j | ƒ j d t ƒ t t	 |  ƒ j
 | ƒ d S(   s   delete queue by name.t   forceN(   R'   R   t   popR   R   R   t   deletet   TrueR   R   t   _delete(   R   R   R   t
   queue_name(    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyR2   Q   s    c         K@  s&   |  j  | ƒ } | j t | ƒ ƒ d S(   s   Put message onto queue.N(   R-   t   pushR   (   R   R   t   messageR   R,   (    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyt   _putX   s    c         C@  s°   |  j  | ƒ } | j d ƒ } | d r£ | d d } t t | d ƒ ƒ } | |  j k ru | j | d ƒ j ƒ  n* | d d j i | d d 6| j d	 6ƒ | St	 ƒ  ‚ d
 S(   s/   Try to retrieve a single message off ``queue``.i   t   itemsi    t   bodyt   idt
   propertiest   delivery_infot   slmq_message_idt   slmq_queue_nameN(
   R-   R/   R   R   R   R5   R0   t   updateR%   R   (   R   R   R,   t   rst   mt   payload(    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyt   _get]   s    
c         C@  se   |  j  j | ƒ j } y | d } Wn t k
 r6 n X|  j | | d ƒ t t |  ƒ j | ƒ d  S(   NR=   R<   (   t   qost   getR;   R*   t   delete_messageR   R   t	   basic_ack(   R   t   delivery_tagR;   R   (    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyRF   l   s    c         C@  s   |  j  | ƒ j ƒ  d S(   s)   Return the number of messages in a queue.t   message_count(   R-   t   detail(   R   R   (    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyt   _sizev   s    c         C@  s{   |  j  | ƒ } d } | j d ƒ } xP | d rv x0 | d D]$ } |  j | | d ƒ | d 7} q< W| j d ƒ } q' W| S(   s'   Delete all current messages in a queue.i    i
   R7   R9   i   (   R-   R/   RE   (   R   R   R,   t   nt   lR@   (    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyt   _purgez   s    c         C@  s.   |  j  j |  j | ƒ ƒ } | j | ƒ j ƒ  S(   N(   R   R   R'   R5   R0   (   R   R   t
   message_idR,   (    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyRE   †   s    c   	      C@  s%  |  j  d  k r|  j } t j j d | j ƒ } t j j d | j ƒ } t j j d | j ƒ } t j j d | j	 ƒ } t j j d | j
 ƒ } t t j j d |  j j d ƒ ƒ p· t ƒ } d j | rÏ d	 n d
 | | rê d j | ƒ n d ƒ } t | d | ƒ|  _  |  j  j | | ƒ n  |  j  S(   Nt   SLMQ_ACCOUNTt   SL_USERNAMEt
   SL_API_KEYt	   SLMQ_HOSTt	   SLMQ_PORTt   SLMQ_SECUREt   secures   {0}://{1}{2}t   httpst   https   :{0}t    t   endpoint(   t   _slmqR   t   conninfot   ost   environRD   t   virtual_hostt   useridt   passwordt   hostnamet   portt   boolt   transport_optionsR1   t   formatR	   t   authenticate(	   R   R[   t   accountt   usert   api_keyt   hostRb   RU   RY   (    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyR   Š   s    	!c         C@  s
   |  j  j S(   N(   t
   connectiont   client(   R   (    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyR[   Ÿ   s    c         C@  s   |  j  j j S(   N(   Rk   Rl   Rd   (   R   (    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyRd   £   s    c         C@  s   |  j  j d ƒ p |  j S(   NR(   (   Rd   RD   t   default_visibility_timeout(   R   (    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyR(   §   s    c         C@  s   |  j  j d d ƒ S(   NR)   RX   (   Rd   RD   (   R   (    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyR)   ¬   s    N(   t   __name__t
   __module__Rm   t   domain_formatR   RZ   R   t   setR   R   R   R"   t   CHARS_REPLACE_TABLER'   R-   R2   R6   RB   RF   RJ   RM   RE   t   propertyR   R[   Rd   R   R(   R)   (    (    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyR   "   s,   		
							
			t	   Transportc           B@  s3   e  Z e Z d  Z d Z e j j e	 e
 j f Z RS(   i   N(   Rn   Ro   R   t   polling_intervalR   t   default_portR   Rt   t   connection_errorsR
   t   sockett   error(    (    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyRt   ±   s
   	(   t   __doc__t
   __future__R    Rx   t   stringt   anyjsonR   R   R\   t
   kombu.fiveR   R   t   kombu.utilsR   t   kombu.utils.encodingR   R   RX   R   t   softlayer_messagingR	   t   softlayer_messaging.errorsR
   R   R   t   dictt   punctuationRr   R   Rt   (    (    (    s6   /tmp/pip-unpacked-wheel-UAnTfW/kombu/transport/SLMQ.pyt   <module>   s$   