§
    öŽ’j|  ã                   óN   — 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	dS )z8
TaskStore - Abstract interface for task state storage.
é    )ÚABCÚabstractmethod)ÚResultÚTaskÚTaskMetadataÚ
TaskStatusc            
       ó–  — 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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              ƒ   ó
   K  — 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   s      úQC:\Projects\DSCons\.venv\Lib\site-packages\mcp\shared\experimental\tasks\store.pyÚcreate_taskzTaskStore.create_task   ó
   è è € € € ó    c              ƒ   ó
   K  — dS )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  — dS )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  — dS )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  — dS )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  — dS )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  — dS )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  — dS )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  — dS )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
   r
   
   s9  € € € € € ðð ð ð #ðð àðð �t‘ðð 
ð	ð ð ñ „^ðð& ð	 cð 	¨d°T©kð 	ð 	ð 	ñ „^ð	ð ð %)Ø%)ð	ð àðð ˜TÑ!ðð ˜d™
ð	ð
 
ðð ð ñ „^ðð0 ð
¨#ð 
°vð 
À$ð 
ð 
ð 
ñ „^ð
ð ð	¨ð 	°¸±ð 	ð 	ð 	ñ „^ð	ð ð "ðð à�d‘
ðð 
ˆt�DŒz˜3 ™:Ð%Ô	&ðð ð ñ „^ðð ð	¨ð 	°ð 	ð 	ð 	ñ „^ð	ð ð¨Sð °Tð ð ð ñ „^ðð" ð¨3ð °4ð ð ð ñ „^ðð ð r   r
   N)
r-   Úabcr   r   Ú	mcp.typesr   r   r   r   r
   r   r   r   ú<module>r4      s‹   ððð ð $Ð #Ð #Ð #Ð #Ð #Ð #Ð #à <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <ðRð Rð Rð Rð R�ñ Rô Rð Rð Rð Rr   