a
    xd#                     @   sJ  d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZmZ zd dlZW n ey   dZY n0 eeZG dd deZG dd	 d	eZG d
d deZG dd deZG dd deZG dd deZG dd deZG dd deZejdd ZedkrFej Z e !e e "  dS )    N)ioloop)gen)
httpclient)urlparseurljoinquoteunquotec                   @   s   e Zd Zdd Zdd ZdS )
BrokerBasec                 O   s\   t |}|j| _|j| _|jdd  | _|j}|j}|r@t|n|| _|rRt|n|| _d S )N   )	r   hostnamehostportpathvhostusernamepasswordr   )self
broker_urlargskwargspurlr   r    r   K/var/www/html/Ranjet/env/lib/python3.9/site-packages/flower/utils/broker.py__init__   s    zBrokerBase.__init__c                 C   s   t d S NNotImplementedErrorr   namesr   r   r   queues%   s    zBrokerBase.queuesN)__name__
__module____qualname__r   r   r   r   r   r   r	      s   r	   c                       s8   e Zd Zd fdd	Zejdd Zedd Z  Z	S )	RabbitMQNc                    s   t t| | |ptj | _| jp(d| _| jp4d| _| j	dkrRt
| j	dpVdn| j	| _	| jpbd| _| jpnd| _|sdj| j| j| j| j| j	d}z| | W n ty   td| Y n0 || _d S )	N	localhosti8=  / Zguestz6http://{username}:{password}@{host}:{port}/api/{vhost})r   r   r   r   r   zInvalid broker api url:%s)superr#   r   r   IOLoopinstanceio_loopr   r   r   r   r   r   formatvalidate_http_api	Exceptionloggererrorhttp_api)r   r   r0   r*   r   	__class__r   r   r   *   s"    "zRabbitMQ.__init__c           
   
   #   s  t | jd| j }t| j}t|jp&dp.| j}t|jp:dpB| j}t }zlz|j	|||ddddV }W nB t
jtjfy } z"td| tg W Y d }~n
d }~0 0 W |  n
|  0 |jdkrt|j }	t fd	d
|	D n|  d S )Nzqueues/r&   g      ?g       @F)Zauth_usernameZauth_passwordconnect_timeoutrequest_timeoutZvalidate_certz'RabbitMQ management API call failed: %s   c                    s   g | ]}|d   v r|qS )namer   .0xr   r   r   
<listcomp>V       z#RabbitMQ.queues.<locals>.<listcomp>)r   r0   r   r   r   r   r   r   ZAsyncHTTPClientfetchsocketr/   	HTTPErrorr.   r   ReturnclosecodejsonloadsbodydecodeZrethrow)
r   r   urlZapi_urlr   r   http_clientresponseeinfor   r:   r   r   A   s&    
"
zRabbitMQ.queuesc                 C   s$   t |}|jdvr td|j d S )N)httphttpszInvalid http api schema: %s)r   scheme
ValueError)clsr0   rG   r   r   r   r,   Z   s    
zRabbitMQ.validate_http_api)N)
r    r!   r"   r   r   	coroutiner   classmethodr,   __classcell__r   r   r1   r   r#   )   s
   
r#   c                       s>   e Zd ZdZg dZ fddZdd Zejdd Z	  Z
S )		RedisBasez)r         	   c                    sR   t t| | d | _ts"td|di }|d| j| _|d| j| _	d S )Nzredis library is requiredbroker_optionspriority_stepssep)
r'   rT   r   redisImportErrorgetDEFAULT_PRIORITY_STEPSrY   DEFAULT_SEPrZ   r   r   r   r   rX   r1   r   r   r   e   s    zRedisBase.__init__c                 C   s2   || j vrtddj|r&|| j|fn|ddf S )NzPriority not in priority stepsz	{0}{1}{2}r&   )rY   rO   r+   rZ   )r   queueprir   r   r   
_q_for_priq   s    
zRedisBase._q_for_pric                    sT   g }|D ]<  fddj D }| tfdd|D d qt|d S )Nc                    s   g | ]}  |qS r   )rc   )r8   rb   r6   r   r   r   r;   z   s   z$RedisBase.queues.<locals>.<listcomp>c                    s   g | ]} j |qS r   )r[   Zllenr7   r   r   r   r;   ~   r<   )r6   messages)rY   appendsumr   r@   )r   r   Zqueue_statspriority_namesr   rd   r   r   v   s    
zRedisBase.queues)r    r!   r"   r_   r^   r   rc   r   rQ   r   rS   r   r   r1   r   rT   a   s   rT   c                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	Redisc                    sR   t t| j|g|R i | | jp&d| _| jp2d| _| | j| _|  | _d S )Nr$   i  )	r'   rj   r   r   r   _prepare_virtual_hostr   _get_redis_clientr[   r   r   r   r   r1   r   r   r      s
    zRedis.__init__c                 C   sf   t |tjsb|r|dkrd}n|dr4|dd  }zt|}W n  ty`   td|Y n0 |S Nr%   r   r
   z0Database is int between 0 and limit - 1, not {0}
isinstancenumbersIntegral
startswithintrO   r+   r   r   r   r   r   rk      s    

zRedis._prepare_virtual_hostc                 C   s   | j | j| j| jdS )N)r   r   dbr   )r   r   r   r   re   r   r   r   _get_redis_client_args   s    zRedis._get_redis_client_argsc                 C   s   t jf i |  S r   )r[   rj   rw   re   r   r   r   rl      s    zRedis._get_redis_client)r    r!   r"   r   rk   rw   rl   rS   r   r   r1   r   rj      s   rj   c                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	RedisSentinelc                    sj   t t| j|g|R i | |di }| jp2d| _| jp>d| _| | j| _| || _	| 
 | _d S )NrX   r$   ig  )r'   rx   r   r]   r   r   rk   r   _prepare_master_namemaster_namerl   r[   r`   r1   r   r   r      s    zRedisSentinel.__init__c                 C   sf   t |tjsb|r|dkrd}n|dr4|dd  }zt|}W n  ty`   td|Y n0 |S rn   ro   ru   r   r   r   rk      s    

z#RedisSentinel._prepare_virtual_hostc                 C   s,   z|d }W n t y&   tdY n0 |S )Nrz   z+master_name is required for Sentinel broker)KeyErrorrO   )r   rX   rz   r   r   r   ry      s    
z"RedisSentinel._prepare_master_namec                 C   s8   d| j i}tjj| j| jfgfi |}|| j}|S )Nr   )r   r[   sentinelZSentinelr   r   Z
master_forrz   )r   Zconnection_kwargsr|   Zredis_clientr   r   r   rl      s    
zRedisSentinel._get_redis_client)r    r!   r"   r   rk   ry   rl   rS   r   r   r1   r   rx      s   		rx   c                       s   e Zd Z fddZ  ZS )RedisSocketc                    s:   t t| j|g|R i | tjd| j | jd| _d S )Nr%   )Zunix_socket_pathr   )r'   r}   r   r[   rj   r   r   rm   r1   r   r   r      s    zRedisSocket.__init__)r    r!   r"   r   rS   r   r   r1   r   r}      s   r}   c                       s,   e Zd ZdZ fddZ fddZ  ZS )RedisSslz
    Redis SSL class offering connection to the broker over SSL.
    This does not currently support SSL settings through the url, only through
    the broker_use_ssl celery configuration.
    c                    s@   d|vrt d|di | _tt| j|g|R i | d S )Nbroker_use_sslz%rediss broker requires broker_use_ssl)rO   r]   r   r'   r~   r   rm   r1   r   r   r      s    zRedisSsl.__init__c                    s2   t t|  }d|d< t| jtr.|| j |S )NTssl)r'   r~   rw   rp   r   dictupdate)r   Zclient_argsr1   r   r   rw      s
    zRedisSsl._get_redis_client_args)r    r!   r"   __doc__r   rw   rS   r   r   r1   r   r~      s   r~   c                   @   s   e Zd Zdd Zdd ZdS )Brokerc                 O   s   t |j}|dkr(t|g|R i |S |dkrFt|g|R i |S |dkrdt|g|R i |S |dkrt|g|R i |S |dkrt|g|R i |S td S )NZamqpr[   Zredisszredis+socketr|   )r   rN   r#   rj   r~   r}   rx   r   )rP   r   r   r   rN   r   r   r   __new__   s    
zBroker.__new__c                 C   s   t d S r   r   r   r   r   r   r      s    zBroker.queuesN)r    r!   r"   r   r   r   r   r   r   r      s   r   c                  c   s   t tjdkrtjd nd} t tjdkr4tjd nd}t tjdkrRtjd }nd}t| |d}||gV }|r|t| t  d S )Nr
   zamqp://   ZceleryrU   z'http://guest:guest@localhost:15672/api/)r0   )lensysargvr   r   printr*   stop)r   Z
queue_namer0   Zbrokerr   r   r   r   main   s    r   __main__)#r   rC   r>   loggingrq   Ztornador   r   r   urllib.parser   r   r   r   r[   r\   	getLoggerr    r.   objectr	   r#   rT   rj   rx   r}   r~   r   rQ   r   r(   r)   r*   Zadd_callbackstartr   r   r   r   <module>   s6   

8",



