
    IhG                    R   d Z ddlmZ ddlZddlZddlZddlm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dlmZ ej.                  D  ci c]  } | dvs e|       d c} Z G d dej4                        Z G d dej6                        Zy# e$ r dxZZY \w xY wc c} w )a+  SoftLayer Message Queue transport module for kombu.

Features
========
* Type: Virtual
* Supports Direct: Yes
* Supports Topic: Yes
* Supports Fanout: No
* Supports Priority: No
* Supports TTL: No

Connection String
=================
 *Unreviewed*

Transport Options
=================
 *Unreviewed*
    )annotationsN)Empty)bytes_to_strsafe_str)dumpsloads)cached_property   )virtual)
get_client)ResponseError__   c                       e Zd ZdZdZdZdZi Z e       Z	 fdZ
 fdZ fdZefdZd	 Z fd
Zd Zd Z fdZd Zd Zd Zed        Zed        Zed        Zed        Zed        Z xZS )ChannelzSLMQ Channel.i  zkombu%(vhost)sNc                    t         t        d      t        |   |i | | j                  j                         }|D ]  }|| j                  |<    y )Nz7SLMQ transport requires the softlayer_messaging library)r   ImportErrorsuper__init__slmqqueues_queue_cache)selfargskwargsr   queue	__class__s        M/var/www/html/planif/env/lib/python3.12/site-packages/kombu/transport/SLMQ.pyr   zChannel.__init__7   s^    I  	$)&)!!# 	-E',De$	-    c                f    |r| j                   j                  |       t        |   ||g|i |S N)_noack_queuesaddr   basic_consume)r   r   no_ackr   r   r   s        r   r$   zChannel.basic_consumeA   s@    ""5)w$UF 6&*6.46 	6r   c                    || j                   v r*| j                  |   }| j                  j                  |       t        |   |      S r!   )
_consumers_tag_to_queuer"   discardr   basic_cancel)r   consumer_tagr   r   s      r   r*   zChannel.basic_cancelG   sC    4??*&&|4E&&u-w#L11r   c                H    t        t        |            j                  |      S )z4Format AMQP queue name into a valid SLQS queue name.)strr   	translate)r   nametables      r   entity_namezChannel.entity_nameM   s    8D>",,U33r   c                D   | j                  | j                  |z         }	 | j                  |   S # t        $ rg 	 | j                  j                  || j                         n# t        $ r Y nw xY w| j                  j                  |      x}| j                  |<   |cY S w xY w)zEnsure a queue exists in SLQS.)visibility_timeout)	r1   queue_name_prefixr   KeyErrorr   create_queuer3   r   r   )r   r   r   qs       r   
_new_queuezChannel._new_queueQ   s      !7!7%!?@		$$U++ 			&&d.E.E ' G  +/99??5+AAA!!%(H	s2   / 	B'A! B!	A-*B,A--/BBc                    | j                  |      }| j                  j                  |d       | j                  j	                  |      j                  d       t        |   |       y)zDelete queue by name.NT)force)r1   r   popr   r   deleter   _delete)r   r   r   r   
queue_namer   s        r   r=   zChannel._delete_   sS    %%e,
j$/		
#***6
#r   c                Z    | j                  |      }|j                  t        |             y)zPut message onto queue.N)r8   pushr   )r   r   messager   r7   s        r   _putzChannel._putf   s     OOE"	uW~r   c                X   | j                  |      }|j                  d      }|d   rz|d   d   }t        t        |d               }|| j                  v r$|j                  |d         j                          |S |d   d   j                  |d   |j                  d       |S t               )	z/Try to retrieve a single message off ``queue``.r
   itemsr   bodyid
propertiesdelivery_info)slmq_message_idslmq_queue_name)
r8   r;   r   r   r"   rA   r<   updater/   r   )r   r   r7   rsmpayloads         r   _getzChannel._getk   s    OOE"UU1Xg;7AAL634G***		!D'"))+ N %o6=='(w166?K LNgr   c                    | j                   j                  |      j                  }	 |d   }| j                  ||d          t
        |   |       y # t        $ r Y w xY w)NrJ   rI   )qosgetrH   delete_messager5   r   	basic_ack)r   delivery_tagrH   r   r   s       r   rT   zChannel.basic_ackz   se    \2@@	I!"34E }5F'GH,'	  		s   A 	AAc                F    | j                  |      j                         d   S )z)Return the number of messages in a queue.message_count)r8   detail)r   r   s     r   _sizezChannel._size   s    u%,,.??r   c                    | j                  |      }d}|j                  d      }|d   r;|d   D ]  }| j                  ||d          |dz  } |j                  d      }|d   r;|S )z'Delete all current messages in a queue.r   
   rD   rF   r
   )r8   r;   rS   )r   r   r7   nresultsrM   s         r   _purgezChannel._purge   s{    OOE"%%)gW% ##E1T73Q eeBiG	 g
 r   c                    | j                   j                  | j                  |            }|j                  |      j	                         S r!   )r   r   r1   rA   r<   )r   r   
message_idr7   s       r   rS   zChannel.delete_message   s7    IIOOD,,U34yy$++--r   c                   | j                   p| 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            xs d      }d	j                  |rd
nd||rd| nd      }t        ||      | _         | j                   j                  ||       | j                   S )NSLMQ_ACCOUNTSL_USERNAME
SL_API_KEY	SLMQ_HOST	SLMQ_PORTSLMQ_SECUREsecureTz	{}://{}{}httpshttp: )endpoint)_slmqconninfoosenvironrR   virtual_hostuseridpasswordhostnameportbooltransport_optionsformatr   authenticate)	r   ro   accountuserapi_keyhostrv   rh   rm   s	            r   r   zChannel.slmq   s"   ::}}Hjjnn^X5J5JKG::>>-ADjjnn\83D3DEG::>>+x/@/@AD::>>+x}}=D"**..t5599(CE MHLF #))!vt"!D6
H
 $Gh?DJJJ##D'2zzr   c                .    | j                   j                  S r!   )
connectionclientr   s    r   ro   zChannel.conninfo   s    %%%r   c                B    | j                   j                  j                  S r!   )r   r   rx   r   s    r   rx   zChannel.transport_options   s    %%777r   c                T    | j                   j                  d      xs | j                  S )Nr3   )rx   rR   default_visibility_timeoutr   s    r   r3   zChannel.visibility_timeout   s*    &&**+?@ 0//	1r   c                :    | j                   j                  dd      S )Nr4   rl   )rx   rR   r   s    r   r4   zChannel.queue_name_prefix   s    %%))*=rBBr   )__name__
__module____qualname____doc__r   domain_formatrn   r   setr"   r   r$   r*   CHARS_REPLACE_TABLEr1   r8   r=   rB   rO   rT   rY   r^   rS   propertyr   ro   rx   r	   r3   r4   __classcell__)r   s   @r   r   r   .   s    !%$MELEM-62 ': 4$
(@
.  ( & & 8 8 1 1 C Cr   r   c                  f    e Zd ZdZeZdZdZej                  j                  e
ej                  fz   Z	y)	TransportzSLMQ Transport.r
   N)r   r   r   r   r   polling_intervaldefault_portr   r   connection_errorsr   socketerror r   r   r   r      s<    GL++6<</
 	
 r   r   )r   
__future__r   rp   r   stringr   r   kombu.utils.encodingr   r   kombu.utils.jsonr   r   kombu.utils.objectsr	   rl   r   softlayer_messagingr   softlayer_messaging.errorsr   r   punctuationordr   r   r   )cs   0r   <module>r      s   ( # 	    7 ) / &.8 !,,CFDL 
NCgoo NCb!! u  &!%%J&s   B 	B$B$	B! B!