U
    d                     @   s   d Z ddlZddlmZ ddlZddlmZmZ ddlm	Z	m
Z
 e ejedd Zejedd	id
ejdd Zejedd	id
ejdd ZdS )The ``celery graph`` command.    N)
itemgetter)CeleryCommandhandle_preload_options)DependencyGraphGraphFormatterc                 C   s   dS )r   N )ctxr   r   4/tmp/pip-unpacked-wheel-mu1yl971/celery/bin/graph.pygraph   s    r   Zallow_extra_argsT)clsZcontext_settingsc                 C   sh   | j j }dd | jpddgD }d|krN|jj}d|krX|j|jj n
|jjj}|t	j
 dS )zDisplay bootsteps graph.c                 S   s   h | ]}|  qS r   )lower.0argr   r   r
   	<setcomp>   s     zbootsteps.<locals>.<setcomp>workerconsumerN)objappZWorkControllerargsZ	blueprintr   Zconnect_withr   to_dotsysstdout)r	   r   includeZworker_graphr   r   r
   	bootsteps   s    
r   c                    s
  fddd-ddt fdd| jD dkd	d
 G dd d}G fddd| G  fdddt}dd G dd d|}G fddd|}G fddd|}ddlm} |dtddpd}tddpd}|ffd d!	}	| jj}
zd" }d#p&g }W nd t	k
r   |
j
  pNi }g g  }}| D ]&\}}|| ||d$ d%  qbY nX t|}d&|
jj}i }|	|d}|r||kr|dd |d' g }t|D ]*\}}|	ttt|d(|||| < q|d)|
  }|r6||nd*}t| d+}|| |r`|| dg}t|D ]\}}|||d,}|| ||| |r||| ||j}|r|D ]$} |}|| ||| q|d  d7  < qn|tj d*S ).zDisplay workers graph.c                    s    t dd| dS )Nr      :)r   	partition)r   )
maybe_listr   r
   	simplearg%   s    zworkers.<locals>.simplearg,c                 S   s*   | d || d kr | d  |n| d fS )Nr      )split)lsepr   r   r
   r   (   s    zworkers.<locals>.maybe_listc                 3   s   | ]} |V  qd S Nr   r   )r    r   r
   	<genexpr>+   s     zworkers.<locals>.<genexpr>genericc                 S   s   d t| j| jdd S )Nz
{} ({}://)z://r   )formattype__name___labelr#   )noder   r   r
   generic_label.   s    zworkers.<locals>.generic_labelc                   @   s.   e Zd ZdZi ZdddZdd Zdd ZdS )	zworkers.<locals>.NodeNc                 S   s   || _ || _d S r&   )r,   pos)selflabelr/   r   r   r
   __init__6   s    zworkers.<locals>.Node.__init__c                 S   s   | j S r&   r,   r0   r   r   r
   r1   :   s    zworkers.<locals>.Node.labelc                 S   s   |   S r&   r1   r4   r   r   r
   __str__=   s    zworkers.<locals>.Node.__str__)N)r+   
__module____qualname__Zforce_labelschemer2   r1   r6   r   r   r   r
   Node2   s
   
r:   c                       s0   e Zd ZdddddddZ fdd	Z  ZS )
zworkers.<locals>.ThreadZ
lightcyan4ZyellowZoval
   g333333?black)	fillcolorZ	fontcolorshapeZfontsizewidthcolorc                    s$   || _ t jdt dd d S )Nzthr-r   )r1   r/   )
real_labelsuperr2   next)r0   r1   kwargs)	__class__tidsr   r
   r2   J   s
    z workers.<locals>.Thread.__init__)r+   r7   r8   r9   r2   __classcell__r   )rF   )rE   r
   Thread@   s   	rH   c                       s4   e Zd Zdd Z fddZdd Z fddZd	S )
zworkers.<locals>.Formatterc                 S   s   |o
|  S r&   r5   r0   r   r   r   r
   r1   S   s    z workers.<locals>.Formatter.labelc                    s@   |j rt|jn|j}t| r*|j|d< | |t| jf|S )Nr1   )r/   dictr9   
isinstancerA   	draw_nodeZnode_scheme)r0   r   r9   rH   r   r
   r-   V   s    

 zworkers.<locals>.Formatter.nodec                 S   s   |  |t| jf|jS r&   )rL   rJ   Zterm_schemer9   rI   r   r   r
   terminal_node^   s     z(workers.<locals>.Formatter.terminal_nodec                    s*   t | r|jddd | ||| j|S )Nnonetee)Z	arrowheadZ	arrowtail)rK   updateZ	draw_edgeZedge_scheme)r0   abattrsrM   r   r
   edgec   s    
zworkers.<locals>.Formatter.edgeN)r+   r7   r8   r1   r-   rN   rU   r   rM   r   r
   	FormatterQ   s   rV   c                    s6   ddddddddd	d
d
 d  fddt| D S )Nu   ₀u   ₁u   ₂u   ₃u   ₄u   ₅u   ₆u   ₇u   ₈u   ₉)
0123456789 c                    s   g | ]} | qS r   r   )r   iSr   r
   
<listcomp>k   s     z.workers.<locals>.subscript.<locals>.<listcomp>)joinstr)nr   rc   r
   	subscripth   s    
    zworkers.<locals>.subscriptc                   @   s   e Zd ZdS )zworkers.<locals>.WorkerN)r+   r7   r8   r   r   r   r
   Workerm   s   rj   c                       s*   e Zd ZddddddZ fddZd	S )
zworkers.<locals>.Backendfolderr   r"   r<   Z
peachpuff3)r>   r?   heightr@   r=   c                    s    r| S | j S r&   r3   r4   r(   r.   r   r
   r1   y   s    zworkers.<locals>.Backend.labelNr+   r7   r8   r9   r1   r   rm   r   r
   Backendp   s   ro   c                       s(   e Zd ZdddddZ fddZdS )	zworkers.<locals>.BrokerZcircleZ
cadetblue3Z
cadetblue4r"   )r>   r=   r@   rl   c                    s    r| S | j S r&   r3   r4   rm   r   r
   r1      s    zworkers.<locals>.Broker.labelNrn   r   rm   r   r
   Broker|   s   rp   r   )countr"   Zwmax   Ztmax   c                    s~   t | }|o||k}dkr4 fddt| D } |rz| d|d  | |d  g } d d ||d  | |d < | S )N	enumeratec                    s$   g | ]\}}  |d   qS )r"   r   )r   rb   r   )nameri   r   r
   re      s   z/workers.<locals>.maybe_abbr.<locals>.<listcomp>r   r"   u   {}⎨…{}⎬r   )lenrt   r)   )r$   ru   maxsizeZabbr)r   ri   )ru   r
   
maybe_abbr   s     zworkers.<locals>.maybe_abbrZnodesthreadspoolzmax-concurrencybackendPbrokerN)	formatter)r/   )r!   )rJ   r   r   	itertoolsrq   intgetr   r   KeyErrorcontrolinspectstatsitemsappendrv   confZresult_backendrt   listrangeZconnection_for_readas_urir   Zadd_arcZadd_edger,   r   r   r   )r	   r:   rV   rj   ro   rp   rq   ZWmaxZTmaxry   r   workersrz   Zrepliesr   ZreplyZwlenr|   Zthreads_forrb   r   depsZ	curworkerthreadr   )rH   r   r(   r.   r   r    ri   rF   r
   r   !   s~    



   




r   )__doc__r   operatorr   ZclickZcelery.bin.baser   r   Zcelery.utils.graphr   r   groupZpass_contextr   commandr   r   r   r   r   r
   <module>   s   