
    "<i                        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dS )
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                  B    e Zd ZU dZdZded<   edd            ZddZdS )
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modevalueboolreturnc                "     | |rdn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    )clsr   s     /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/fastmcp/server/tasks/config.py	from_boolzTaskConfig.from_bool2   s      se<

====    fnCallable[..., Any]namestrNonec                    | j         dk    rdS |}t          j        |          st          |          r|j        }t          |t                    r|j        }t          j        |          st          d| d          dS )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)selfr   r   fn_to_checks       r   validate_functionzTaskConfig.validate_function>   s     9##F  $$ 	&" 	&+Kk<00 	/%.K*;77 	<D < < <  	 	r   N)r   r   r   r   )r   r   r   r   r   r   )	__name__
__module____qualname____doc__r   __annotations__classmethodr   r*   r   r   r   r   r      se          8  D	> 	> 	> [	>     r   r   )r.   
__future__r   r   collections.abcr   dataclassesr   typingr   r   r   r   r   r   r   <module>r5      s     # " " " " "  $ $ $ $ $ $ ! ! ! ! ! !         67 F F F F F F F F F Fr   