U
    bh!                     @   s$  d Z ddlm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 d5ddZdd Zdd Zed ZeeddddZedddZeed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#d0ed1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d2d1 Z$eje
d.d)id/e#d0ed3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d4d3 Z%dS )6z@The ``celery control``, ``. inspect`` and ``. status`` programs.    )partial)LiteralN)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-kcem4wq5/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click
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!   )commandr   r&   	argumentsr   r   r   _compile_arguments+   s    


r4   )inspectcontrol)type_r2   returnc                 C   s<   t | }||kr8d|}tjd| d|  d| dd S )Nz, zCommand z not recognized. Available z commands: )message)_get_commands_of_typejoinr"   r#   )r7   r2   choicesZcommand_listingr   r   r   _verify_command_name:   s    
r=   r7   c                    s4   t jd d fdd}t jddd  ddd|d	S )
N)r   r8   c           	   	      s   |sd S t  }t }|   dR g }| D ]4\}}|jrZ| d|j }n|}|||jf q:|	| W 5 Q R X | j
j| dd |   d S )Nz	 Commands F)nl)r:   r"   HelpFormattersection
capitalizeitemsr%   appendhelpZwrite_dlr   echogetvalueexit)	r   paramvaluer<   	formatterZcommand_listcommand_nameinfoZcommand_previewr>   r   r   callbackE   s    z_list_option.<locals>.callbackz--listTzList available z commands and exit.F)is_flagrF   Zexpose_valueZis_eagerrO   )r"   Contextoption)r7   rO   r   r>   r   _list_optionD   s    
rS   )r7   r8   c                    s$    fddt j D }tt|S )Nc                    s(   g | ] \}}|j  kr|jr||fqS r   )typeZvisible)r-   r*   rN   r>   r   r   
<listcomp>c   s   
 z)_get_commands_of_type.<locals>.<listcomp>)r   r&   rD   dictsorted)r7   Zcommand_name_info_pairsr   r>   r   r:   b   s    
r:   )clsz-tz	--timeoutg      ?zRemote Control Optionsz%Timeout in seconds waiting for reply.)rX   rT   default
help_grouprF   z-dz--destinationz/Comma separated list of destination node names.)rX   rT   rZ   rF   z-jz--jsonTzUse json as output format.)rX   rP   rZ   rF   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destinationrO   'No nodes replied within time constraintr9   Z	exit_codequietF
{} {} online.r   )r   r   r   appr6   r5   Zpingr	   r
   rG   r   lengetr$   r   	pluralize)r   r\   r]   jsonkwargsrO   r   	nodecountr   r   r   r   j   s$    

 
r   Zallow_extra_args)rX   Zcontext_settingsr2   r5   c              	   K   s   t d| |rdntt| dd}t|| j}| jjjj|||d}|j	|f|}	|	s`t
dtd|rx| jt|	 dS t|	}
| jjs| jd|
t|
d	 dS )
z~Inspect the workers by sending them the COMMAND inspect command.

    Availability: RabbitMQ (AMQP) and Redis transports.
    r5   NTr   r[   r^   r_   ra   r   )r=   r   r   r4   r   r   rb   r6   r5   _requestr	   r
   rG   r   rc   r`   r$   r   re   )r   r2   r\   r]   rf   rg   rO   r3   r5   r   rh   r   r   r   r5      s0    

 
r6   c           	      C   st   t d| |rdntt| dd}| j}t||}| jjjj||||d|d}|s\t	dt
d|rp| jt| dS )zxSend the COMMAND control command to the workers.

    Availability: RabbitMQ (AMQP), Redis, and MongoDB transports.
    r6   NTri   )r\   r]   rO   r   r3   r^   r_   )r=   r   r   r   r4   r   rb   r6   	broadcastr	   r
   rG   r   )	r   r2   r\   r]   rf   rO   r   r3   r   r   r   r   r6      s&    

)F)&__doc__	functoolsr   typingr   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,   r4   Z_RemoteControlTypestrr=   rS   rV   r:   r2   rR   floatZpass_contextr   argumentr5   r6   r   r   r   r   <module>   s   



