
    !<iޖ              (          U d dl Z d dlZd dlZ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m	Z	m
Z
 d dlmZ d dlmZmZmZm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mZmZ d d	l m!Z! d
dl"m#Z#m$Z$ d
dl%m&Z&m'Z'm(Z( d
dl)m*Z*m+Z+ d
dl,m-Z- dee.e/ef                  de0dee.e/ef         dz           fdZ1 ej2        ddd          Z3ej2        e4d<    G d de/ej5                  Z6 G d de/ej5                  Z7dede/fdZ8de/fdZ9de/e	z  de	fdZ:d e7ddfd!Z;d"e6ddfd#Z<d$e/de/fd%Z=d&e/de/dz  fd'Z>d&e/dz  defd(Z?e3@                    d)*          dd+            ZAe3@                    d,*          d-gd.d/ e9            e6jB        ejC        D                                re7jE        ne7jF        d0 e	d12           e	d13           e	d45           e	d65          ddd7ddfd8eeGe/          ejH        d9d:d;<          f         d=ee/ ejH        d>d?d@<          f         d$ee/ ejH        dAdBe=C          f         dDee/dz   ejH        dEdF<          f         dGee6 ejH        dHdIe<C          f         dJee7 ejH        dKdLe;C          f         dMeeI ejH        dNdO<          f         dPee	 ejH        e:dQdRS          f         dTee	 ejH        e:dUdVS          f         dWee	 ejH        e:dXdYS          f         dZee	 ejH        e:d[d\S          f         d]eeJ ejH        d^d_*          f         d`eeJ ejH        dadbdc<          f         ddeeJ ejH        dedf*          f         dgeeIdz   ejH        dhdidj<          f         dkeeIdz   ejH        dldmdn<          f         ddf"do            Z,e3@                    dp*          dqdqe+jK        dd.d/fdree/ ejL        dse>t          f         duee/ ejL        dve>t          f         dwee+ ejL        dx*          f         d&ee/dz   ejL        dy*          f         d=ee/ ejH        d>d?d@<          f         d$ee/ ejH        dAdBe=C          f         ddfdz            ZMe3@                    d{*          	 	 dd=ee/ ejH        d>d?d@<          f         d$ee/ ejH        dAdBe=C          f         ddfd|            ZNe3@                    d}*          dqdqe+jK        dd.d/fdree/ ejL        d~e>t          f         duee/ ejL        de>t          f         dwee+ ejL        dx*          f         d&ee/dz   ejL        d*          f         d=ee/ ejH        d>d?d@<          f         d$ee/ ejH        dAdBe=C          f         ddfd            ZO ej2        dd          ZPej2        e4d<   e3Q                    ePd8           eP@                    d*          d.d/d e	d 3          fd=ee/ ejH        d>d?d@<          f         d$ee/ ejH        dAdBe=C          f         dee/ ejL        d*          f         dee	 ejH        e:d          f         ddf
d            ZReP@                    d*          d.d/d e	d 3          fd=ee/ ejH        d>d?d@<          f         d$ee/ ejH        dAdBe=C          f         dee/ ejL        d*          f         dee	 ejH        e:d          f         ddf
d            ZSeP@                    d*          d.d/d
 e	d 3          fd=ee/ ejH        d>d?d@<          f         d$ee/ ejH        dAdBe=C          f         dee0 ejL        d*          f         dee	 ejH        e:d          f         ddf
d            ZTdedede/fdZUde'de.e/e.e/eIez  dz  f         f         fdZVe3@                    d*          d-gd.d/d7fd8eeGe/          ejH        d9d:d;<          f         d=ee/ ejH        d>d?d@<          f         d$ee/ ejH        dAdBe=C          f         deeJ ejH        dd*          f         ddf
d            ZWe3@                    d*          	 	 ddee/ ejL        d*          f         d$ee/ ejH        dddd          f         dee/ ejH        d>dd@d          f         ddfd            ZX ej2        dd          ZYej2        e4d<   e3Q                    eYd           	 dde/dee(         de/dz  ddfdZZeY@                    dd          	 	 dd=ee/ ejH        d>d?d@<          f         d$ee/ ejH        dAdBe=C          f         ddfd            Z[eY@                    dd          	 	 ddee/ ejL        d*          f         d=ee/ ejH        d>d?d@<          f         d$ee/ ejH        dAdBe=C          f         ddfd            Z\dS )    N)datetime	timedeltatimezone)partial)	AnnotatedAnyAsyncIterator
Collection)Console)Layout)Live)	BarColumnProgressTaskProgressColumn
TextColumnTimeElapsedColumnTaskID)Table   )__version__tasks)DocketDocketSnapshot
WorkerInfo)ExecutionStateOperator)Workeriteratortimeoutreturnc                4  K   	 	 	 t          j        |                                 |           d{V W V  n%# t           j        $ r dW V  Y nt          $ r Y nw xY wY	 |                                  d{V  dS # |                                  d{V  w xY w)a  Iterate over an async iterator with timeout, ensuring proper cleanup.

    Wraps an async iterator to add timeout support and guaranteed cleanup.
    On timeout, yields None to allow the caller to handle polling fallback.

    Args:
        iterator: An async iterator (must have __anext__ and aclose methods)
        timeout: Timeout in seconds for each iteration

    Yields:
        Items from the iterator, or None if timeout expires
    T)r   N)asynciowait_for	__anext__TimeoutErrorStopAsyncIterationaclose)r   r   s     /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/docket/cli.pyiterate_with_timeoutr)   !   s      
 	#,X-?-?-A-A7SSSSSSSSSSSSSS'   





%   	 oohoos7   A; 18 A; AA; 	AA; AA; ;BzBDocket - A distributed background task system for Python functionsT)helpadd_completionno_args_is_helpappc                   "    e Zd ZdZdZdZdZdZdS )LogLevelDEBUGINFOWARNINGERRORCRITICALN)__name__
__module____qualname__r0   r1   r2   r3   r4        r(   r/   r/   D   s'        EDGEHHHr9   r/   c                       e Zd ZdZdZdZdS )	LogFormatrichplainjsonN)r5   r6   r7   RICHPLAINJSONr8   r9   r(   r;   r;   L   s        DEDDDr9   r;   whenc                 P    |                                                      d          S )Nz%Y-%m-%d %H:%M:%S %z)
astimezonestrftime)rB   s    r(   
local_timerF   R   s!    ??%%&<===r9   c                  T    t          j                     dt          j                     S )N#)socketgethostnameosgetpidr8   r9   r(   default_worker_namerM   V   s%     ""22RY[[222r9   duration_strc                    t          | t                    r| S d| v r|                     d          }t          |          dk    r)t	          t
          |          \  }}t          ||          S t          |          dk    r+t	          t
          |          \  }}}t          |||          S t          d|            |                     d          r%t          t          | dd	                   
          S |                     d          r%t          t          | dd	                             S |                     d          r%t          t          | dd	                             S t          t          |           
          S )z
    Parse a duration string into a timedelta.

    Supported formats:
    - 123 = 123 seconds
    - 123s = 123 seconds
    - 123m = 123 minutes
    - 123h = 123 hours
    - 00:00 = mm:ss
    - 00:00:00 = hh:mm:ss
    :   )minutesseconds   )hoursrR   rS   zInvalid duration string: sNrS   mrR   h)rU   )
isinstancer   splitlenmapint
ValueErrorendswith)rN   partsrR   rS   rU   s        r(   durationrd   Z   s~    ,	** 
l""3''u::??"3GWWg>>>>ZZ1__&)#uoo#E7G5'7KKKKGGGHHH			s	#	# 4\#2#%6!7!78888			s	#	# 4\#2#%6!7!78888			s	#	# 4s<#4556666\!2!23333r9   formatc                    t          j                    }| t          j        k    r^ddlm}  |dd          }t          j        t          j                  }|	                    |           |
                    |           d S | t          j        k    rat          j        t          j                  }t          j        dd	          }|	                    |           |
                    |           d S dd
lm}  |            }t          j        dd	          }|	                    |           |
                    |           d S )Nr   )JsonFormatterz-{name}{asctime}{levelname}{message}{exc_info}{style)streamz4[%(asctime)s] %(levelname)s - %(name)s - %(message)sz%Y-%m-%d %H:%M:%S)datefmt)RichHandlerz%(message)sz[%X])logging	getLoggerr;   rA   pythonjsonlogger.jsonrg   StreamHandlersysstdoutsetFormatter
addHandlerr@   	Formatterrich.loggingrm   )re   root_loggerrg   	formatterhandlerrm   s         r(   set_logging_formatr{   }   s^   #%%K777777!M;3
 
 
	 'sz:::Y'''w'''''	9?	"	"'sz:::%B'
 
 
	 	Y'''w''''',,,,,,+--%mVDDD	Y'''w'''''r9   levelc                 \    t          j                                        | j                   d S N)rn   ro   setLevelvalue)r|   s    r(   set_logging_levelr      s'      -----r9   urlc                 X    |                      d          rt          j        d          | S )z
    Validate that the provided URL is compatible with the CLI.

    The memory:// backend is not compatible with the CLI as it doesn't persist
    across processes.
    z	memory://zThe memory:// URL scheme is not supported by the CLI.
The memory backend does not persist across processes.
Please use a persistent backend like Redis or Valkey.)
startswithtyperBadParameter)r   s    r(   validate_urlr      s:     ~~k"" 
 D
 
 	

 Jr9   r   c                     | dv rd S | S )N) *r8   )r   s    r(   handle_strike_wildcardr      s    	tLr9   c                 f   | d S |                      d          \  }}} |s| S |                     d          \  }}}t          j        |pd          }t          ||          }|t          u rt	          t          |                     S |t          u r|                                 dk    S  ||           S )NrP   .builtinsrX   true)
rpartition	importlibimport_modulegetattrr   r`   boollower)r   type_module_namemember_namemodulemembers          r(   interpret_python_valuer      s    }t%%c**ND!U "&//#"6"6KK$[%>J??FV[))F U,,,,	4{{}}&&ve}}r9   zPrint the version of docket)r*   c                  .    t          t                     d S r~   )printr   r8   r9   r(   versionr      s     
+r9   zStart a worker to process taskszdocket.tasks:standard_tasksdocketredis://localhost:6379/0
      rZ   rX   d   )milliseconds   Fr   z--taskszThe dotted path of a task collection to register with the docket. This can be specified multiple times.  A task collection is any iterable of async functions.DOCKET_TASKS)r*   envvardocket_z--docketzThe name of the docketDOCKET_NAMEzThe URL of the Redis server
DOCKET_URL)r*   r   callbacknamezThe name of the workerDOCKET_WORKER_NAMElogging_levelzThe logging levelDOCKET_LOGGING_LEVELlogging_formatzThe logging formatDOCKET_LOGGING_FORMATconcurrencyz3The maximum number of tasks to process concurrentlyDOCKET_WORKER_CONCURRENCYredelivery_timeoutz=How long to wait before redelivering a task to another worker DOCKET_WORKER_REDELIVERY_TIMEOUT)parserr*   r   reconnection_delayzQHow long to wait before reconnecting to the Redis server after a connection error DOCKET_WORKER_RECONNECTION_DELAYminimum_check_intervalz'The minimum interval to check for tasks$DOCKET_WORKER_MINIMUM_CHECK_INTERVALscheduling_resolutionz8How frequently to check for future tasks to be scheduled#DOCKET_WORKER_SCHEDULING_RESOLUTIONschedule_automatic_tasksz--schedule-automatic-taskszSchedule automatic tasks!suppress_internal_instrumentationzJ--suppress-internal-instrumentation/--no-suppress-internal-instrumentationzBSuppress OpenTelemetry spans for internal Redis polling operations/DOCKET_WORKER_SUPPRESS_INTERNAL_INSTRUMENTATIONuntil_finishedz--until-finishedz)Exit after the current docket is finishedhealthcheck_portz--healthcheck-portz"The port to serve a healthcheck onDOCKET_WORKER_HEALTHCHECK_PORTmetrics_portz--metrics-portz'The port to serve Prometheus metrics onDOCKET_WORKER_METRICS_PORTc                 n    t          j        t          j        |||||||	|
||||||                      d S )N)docket_namer   r   r   r   r   r   r   r   r   r   r   r   r   )r"   runr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s                   r(   workerr      sa    P K
#11#9"7%=.O)-%	
 	
 	
    r9   z,Strikes a task or parameters from the docketr   functionzThe function to strike)r*   r   	parameterzThe parameter to strikeoperatorz)The operator to compare the value againstz#The value to strike from the docketc           
      $     sst          j        d          t          |          r& pd }t          d| d dj         d           nt          d             d fd}t          j         |                       d S )	N1Must provide either a function and/or a parametermessage(all tasks)z	Striking  r    c                     K   t                    4 d {V } |                                d {V  d d d           d {V  d S # 1 d {V swxY w Y   d S Nr   r   )r   striker   r   r   r   r   r   value_s    r(   r   zstrike.<locals>.run  s$     wC000 	G 	G 	G 	G 	G 	G 	GF--)XvFFFFFFFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G   A
AAr    Nr   r   r   r   r   r"   r   	r   r   r   r   r   r   function_namer   r   s	   ``` ``  @r(   r   r   l  s   Z  
I 
 G
 
 
 	
 $E**F &#4}6Q-QQ)QQhnQQvQQRRRR$($$%%%G G G G G G G G G G G Kr9   z4Clear all queued and scheduled tasks from the docketc                 P     d fd}t          j         |                       d S )Nr    c                     K   t                    4 d {V } |                                  d {V }t          d| d d           d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr   zCleared z tasks from docket '')r   clearr   )r   cleared_countr   r   s     r(   r   zclear.<locals>.run  s;     wC000 	L 	L 	L 	L 	L 	L 	LF"(,,..000000MJ]JJJJJKKK	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	L 	Ls   1A
A),A)r   r"   r   )r   r   r   s   `` r(   r   r     sL    &L L L L L L L
 Kr9   z+Restores a task or parameters to the DocketzThe function to restorezThe parameter to restorez"The value to restore to the docketc           
      $     sst          j        d          t          |          r& pd }t          d| d dj         d           nt          d             d fd}t          j         |                       d S )	Nr   r   r   z
Restoring r   r    c                     K   t                    4 d {V } |                                d {V  d d d           d {V  d S # 1 d {V swxY w Y   d S r   )r   restorer   s    r(   r   zrestore.<locals>.run   s$     wC000 	H 	H 	H 	H 	H 	H 	HF..9hGGGGGGGGG	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	H 	Hr   r   r   r   s	   ``` ``  @r(   r   r     s   Z  
I 
 G
 
 
 	
 $E**F '#4}6R=RR9RRx~RRRRSSSS%8%%&&&H H H H H H H H H H H Kr9   zRun docket's built-in tasks)r*   r,   	tasks_appr   zAdds a trace task to the DocketzHowdy!r   zThe message to printdelayz0The delay before the task is added to the docket)r   r*   c                 X     d fd}t          j         |                       d S )Nr    c                  b  K   t                    4 d {V } t          j        t          j                  z   } |                     t          j        |                     d {V }t          d|j	        d| j
                   d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr   zAdded trace task  to the docket )r   r   nowr   utcaddr   tracer   keyr   r   rB   	executionr   r   r   r   s      r(   r   ztrace.<locals>.run-  d     wC000 	W 	W 	W 	W 	W 	W 	WF<--5D;fjjd;;GDDDDDDDDIUimUUfkUUVVV	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W 	W   A0B
B(+B(r   r   r   r   r   r   r   s   ```` r(   r   r     [    @W W W W W W W W W Kr9   zAdds a fail task to the Docketc                 X     d fd}t          j         |                       d S )Nr    c                  b  K   t                    4 d {V } t          j        t          j                  z   } |                     t          j        |                     d {V }t          d|j	        d| j
                   d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr   zAdded fail task r   )r   r   r   r   r   r   r   failr   r   r   r   s      r(   r   zfail.<locals>.runV  sd     wC000 	V 	V 	V 	V 	V 	V 	VF<--5D:fjjT::7CCCCCCCCITY]TTV[TTUUU	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	V 	Vr   r   r   r   s   ```` r(   r   r   6  s[    @V V V V V V V V V Kr9   zAdds a sleep task to the DocketrS   zThe number of seconds to sleepc                 X     d fd}t          j         |                       d S )Nr    c                  b  K   t                    4 d {V } t          j        t          j                  z   } |                     t          j        |                     d {V }t          d|j	        d| j
                   d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr   zAdded sleep task r   )r   r   r   r   r   r   r   sleepr   r   r   )r   rB   r   r   r   rS   r   s      r(   r   zsleep.<locals>.run  r   r   r   r   )r   r   rS   r   r   s   ```` r(   r   r   _  r   r9   r   c                     | |z
  }|t          d           k     rdt          |           S |t          d          k     rd|  S |t          d          k     r| dS dt          |           S )N   rZ   zat r   zin  ago)r   rF   )r   rB   deltas      r(   relative_timer    s    $JE	"%%%%%%'Z%%'''	1		eV~~	2&&&	&	&~~~'Z%%'''r9   snapshotc           	         i }| j         D ]}|j        j        }||vrdddddddd||<   ||         dxx         dz  cc<   ||         dxx         dz  cc<   |j        }||         d         |||         d         k     r|||         d<   ||         d         |||         d         k    r|||         d<   | j        D ]}|j        j        }||vrdddddddd||<   ||         d	xx         dz  cc<   ||         dxx         dz  cc<   |j        }||         d
         |||         d
         k     r|||         d
<   ||         d         |||         d         k    r|||         d<   |S )z?Get task count statistics by function name with timestamp data.r   N)runningqueuedtotaloldest_queuedlatest_queuedoldest_startedlatest_startedr  r   r  r
  r  r  r  r	  )r  r   r5   startedfuturerB   )r  statsr   	func_namer  rB   s         r(   get_task_statsr    s     :<E % 9 9	&/	E!!!%!%"&"&   E) 	i###q(###i!!!Q&!!! #)-.6y)*:;;;18E)-.)-.6y)*:;;;18E)-. _ 5 5	&/	E!!!%!%"&"&   E) 	i"""a'"""i!!!Q&!!! ~)_-5eI&77704E)_-)_-5eI&77704E)_-Lr9   z2Shows a snapshot of what's on the docket right nowr  z--statsz+Show task count statistics by function namec           
          dt           f fd}t          j         |                      }t          t          |j                  }t                      }ddt          |j                   t          |j	                   dt          |j
                   d|j         dg}t          d                    |          	          }	|	                    d
d           |	                    dd           |	                    dd           |	                    dd           |	                    dd           |j
        D ]K}
|	                     ||
j                  |
j        j        |
j        |
j         ||
j                             L|j        D ]8}
|	                     ||
j                  |
j        j        |
j        dd           9|                    |	           |rt1          |          r|                                 t          d	          }|                    dd           |                    ddd           |                    ddd           |                    ddd           |                    ddd           |                    ddd           t3                                          fdd           D ]}|         }d}d}|d!          ||d!                   }|d"          ||d"                   }|                    |t7          |d#                   t7          |d$                   t7          |d%                   ||           |                    |           d S d S d S )&Nr    c                     K   t                    4 d {V } D ]}|                     |           |                                  d {V cd d d           d {V  S # 1 d {V swxY w Y   d S r   )r   register_collectionr  )r   	task_pathr   r   r   s     r(   r   zsnapshot.<locals>.run  s     wC000 	+ 	+ 	+ 	+ 	+ 	+ 	+F" 6 6	**95555********		+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   4A""
A,/A,zDocket: zas of z
 workers, /z running
titleWhengreenri   FunctioncyanKeyr   yellowStartedr   z!Task Count Statistics by FunctionTotalzbold magentaright)rj   justifyRunningQueuedzOldest Queuedz
dim yellowzLatest Queuedc                      |          d         S )Nr  r8   )x
task_statss    r(   <lambda>zsnapshot.<locals>.<lambda>=  s    Aw1G r9   Tr   reverser  r	  r  r  r  )r   r"   r   r   r  takenr   rF   r^   workersr  total_tasksr   join
add_columnadd_rowrB   r   r5   r   r   r  r  r   r  sortedkeysstr)r   r   r   r  r   r  relativeconsolesummary_linestabler   stats_tabler  countsr  r	  r'  s   ```             @r(   r  r    s1   L+~ + + + + + + + + {3355!!H}hn55HiiG 	7-HN++--8#$$ F F8#$$F F'/';F F F	M 		-00111E	V7+++	Zv...	U&)))	XX...	Yg...% 
 
	HY^$$'MHY&''	
 	
 	
 	
 _ 
 
	HY^$$'M	
 	
 	
 	
 MM%  #'#H--
 !	'MMOOO&IJJJK"":V"<<<""7.'"RRR""9GW"MMM""88W"MMM""?,PW"XXX""?,PW"XXX $!!'G'G'G'GQU    	 $I. !# "/*6$,HVO-D$E$EM/*6$,HVO-D$E$EM##w((y)**x())!!    MM+&&&&&G#' #'!	' !	'r9   z-Monitor progress of a specific task executionr   z!The task execution key to monitorz--urlz-uDOCKET_REDIS_URLz*Redis URL (e.g., redis://localhost:6379/0))r   r*   r   z-dzDocket namec                 T     d fd}t          j         |                       dS )zZMonitor the progress of a specific task execution in real-time using event-driven updates.r    Nc                  `	  K   t                    4 d {V } |                                d {V }|s=t                      }|                    d dd           	 d d d           d {V  d S t                      }t          j        dt          j        dt          j        dt          j        dt          j	        d	i|
                                 d {V  |j        |j        |j        |j        j        |j        j        nd
}|j        j        }|j        j        }t%          t'          d          t)          d           t+                      t-                      d          d dt.          dt0          dd ffd}|d
k    r8|d
k    r2                    |pd||          |j         ||j                   dt6          ffd} |            }t          j        t          j	        fv r)|                    |           	 d d d           d {V  d S t9          ||d          5 }	d}
t;          |                                |
          2 3 d {V }|c|
                                 d {V  |j        k    r=d|j        j        |j        |j        |j        r|j                                         nd d}nl|d         dk    rt	          |d                   |!                    d          x}r||!                    d          x}r||!                    d          x}r,t1          j"        |          |_         ||j                    |            }|	#                    |           t          j        t          j	        fv r nِ?|d         dk    r|d         }|!                    d |j        j                  }|!                    d!|j        j                  }|d
k    r[|j        T7                    |pd||pd
          |j        x}r ||j                   n#                    |||pd"            |            }|	#                    |           6 d d d            n# 1 swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )#Nz![red]Error:[/red] Task with key 'z&' not found or function not registeredboldri   r  r  bluer  redr   z[bold blue]{task.description})	bar_widthT)expandtask_id
started_atr    c                     t          j        t          j                  |z
  }t	          j                    |                                z
  }|j        |          _        dS )z:Set progress bar start time based on execution start time.N)	r   r   r   r   time	monotonictotal_secondsr   
start_time)rB  rC  elapsed_since_startmonotonic_startactive_progresss       r(   set_progress_start_timez7watch.<locals>.monitor.<locals>.set_progress_start_time  sO    &.l8<&@&@:&M#"&."2"25H5V5V5X5X"X<K%g.999r9   zProcessing...)r  	completedc            	         t                      } d d g}
                    d          }|                    d| dj                                         d| d           r|                    d            r|                    d            t
          j        k    r|                    d	           n%t
          j        k    r|                    d
           d                    |          }	D| 	                    t          |dt          |                    t          dd                     n$|                     t          |d                     | S )z$Create the layout for watch display.z[bold]Task:[/bold] z[bold]Docket:[/bold] whitez[bold]State:[/bold] []z[/z[bold]Worker:[/bold] z[red bold]Error:[/red bold] u8   [green bold]✓ Task completed successfully[/green bold]u$   [red bold]✗ Task failed[/red bold]r  Ninfo)r   sizeprogressrQ   r   )r   getappendr   upperr   	COMPLETEDFAILEDr.  split_columnr^   update)layout
info_linesstate_colorinfo_sectionrK  current_stater   error_messager   progress_task_idstate_colorsworker_names       r(   create_display_layoutz5watch.<locals>.monitor.<locals>.create_display_layout  s    0#//9K99
 +..}gFF!!gKgg-:M:S:S:U:UggYdggg  
  M%%&Kk&K&KLLL ! V%%&T]&T&TUUU !N$<<<%%R    #n&;;;%%&LMMM#yy44 $/ ''|&s:OOOZaHHH    MM&F"C"C"CDDDr9      )r5  refresh_per_secondg      ?state)r   rg  r   errorrC  r   r   rh  rS  currentr  r   )rM  r  description)$r   get_executionr   r   r   	SCHEDULEDQUEUEDRUNNINGrW  rX  syncrg  r   rh  rS  ri  r  r   r   r   r   r   r   r   r   add_taskrC  r   r   r)   	subscriber   	isoformatrT  fromisoformatrZ  )r   r   r5  current_val	total_valprogress_messagerL  rd  r[  livepoll_intervaleventr   rh  rC  rK  r_  r`  ra  rb  rc  r   r   r   s                  @@@@@@r(   monitorzwatch.<locals>.monitorm  s     +s++ R	, R	, R	, R	, R	, R	, R	,v$22377777777I !))cccc      R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, iiG ((%v&('%uL ..""""""""" &OM&/&6K(1M
 %-9 "** 
 "*0I(19&:;;D)))"$$!##  O  $L LX LRV L L L L L L Q9q==#2#;#;$7#) $< $ $  '3++,<i>RSSS.6 . . . . . . . . . . . . .b +*,,F !9>;P QQQf%%%oR	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	,t fg!DDD X, !$#7''))=$ $ S, S, S, S, S, S, S,% }'nn.........$?m;; )0)2)>*3*:)2 (1';%.I$8$B$B$D$D$D)-
% 
%EE % V}//(6uW~(F(F%*YYx%8%886 1*0K$)IIg$6$665 2,1M).<)@)@@: "3;3I*3U3UI0/; 7 7$4i6J!" !" !"
 "7!6!8!8F+++ )*4*1-   "E	 v*44&+I&6).7I<N<T)U)U	+099%y'9'A, ,(
 %q==Y-A-M/73B3K3K$4$G*3.9.>Q 4L 4" 4" 0 2;1E#E: !&$;$;(8):N%& %& %&
 !0 6 6$4.9*30@0SO	 !7 !" !" !" "7!6!8!8F+++g$X, X, X, X, X, X, X, X, X, X, X, X, X, X, X,uR	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	, R	,sP   AR;FR&R8%Q?Q2#HQ?3R?R	RR	R
R'*R'r   r   )r   r   r   rz  s   ``` r(   watchr{  U  sT    0S, S, S, S, S, S, S, S,j K		r9   zLook at the workers on a docketworkers_appr,  highlight_taskc                 *   t          |d d          }t          d|            }|                    dd           |                    d	d
           |                    dd           t          j        t
          j                  }|D ]b}||j        z
  }fdt          |j                  D             }|	                    |j
        | d|rd                    |          nd           ct                      }	|	                    |           d S )Nc                     | j         S r~   )	last_seen)ws    r(   r(  zprint_workers.<locals>.<lambda>P  s    1; r9   Tr)  zWorkers in Docket: r  Namer  ri   z	Last Seenr  Tasksr  c                 ,    g | ]}|k    rd | dn|S )z[bold]z[/bold]r8   ).0taskr}  s     r(   
<listcomp>z!print_workers.<locals>.<listcomp>]  sD     
 
 
 '+n&<&<"T""""$
 
 
r9   r   r  z(none))r1  r   r/  r   r   r   r   r  r   r0  r   r.  r   r   )
r   r,  r}  sorted_workersr7  r   r   time_agor   r5  s
     `       r(   print_workersr  K  sJ   
 G)>)>MMMN;k;;<<<E	V6***	[000	WH---
,x|
$
$C  
 
))
 
 
 
v|,,
 
 

 	K %3DIIe8	
 	
 	
 	
 iiGMM%r9   lszList all workers on the docket)r   r*   c                      dt           t                   f fd}t          j         |                      }t	           |           d S )Nr    c                     K   t                    4 d {V } |                                  d {V cd d d           d {V  S # 1 d {V swxY w Y   d S r   )r   r,  )r   r   r   s    r(   r   zlist_workers.<locals>.run  s      wC000 	* 	* 	* 	* 	* 	* 	*F))))))))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*s   A
AAr
   r   r"   r   r  )r   r   r   r,  s   ``  r(   list_workersr  l  s`    &*z*- * * * * * * * k##%%  G'7#####r9   zfor-taskz>List the workers on the docket that can process a certain taskr  zThe name of the taskc                      dt           t                   f fd}t          j         |                      }t	          |            d S )Nr    c                     K   t                    4 d {V } |                                d {V cd d d           d {V  S # 1 d {V swxY w Y   d S r   )r   task_workers)r   r   r  r   s    r(   r   zworkers_for_task.<locals>.run  s      wC000 	3 	3 	3 	3 	3 	3 	3F,,T22222222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3s   A		
AA)r}  r  )r  r   r   r   r,  s   ```  r(   workers_for_taskr    sk    83z*- 3 3 3 3 3 3 3 3 k##%%  G'74888888r9   r   )r   r   )r   r   r~   )]r"   enumr   rn   rK   rI   rr   rE  r   r   r   	functoolsr   typingr   r   r	   r
   r   rich.consoler   rich.layoutr   	rich.liver   rich.progressr   r   r   r   r   r   
rich.tabler   r   r   r   r   r   r   r   r   r   r   r   r   dictr3  floatr)   Typerr-   __annotations__Enumr/   r;   rF   rM   rd   r{   r   r   r   r   commandr   r1   rs   isattyr?   r@   listOptionr`   r   EQUALArgumentr   r   r   r   	add_typerr   r   r   r  r  r  r{  r|  r  r  r  r8   r9   r(   <module>r     s          				  



  2 2 2 2 2 2 2 2 2 2       < < < < < < < < < < < <                                                               6 6 6 6 6 6 6 6 6 6 / / / / / / / /       DcN+ 6; 4S>D()       8 5;	M  U[       sDI       TY   >X ># > > > >3S 3 3 3 3 43?  4y  4  4  4  4F(y (T ( ( ( (8.X .$ . . . .c c     # #*    #*     , 	&       	*    
'' 	 	# 	 	 *++--B	9? 	 		! 		! 		s### 		s### 	 	 	 	 	GV VS	/ "	
 	
 	
		V ) 	
 	
 	
	V* 
.!	
 	
 	
	
+V: d
)'	
 	
 	
	;VH $)&	
 	
 	
	IVX %*'	
 	
 	
	YVh F.	
 	
 	
	iVv "P5	
 	
 	
	wVF "% 6	
 	
 	
	
GV\ &:9	
 	
 	
	]Vl %K8	
 	
 	
	mV| ((+	
 	
 	
	}VJ (1XUD	
 	
 	
	(KVZ <	
 	
 	
	[Vh  d
 53	
 	
 	
	iVx d
:/	
 	
 	
	yVH 
IV V V Vr @AA 	 	 	 	 	 	#U< <)+	
 	
 	
	< *+	
 	
 	
	< <	
 	
 	
	<* d
6	
 	
 	
	+<6 ) 	
 	
 	
	7<F 
.!	
 	
 	
	
G<V 
W< < < BA<~ HII 	 	#! ) 	
 	
 	
	 
.!	
 	
 	
	
" 
#   JI4 ?@@ 	 	 	 	 	 	#U< <*+	
 	
 	
	< ++	
 	
 	
	< <	
 	
 	
	<* d
5	
 	
 	
	+<6 ) 	
 	
 	
	7<F 
.!	
 	
 	
	
G<V 
W< < < A@<~ %	&  	5;    ig & & & 9:: 	 	# 	 		!;% %) 	
 	
 	
	% 
.!	
 	
 	
	
%" '	
 	
 	
	#%. C	
 	
 	
	/%< 
=% % % ;:%P 899 	 	# 	 		!;% %) 	
 	
 	
	% 
.!	
 	
 	
	
%" '	
 	
 	
	#%. C	
 	
 	
	/%< 
=% % % :9%P 9:: 	 	# 	
 		!;% %) 	
 	
 	
	% 
.!	
 	
 	
	
%" 1	
 	
 	
	#%. C	
 	
 	
	/%< 
=% % % ;:%P	(x 	(x 	(C 	( 	( 	( 	(@@	#tCx$../
/0@ @ @ @F FGG 
'' 	 	# 	Gz' z'S	/ "	
 	
 	
		z' ) 	
 	
 	
	z'* 
.!	
 	
 	
	
+z': >	
 	
 	
	;z'H 
Iz' z' z' HGz'z ABB 	# 	'l l	3,OPPPP	Ql	%=		
 	
 	
	
l  		
 	
 	
	l( 
)l l l CBl^ '5;	*D  U[    k	 * * * "& 
# $J 
	   B $%EFF 	 	#!$ $) 	
 	
 	
	$ 
.!	
 	
 	
	
$" 
#$ $ $ GF$6 		I   $ 	 	#-9 9
'	
 	
 	
	9 ) 	
 	
 	
	9 
.!	
 	
 	
	
9. 
/9 9 9	 9 9 9r9   