
     h#                        d 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 n# e$ r dxZZY nw xY wd ej        D             Z G d dej                  Z G d dej                  ZdS )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*
    N)Empty)bytes_to_strsafe_str)dumpsloads)cached_property   )virtual)
get_client)ResponseErrorc                 6    i | ]}|d vt          |          dS )__   )ord).0cs     P/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/kombu/transport/SLMQ.py
<dictcomp>r   '   s,       CFFD    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                      j        |i | | j                                        }|D ]}|| j        |<   d S )Nz7SLMQ transport requires the softlayer_messaging library)r   ImportErrorsuper__init__slmqqueues_queue_cache)selfargskwargsr   queue	__class__s        r   r   zChannel.__init__5   sx    I   	$)&)))!!## 	- 	-E',De$$	- 	-r   c                 x    |r| j                             |            t                      j        ||g|R i |S N)_noack_queuesaddr   basic_consume)r   r"   no_ackr    r!   r#   s        r   r(   zChannel.basic_consume?   s[     	*""5)))$uww$UF 6&*6 6 6.46 6 	6r   c                     || j         v r'| j        |         }| j                            |           t	                                          |          S r%   )
_consumers_tag_to_queuer&   discardr   basic_cancel)r   consumer_tagr"   r#   s      r   r.   zChannel.basic_cancelE   sL    4?**&|4E&&u---ww##L111r   c                 `    t          t          |                                        |          S )z4Format AMQP queue name into a valid SLQS queue name.)strr   	translate)r   nametables      r   entity_namezChannel.entity_nameK   s$    8D>>"",,U333r   c                 *   |                      | j        |z             }	 | j        |         S # t          $ r\ 	 | j                            || j                   n# t          $ r Y nw xY w| j                            |          x}| j        |<   |cY S w xY w)zEnsure a queue exists in SLQS.)visibility_timeout)	r5   queue_name_prefixr   KeyErrorr   create_queuer7   r   r"   )r   r"   r!   qs       r   
_new_queuezChannel._new_queueO   s      !7%!?@@		$U++ 	 	 		&&d.E ' G G G G    +/9??5+A+AAA!%(HHH	s2   , 
B!AB
A&#B%A&&)BBc                    |                      |          }| j                            |d           | j                            |                              d           t                                          |           dS )zDelete queue by name.NT)force)r5   r   popr   r"   deleter   _delete)r   r"   r    r!   
queue_namer#   s        r   rA   zChannel._delete]   sp    %%e,,
j$///	
##***666
#####r   c                 t    |                      |          }|                    t          |                     dS )zPut message onto queue.N)r<   pushr   )r   r"   messager!   r;   s        r   _putzChannel._putd   s1    OOE""	uW~~r   c                    |                      |          }|                    d          }|d         r|d         d         }t          t          |d                             }|| j        v r.|                    |d                                                    n/|d         d                             |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)
r<   r?   r   r   r&   rE   r@   updater3   r   )r   r"   r;   rsmpayloads         r   _getzChannel._geti   s    OOE""UU1XXg; 	7AAL63344G***		!D'""))++++%o6=='(w16?K ?K L L LNggr   c                     | j                             |          j        }	 |d         }|                     ||d                    n# t          $ r Y nw xY wt                                          |           d S )NrN   rM   )qosgetrL   delete_messager9   r   	basic_ack)r   delivery_tagrL   r"   r#   s       r   rX   zChannel.basic_ackx   s    \22@	I!"34E }5F'GHHHH  	 	 	D	 	,'''''s   A 
AAc                 \    |                      |                                          d         S )z)Return the number of messages in a queue.message_count)r<   detail)r   r"   s     r   _sizezChannel._size   s%    u%%,,..??r   c                     |                      |          }d}|                    d          }|d         rI|d         D ]#}|                     ||d                    |dz  }$|                    d          }|d         I|S )z'Delete all current messages in a queue.r   
   rH   rJ   r	   )r<   r?   rW   )r   r"   r;   nresultsrQ   s         r   _purgezChannel._purge   s    OOE""%%))g 	 W%  ##E1T7333QeeBiiG	 g 	 
 r   c                     | j                             |                     |                    }|                    |                                          S r%   )r   r"   r5   rE   r@   )r   r"   
message_idr;   s       r   rW   zChannel.delete_message   sA    IOOD,,U3344yy$$++---r   c                    | j         Z| j        }t          j                            d|j                  }t          j                            d|j                  }t          j                            d|j                  }t          j                            d|j                  }t          j                            d|j	                  }t          t          j                            d| j                            d                    pd          }d	                    |rd
nd||rd| nd          }t          ||          | _         | j                             ||           | j         S )NSLMQ_ACCOUNTSL_USERNAME
SL_API_KEY	SLMQ_HOST	SLMQ_PORTSLMQ_SECUREsecureTz	{}://{}{}httpshttp: )endpoint)_slmqconninfoosenvironrV   virtual_hostuseridpasswordhostnameportbooltransport_optionsformatr   authenticate)	r   rs   accountuserapi_keyhostrz   rl   rq   s	            r   r   zChannel.slmq   s6   :}Hjnn^X5JKKG:>>-AADjnn\83DEEG:>>+x/@AAD:>>+x}==D"*..t599(CCE E MHL F #))!-vt"*
D


 H
 $Gh???DJJ##D'222zr   c                     | j         j        S r%   )
connectionclientr   s    r   rs   zChannel.conninfo   s    %%r   c                 $    | j         j        j        S r%   )r   r   r|   r   s    r   r|   zChannel.transport_options   s    %77r   c                 D    | j                             d          p| j        S )Nr7   )r|   rV   default_visibility_timeoutr   s    r   r7   zChannel.visibility_timeout   s'    &**+?@@ 0/	1r   c                 8    | j                             dd          S )Nr8   rp   )r|   rV   r   s    r   r8   zChannel.queue_name_prefix   s    %))*=rBBBr   )__name__
__module____qualname____doc__r   domain_formatrr   r   setr&   r   r(   r.   CHARS_REPLACE_TABLEr5   r<   rA   rF   rS   rX   r]   rb   rW   propertyr   rs   r|   r   r7   r8   __classcell__)r#   s   @r   r   r   ,   s       !%$MELCEEM- - - - -6 6 6 6 62 2 2 2 2 ': 4 4 4 4  $ $ $ $ $  
  ( ( ( ( (@ @ @
 
 
. . .   X( & & X& 8 8 X8 1 1 _1 C C _C C C C Cr   r   c                   J    e Zd ZdZeZdZdZej        j	        e
ej        fz   Z	dS )	TransportzSLMQ Transport.r	   N)r   r   r   r   r   polling_intervaldefault_portr
   r   connection_errorsr   socketerror r   r   r   r      sE        GL+6</
 	
 r   r   )r   rt   r   stringr"   r   kombu.utils.encodingr   r   kombu.utils.jsonr   r   kombu.utils.objectsr   rp   r
   softlayer_messagingr   softlayer_messaging.errorsr   r   punctuationr   r   r   r   r   r   <module>r      s}   ( 
			         7 7 7 7 7 7 7 7 ) ) ) ) ) ) ) ) / / / / / /      &......8888888 & & &!%%J&  ,   
NC NC NC NC NCgo NC NC NCb    !     s   ? 	A
A