
    Ki;                     @    d Z ddlmZ ddlmZmZmZmZ  G d d      Zy)z
TaskContext - Pure task state management.

This module provides TaskContext, which manages task state without any
server/session dependencies. It can be used standalone for distributed
workers or wrapped by ServerTaskContext for full server integration.
    )	TaskStore)TASK_STATUS_COMPLETEDTASK_STATUS_FAILEDResultTaskc                       e Zd ZdZdedefdZedefd       Z	edefd       Z
edefd       Zdd
Zdedd	fdZdedd	fdZdedd	fdZy	)TaskContexta  
    Pure task state management - no session dependencies.

    This class handles:
    - Task state (status, result)
    - Cancellation tracking
    - Store interactions

    For server-integrated features (elicit, create_message, notifications),
    use ServerTaskContext from mcp.server.experimental.

    Example (distributed worker):
        async def worker_job(task_id: str):
            store = RedisTaskStore(redis_url)
            task = await store.get_task(task_id)
            ctx = TaskContext(task=task, store=store)

            await ctx.update_status("Working...")
            result = await do_work()
            await ctx.complete(result)
    taskstorec                 .    || _         || _        d| _        y )NF)_task_store
_cancelled)selfr
   r   s      q/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/mcp/shared/experimental/tasks/context.py__init__zTaskContext.__init__$   s    
    returnc                 .    | j                   j                  S )zThe task identifier.)r   taskIdr   s    r   task_idzTaskContext.task_id)   s     zz   r   c                     | j                   S )zThe current task state.)r   r   s    r   r
   zTaskContext.task.   s     zzr   c                     | j                   S )z(Whether cancellation has been requested.r   r   s    r   is_cancelledzTaskContext.is_cancelled3   s     r   Nc                     d| _         y)z
        Request cancellation of this task.

        This sets is_cancelled=True. Task work should check this
        periodically and exit gracefully if set.
        TNr   r   s    r   request_cancellationz TaskContext.request_cancellation8   s     r   messagec                 x   K   | j                   j                  | j                  |       d{   | _        y7 
w)zn
        Update the task's status message.

        Args:
            message: The new status message
        )status_messageN)r   update_taskr   r   )r   r   s     r   update_statuszTaskContext.update_statusA   s7       ;;22LL" 3 
 

 
s   +:8:resultc                    K   | j                   j                  | j                  |       d{    | j                   j                  | j                  t               d{   | _        y7 =7 w)zv
        Mark the task as completed with the given result.

        Args:
            result: The task result
        N)status)r   store_resultr   r"   r   r   )r   r$   s     r   completezTaskContext.completeM   s[      kk&&t||V<<<;;22LL( 3 
 

 	=
s!   *A.A*2A.A, A.,A.errorc                    K   | j                   j                  | j                  t        |       d{   | _        y7 
w)zt
        Mark the task as failed with an error message.

        Args:
            error: The error message
        )r&   r!   N)r   r"   r   r   r   )r   r)   s     r   failzTaskContext.failZ   s:       ;;22LL%  3 
 

 
s   0?=?)r   N)__name__
__module____qualname____doc__r   r   r   propertystrr   r
   boolr   r   r#   r   r(   r+    r   r   r	   r	      s    , T  )  
 ! ! ! d   d  

3 

4 


V 
 

 
 
r   r	   N)	r/   #mcp.shared.experimental.tasks.storer   	mcp.typesr   r   r   r   r	   r3   r   r   <module>r6      s!    : M MX
 X
r   