
    Ki                    l    d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	m
Z
 e
d   Ze G d d	             Zy)
zTaskConfig for MCP SEP-1686 background task execution modes.

This module defines the configuration for how tools, resources, and prompts
handle task-augmented execution as specified in SEP-1686.
    )annotationsN)Callable)	dataclass)AnyLiteral)	forbiddenoptionalrequiredc                  :    e Zd ZU dZdZded<   edd       Zd	dZy)

TaskConfiga  Configuration for MCP background task execution (SEP-1686).

    Controls how a component handles task-augmented requests:

    - "forbidden": Component does not support task execution. Clients must not
      request task augmentation; server returns -32601 if they do.
    - "optional": Component supports both synchronous and task execution.
      Client may request task augmentation or call normally.
    - "required": Component requires task execution. Clients must request task
      augmentation; server returns -32601 if they don't.

    Example:
        ```python
        from fastmcp import FastMCP
        from fastmcp.server.tasks import TaskConfig

        mcp = FastMCP("MyServer")

        # Background execution required
        @mcp.tool(task=TaskConfig(mode="required"))
        async def long_running_task(): ...

        # Supports both modes (default when task=True)
        @mcp.tool(task=TaskConfig(mode="optional"))
        async def flexible_task(): ...
        ```
    r	   TaskModemodec                &     | |rd      S d      S )zConvert boolean task flag to TaskConfig.

        Args:
            value: True for "optional" mode, False for "forbidden" mode.

        Returns:
            TaskConfig with appropriate mode.
        r	   r   )r    )clsvalues     g/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/fastmcp/server/tasks/config.py	from_boolzTaskConfig.from_bool2   s     e
====    c                    | j                   dk(  ry|}t        j                  |      st        |      r|j                  }t        |t              r|j                  }t        j                  |      st        d| d      y)a  Validate that function is compatible with this task config.

        Task execution requires async functions. Raises ValueError if mode
        is "optional" or "required" but function is synchronous.

        Args:
            fn: The function to validate (handles callable classes and staticmethods).
            name: Name for error messages.

        Raises:
            ValueError: If task execution is enabled but function is sync.
        r   N'z`' uses a sync function but has task execution enabled. Background tasks require async functions.)
r   inspect	isroutinecallable__call__
isinstancestaticmethod__func__iscoroutinefunction
ValueError)selffnnamefn_to_checks       r   validate_functionzTaskConfig.validate_function>   s}     99#   $"++Kk<0%..K**;7D6 < <  8r   N)r   boolreturnr   )r"   zCallable[..., Any]r#   strr'   None)	__name__
__module____qualname____doc__r   __annotations__classmethodr   r%   r   r   r   r   r      s*    8  D(	> 	>r   r   )r-   
__future__r   r   collections.abcr   dataclassesr   typingr   r   r   r   r   r   r   <module>r4      sD    #  $ !  67 F F Fr   