
    Ki                     F    d Z ddlmZmZ ddlmZmZmZmZ  G d de      Z	y)z8
TaskStore - Abstract interface for task state storage.
    )ABCabstractmethod)ResultTaskTaskMetadata
TaskStatusc            
       R   e Zd ZdZe	 ddededz  defd       Zedededz  fd       Z	e	 	 ddede
dz  d	edz  defd
       Zedededdfd       Zedededz  fd       Ze	 ddedz  deee   edz  f   fd       Zededefd       Zededdfd       Zededdfd       Zy)	TaskStorez
    Abstract interface for task state storage.

    This is a pure storage interface - it doesn't manage execution.
    Implementations can use in-memory storage, databases, Redis, etc.

    All methods are async to support various backends.
    Nmetadatatask_idreturnc                    K   yw)a?  
        Create a new task.

        Args:
            metadata: Task metadata (ttl, etc.)
            task_id: Optional task ID. If None, implementation should generate one.

        Returns:
            The created Task with status="working"

        Raises:
            ValueError: If task_id already exists
        N )selfr   r   s      o/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/mcp/shared/experimental/tasks/store.pycreate_taskzTaskStore.create_task           c                    K   yw)z
        Get a task by ID.

        Args:
            task_id: The task identifier

        Returns:
            The Task, or None if not found
        Nr   r   r   s     r   get_taskzTaskStore.get_task(   r   r   statusstatus_messagec                    K   yw)a  
        Update a task's status and/or message.

        Args:
            task_id: The task identifier
            status: New status (if changing)
            status_message: New status message (if changing)

        Returns:
            The updated Task

        Raises:
            ValueError: If task not found
            ValueError: If attempting to transition from a terminal status
                (completed, failed, cancelled). Per spec, terminal states
                MUST NOT transition to any other status.
        Nr   )r   r   r   r   s       r   update_taskzTaskStore.update_task4   r   r   resultc                    K   yw)z
        Store the result for a task.

        Args:
            task_id: The task identifier
            result: The result to store

        Raises:
            ValueError: If task not found
        Nr   )r   r   r   s      r   store_resultzTaskStore.store_resultM   r   r   c                    K   yw)z
        Get the stored result for a task.

        Args:
            task_id: The task identifier

        Returns:
            The stored Result, or None if not available
        Nr   r   s     r   
get_resultzTaskStore.get_resultZ   r   r   cursorc                    K   yw)z
        List tasks with pagination.

        Args:
            cursor: Optional cursor for pagination

        Returns:
            Tuple of (tasks, next_cursor). next_cursor is None if no more pages.
        Nr   )r   r!   s     r   
list_taskszTaskStore.list_tasksf   r   r   c                    K   yw)z
        Delete a task.

        Args:
            task_id: The task identifier

        Returns:
            True if deleted, False if not found
        Nr   r   s     r   delete_taskzTaskStore.delete_tasku   r   r   c                    K   yw)a\  
        Wait until the task status changes.

        This blocks until either:
        1. The task status changes
        2. The wait is cancelled

        Used by tasks/result to wait for task completion or status changes.

        Args:
            task_id: The task identifier

        Raises:
            ValueError: If task not found
        Nr   r   s     r   wait_for_updatezTaskStore.wait_for_update   r   r   c                    K   yw)z
        Signal that a task has been updated.

        This wakes up any coroutines waiting in wait_for_update().

        Args:
            task_id: The task identifier
        Nr   r   s     r   notify_updatezTaskStore.notify_update   r   r   )N)NN)__name__
__module____qualname____doc__r   r   strr   r   r   r   r   r   r   r    tuplelistr#   boolr%   r'   r)   r       r   r
   r
   
   s     # t 
	 & 	c 	dTk 	 	  %)%)	 T! d
	
 
 0 
# 
v 
$ 
 
 	 	 	 	  "d
 
tDz3:%	&  	 	 	 	 S T  " 3 4  r2   r
   N)
r-   abcr   r   	mcp.typesr   r   r   r   r
   r   r2   r   <module>r5      s#    $ < <R Rr2   