o
    c۷i                     @   s@   d Z ddlmZmZ ddlmZmZmZmZ G dd deZ	dS )z8
TaskStore - Abstract interface for task state storage.
    )ABCabstractmethod)ResultTaskTaskMetadata
TaskStatusc                
   @   s  e Zd ZdZe	ddededB defddZedededB fdd	Z	e		dded
e
dB dedB defddZedededdfddZedededB fddZe	ddedB deee edB f fddZededefddZededdfddZededdfddZdS )	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                       dS )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
   r   r   Y/home/ubuntu/vllm_env/lib/python3.10/site-packages/mcp/shared/experimental/tasks/store.pycreate_task       zTaskStore.create_taskc                    r   )z
        Get a task by ID.

        Args:
            task_id: The task identifier

        Returns:
            The Task, or None if not found
        Nr   r   r
   r   r   r   get_task(   r   zTaskStore.get_taskstatusstatus_messagec                    r   )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   r   r   r   update_task4   r   zTaskStore.update_taskresultc                    r   )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   r   r   r   store_resultM   r   zTaskStore.store_resultc                    r   )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   r   r   r   
get_resultZ   r   zTaskStore.get_resultcursorc                    r   )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   r   r   r   
list_tasksf   r   zTaskStore.list_tasksc                    r   )z
        Delete a task.

        Args:
            task_id: The task identifier

        Returns:
            True if deleted, False if not found
        Nr   r   r   r   r   delete_tasku   r   zTaskStore.delete_taskc                    r   )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   r   r   r   wait_for_update   r   zTaskStore.wait_for_updatec                    r   )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   r   r   r   notify_update   r   zTaskStore.notify_update)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   r   
   sT    	r   N)
r"   abcr   r   	mcp.typesr   r   r   r   r   r   r   r   r   <module>   s    