U
    d                     @   s  d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ d.ddZdd Zdd Zejedejdde	eddddejdde	edddejdde	dddd eje
d!d" Zejed#did$ejd%ed&d' ej D d(ejdde	eddddejdde	edddejdde	dddd eje
d)d* Zejed#did$ejd%ed+d' ej D d(ejdde	eddddejdde	edddejdde	dddd eje
d,d- Z dS )/z@The ``celery control``, ``. inspect`` and ``. status`` programs.    )partialN)dumps)COMMA_SEPARATED_LISTCeleryCommandCeleryOptionhandle_preload_options)CeleryCommandException)EX_UNAVAILABLE)text)PanelFc                 C   sl   t t|}|| }| jj| dddd}| j|\}}| jjd| | |r^t|dnd|d d S )	Nz: ZcyanT)ZfgZboldz->    )Z	show_body)nextiterobjstyleprettyZsay_chatr
   indent)ctxreplies
show_replynodereplystatusZpreply r   6/tmp/pip-unpacked-wheel-9cz4377o/celery/bin/control.py_say_remote_command_reply   s    r   c              
   c   s   d}zxt |D ]j\}}z| j| \}}W n4 tk
r\   | jrDY  qztd|| jY qX ||d k	rp||n|fV  qW 5 ||d  |d d < X d S )Nr   z Command {!r} takes arguments: {})	enumerateargs
IndexErrorvariadicclickZ
UsageErrorformat	signature)metamethodr   iargnametypr   r   r   _consume_arguments   s      
 r*   c                 C   sJ   t j|  }i }|jr0|dd t|| |D  |jrF||j|i |S )Nc                 S   s   i | ]\}}||qS r   r   ).0kvr   r   r   
<dictcomp>/   s     z&_compile_arguments.<locals>.<dictcomp>)r   r$   r   updater*   r    )actionr   r$   	argumentsr   r   r   _compile_arguments+   s    


r2   )clsz-tz	--timeoutg      ?zRemote Control Optionsz%Timeout in seconds waiting for reply.)r3   typedefault
help_grouphelpz-dz--destinationz/Comma separated list of destination node names.)r3   r4   r6   r7   z-jz--jsonTzUse json as output format.)r3   Zis_flagr6   r7   c              	   K   s   |rdnt t| }| jjjj|||d }|s<tdtd|rP| j	t
| t|}|dds| j	d|t|d dS )	z%Show list of workers that are online.Ntimeoutdestinationcallback'No nodes replied within time constraintmessageZ	exit_codequietF
{} {} online.r   )r   r   r   appcontrolinspectZpingr   r	   echor   lengetr"   r
   	pluralize)r   r9   r:   jsonkwargsr;   r   	nodecountr   r   r   r   7   s$    

 
r   Zallow_extra_args)r3   Zcontext_settingsr0   c                 C   s$   g | ]\}}|j d kr|jr|qS )rC   r4   Zvisibler+   r(   infor   r   r   
<listcomp>d   s   
 rN   )r4   c              	   K   s   |rdnt t| dd}t|| j}| jjjj|||d}|j|f|}	|	sVt	dt
d|rn| jt|	 dS t|	}
| jjs| jd|
t|
d dS )	z\Inspect the worker at runtime.

    Availability: RabbitMQ (AMQP) and Redis transports.
    NTr   r8   r<   r=   r@   r   )r   r   r2   r   r   rA   rB   rC   _requestr   r	   rD   r   rE   r?   r"   r
   rG   )r   r0   r9   r:   rH   rI   r;   r1   rC   r   rJ   r   r   r   rC   b   s2     
 
rC   c                 C   s$   g | ]\}}|j d kr|jr|qS )rB   rK   rL   r   r   r   rN      s   
 c           	      C   sj   |rdnt t| dd}| j}t||}| jjjj||||d|d}|sRtdt	d|rf| j
t| dS )z_Workers remote control.

    Availability: RabbitMQ (AMQP), Redis, and MongoDB transports.
    NTrO   )r9   r:   r;   r   r1   r<   r=   )r   r   r   r2   r   rA   rB   	broadcastr   r	   rD   r   )	r   r0   r9   r:   rH   r;   r   r1   r   r   r   r   rB      s$     
rB   )F)!__doc__	functoolsr   r!   Zkombu.utils.jsonr   Zcelery.bin.baser   r   r   r   Zcelery.exceptionsr   Zcelery.platformsr	   Zcelery.utilsr
   Zcelery.worker.controlr   r   r*   r2   commandoptionfloatZpass_contextr   argumentZChoicer$   itemsrC   rB   r   r   r   r   <module>   s   




