o
    Df                     @   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   I/home/ubuntu/webapp/venv/lib/python3.10/site-packages/celery/bin/graph.pygraph   s    r   allow_extra_argsT)clscontext_settingsc                 C   sh   | j j }dd | jpddgD }d|v r'|jj}d|v r&|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>       zbootsteps.<locals>.<setcomp>workerconsumerN)objappWorkControllerargs	blueprintr   connect_withr   to_dotsysstdout)r	   r   includeworker_graphr   r   r
   	bootsteps   s   
r"   c                    s  fddd-ddt fdd| jD dv 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pnd}tddpxd}|ffd d!	}	| jj}
zd" }d#pg }W n. t	y   |
j
  pi }g g }}| D ]\}}|| ||d$ d%  qY nw t|}d&|
jj}i }|	|d}|r||kr|dd |d' g }t|D ]\}}|	ttt|d(|||| < q|d)|
  }|r||nd*}t| d+}|| |r(|| dg}t|D ]E\}}|||d,}|| ||| |rM||| ||j}|rk|D ]} |}|| ||| qX|d  d7  < q/|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 v r| d  |fS | 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-   )r3   pos)selflabelr6   r   r   r
   __init__6   s   
zworkers.<locals>.Node.__init__c                 S   s   | j S r-   r3   r7   r   r   r
   r8   :   s   zworkers.<locals>.Node.labelc                 S   s   |   S r-   r8   r;   r   r   r
   __str__=   s   zworkers.<locals>.Node.__str__r-   )r2   
__module____qualname__force_labelschemer9   r8   r=   r   r   r   r
   Node2   s    
rB   c                       s0   e Zd ZdddddddZ fdd	Z  ZS )
zworkers.<locals>.Thread
lightcyan4yellowoval
   g333333?black)	fillcolor	fontcolorshapefontsizewidthcolorc                    s$   || _ t jdt dd d S )Nzthr-r   )r8   r6   )
real_labelsuperr9   next)r7   r8   kwargs)	__class__tidsr   r
   r9   J   s
   
z workers.<locals>.Thread.__init__)r2   r>   r?   rA   r9   __classcell__r   )rS   )rR   r
   Thread@   s    	rU   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-   r<   r7   r   r   r   r
   r8   S   s   z workers.<locals>.Formatter.labelc                    sD   |j rt|jn|j}t| r|j|d< | |t| jfi |S )Nr8   )r6   dictrA   
isinstancerN   	draw_nodenode_scheme)r7   r   rA   rU   r   r
   r4   V   s   

zworkers.<locals>.Formatter.nodec                 S   s   |  |t| jfi |jS r-   )rY   rW   term_schemerA   rV   r   r   r
   terminal_node^   s   z(workers.<locals>.Formatter.terminal_nodec                    s*   t | r|jddd | ||| j|S )Nnonetee)	arrowhead	arrowtail)rX   update	draw_edgeedge_scheme)r7   abattrsr[   r   r
   edgec   s   
zworkers.<locals>.Formatter.edgeN)r2   r>   r?   r8   r4   r]   rh   r   r[   r   r
   	FormatterQ   s
    ri   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   r   z.workers.<locals>.subscript.<locals>.<listcomp>)joinstr)nr   rv   r
   	subscripth   s   

zworkers.<locals>.subscriptc                   @   s   e Zd ZdS )zworkers.<locals>.WorkerN)r2   r>   r?   r   r   r   r
   Workerm   s    r}   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)   rG   
peachpuff3)rJ   rL   heightrM   rH   c                        r| S | j S r-   r:   r;   r/   r5   r   r
   r8   y      zworkers.<locals>.Backend.labelNr2   r>   r?   rA   r8   r   r   r   r
   Backendp   s    r   c                       s(   e Zd ZdddddZ fddZdS )	zworkers.<locals>.Brokercircle
cadetblue3
cadetblue4r)   )rJ   rH   rM   r   c                    r   r-   r:   r;   r   r   r
   r8      r   zworkers.<locals>.Broker.labelNr   r   r   r   r
   Broker|   s    r   r   )countr)   wmax   tmax   c                    s~   t | }|o	||k}dv r fddt| D } |r=| d|d  | |d  g } d d ||d  | |d < | S )N	enumeratec                    s$   g | ]\}}  |d   qS )r)   r   )r   ru   r   )namer|   r   r
   rx      s    z/workers.<locals>.maybe_abbr.<locals>.<listcomp>r   r)   u   {}⎨…{}⎬r#   )lenr   r0   )r+   r   maxsizeabbr)r   r|   )r   r
   
maybe_abbr   s   zworkers.<locals>.maybe_abbrnodesthreadspoolzmax-concurrencybackendPbrokerN)	formatter)r6   )r(   )rW   r   r   	itertoolsr   intgetr   r   KeyErrorcontrolinspectstatsitemsappendr   confresult_backendr   listrangeconnection_for_readas_urir   add_arcadd_edger3   r   r   r   )r	   rB   ri   r}   r   r   r   WmaxTmaxr   r   workersr   repliesr   replywlenr   threads_forru   r   deps	curworkerthreadr   )rU   r   r/   r5   r&   r'   r|   rS   r
   r   !   s|   







r   )__doc__r   operatorr   clickcelery.bin.baser   r   celery.utils.graphr   r   grouppass_contextr   commandr"   r   r   r   r   r
   <module>   s     