
    !<iD                     2   d Z ddlmZ ddlmZ ddlmZ ddlmZ dede	edef         z  d	e
edf         d
z  dee	ef         d
z  de	d
z  defdZde	edef         z  d	e
edf         d
z  dee	ef         d
z  de	d
z  de	f
dZd
d
d
ddede	edef         z  d	e
edf         d
z  dee	ef         d
z  de	d
z  dd
fdZd
d
d
ddede	edef         z  d	e
edf         d
z  dee	ef         d
z  de	d
z  dd
fdZ	 ddede	edef         z  d
z  dedd
fdZdedd
fdZd
S )a  Testing utilities for making assertions about scheduled tasks.

Example usage:
    from docket import Docket, testing

    docket = Docket("redis://localhost:6379/0")

    # Schedule a task
    await docket.add(my_task)("arg1", kwarg1="value1")

    # Assert it's scheduled
    await testing.assert_task_scheduled(docket, my_task, args=("arg1",))

    # After completion
    await worker.run_until_finished()
    await testing.assert_no_tasks(docket)
    )Callable)Any)Docket)	Execution	executionfunction.argsNkwargskeyreturnc                    t          |t                    r|n|j        }| j        j        |k    rdS || j        |k    rdS || j        |k    rdS |7|                                D ]"\  }}|| j        vs| j        |         |k    r dS #dS )z1Check if an execution matches the given criteria.FNT)
isinstancestr__name__r   r   r	   itemsr
   )r   r   r	   r
   r   function_namekvs           /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/docket/testing.py_matches_criteriar      s     !+8S 9 9PHHx?PM"m33u 9=C//u INd22u LLNN 	 	DAq	(((I,<Q,?1,D,Duu -E 4    c                 8   g }t          | t                    r| n| j        }|                    d|            ||                    d|           ||                    d|           ||                    d|           d                    |          S )z#Format criteria for error messages.z	function=Nzkey=zargs=zkwargs=z, )r   r   r   appendjoin)r   r	   r
   r   partsr   s         r   _format_criteriar   8   s     E *8S 9 9PHHx?PM	LL,],,---
^C^^$$$%T%%&&&)v))***99Ur   )r	   r
   r   docketc                  K   |                                   d{V }t          |j                  }|D ]}t          |||||          r dS t	          ||||          }t          |t                    r|n|j        }	|st          d|	 d          d |D             }
d	                    |
          }t          d|	 d| d|           )au  Assert that a task matching the criteria is scheduled.

    Args:
        docket: The Docket instance to check
        function: The task function or function name (string)
        args: Optional tuple of positional arguments to match
        kwargs: Optional dict of keyword arguments to match (subset matching)
        key: Optional task key to match

    Raises:
        AssertionError: If no matching task is found

    Example:
        await assert_task_scheduled(docket, my_task)
        await assert_task_scheduled(docket, my_task, args=("foo",))
        await assert_task_scheduled(docket, "my_task", key="task-123")
    NTask z( not found: no tasks scheduled on docketc                 ^    g | ]*}d |j         j         d|j        d|j        d|j        d	+S z  - (args=	, kwargs=, key=)r   r   r	   r
   r   .0es     r   
<listcomp>z)assert_task_scheduled.<locals>.<listcomp>z   sW        	Zqz"YY!&YYQXYYquYYY  r   
z not found with z

Scheduled tasks:
)
snapshotlistfuturer   r   r   r   r   AssertionErrorr   )r   r   r	   r
   r   r,   	all_tasksr   criteriar   found_tasks	found_strs               r   assert_task_scheduledr4   N   s2     2 __&&&&&&&&H X_%%I  	Y$DD 	FF	  $<<H *8S 9 9PHHx?PM 
KMKKK
 
 	

   K 		+&&I
	) 	) 	)x 	) 	)&	) 	)  r   c                B  K   |                                   d{V }t          |j                  }|D ]k}t          |||||          rVt	          |t
                    r|n|j        }t          d| d|j        j         d|j	        d|j
        d|j        d          ldS )a6  Assert that no task matching the criteria is scheduled.

    Args:
        docket: The Docket instance to check
        function: The task function or function name (string)
        args: Optional tuple of positional arguments to match
        kwargs: Optional dict of keyword arguments to match (subset matching)
        key: Optional task key to match

    Raises:
        AssertionError: If a matching task is found

    Example:
        await assert_task_not_scheduled(docket, my_task)
        await assert_task_not_scheduled(docket, my_task, args=("foo",))
    Nr   z* found but should not be scheduled
Found: r"   r#   r$   r%   )r,   r-   r.   r   r   r   r   r/   r   r	   r
   r   )	r   r   r	   r
   r   r,   r0   r   r   s	            r   assert_task_not_scheduledr6      s      0 __&&&&&&&&H X_%%I  	Y$DD 	(28S(A(AXHHxGXM G G G#,5G G=F^G G#*G G4=MG G G  	 r   countc                H  K   |                                   d{V }t          |j                  }|t          |          }d}n>t	          |t
                    r|n|j        t          fd|D                       }d }||k    rt          d| d| d|           dS )a  Assert the number of scheduled tasks matches the expected count.

    Args:
        docket: The Docket instance to check
        function: Optional task function or name to count (if None, counts all tasks)
        count: Expected number of tasks

    Raises:
        AssertionError: If the count doesn't match

    Example:
        await assert_task_count(docket, count=5)  # All tasks
        await assert_task_count(docket, my_task, count=2)  # Specific function
    Nz	all tasksc              3   <   K   | ]}|j         j        k    d V  dS )   N)r   r   )r(   r)   r   s     r   	<genexpr>z$assert_task_count.<locals>.<genexpr>   s2      XX1:3F-3W3W13W3W3W3WXXr   z
tasks for z	Expected  z, found )	r,   r-   r.   lenr   r   r   sumr/   )r   r   r7   r,   r0   actual_countfunction_descr   s          @r   assert_task_countrA      s      ( __&&&&&&&&H X_%%I9~~#$.x$=$=T8CTXXXXiXXXXX4]44uVVVVVVVWWW r   c                    K   |                                   d{V }t          |j                  }|rCd |D             }d                    |          }t	          dt          |           d|           dS )zAssert that no tasks are scheduled on the docket.

    Args:
        docket: The Docket instance to check

    Raises:
        AssertionError: If any tasks are scheduled

    Example:
        await assert_no_tasks(docket)
    Nc                 ^    g | ]*}d |j         j         d|j        d|j        d|j        d	+S r!   r&   r'   s     r   r*   z#assert_no_tasks.<locals>.<listcomp>   sY     
 
 
 ^1:&]]af]]]]STSX]]]
 
 
r   r+   zExpected no tasks, found z task(s) scheduled:
)r,   r-   r.   r   r/   r=   )r   r,   r0   r2   r3   s        r   assert_no_tasksrD      s       __&&&&&&&&H X_%%I 

 

 
 
 IIk**	XIXXYXX
 
 	

 
r   )N)__doc__collections.abcr   typingr   docket.docketr   docket.executionr   r   tupledictboolr   r   r4   r6   intrA   rD    r   r   <module>rO      s   $ % $ $ $ $ $                   & & & & & &HS#X&& S/D
  cNT!	
 
t 
   <HS#X&&
S/D
  cNT! 
t	
 	   4 $($(5 5 55HS#X&&5 S/D
 	5
 cNT!5 
t5 
5 5 5 5x $($($ $ $$HS#X&&$ S/D
 	$
 cNT!$ 
t$ 
$ $ $ $R 15"X "X"XHS#X&&-"X 	"X
 
"X "X "X "XJ
& 
T 
 
 
 
 
 
r   