o
    ôæh<	  ã                   @   sh   d dl Z d dlmZ d dlmZmZmZ edƒZedƒZdedef de	e d	eegef fd
d„Z
dS )é    N)ÚCallable)ÚAnyÚTypeVarÚget_type_hintsÚTÚRÚfunc.Úrequest_typeÚreturnc              
      s0  zt  ˆ ¡}tˆ ƒ}W n tttfy   ‡ fdd„ Y S w |j ¡ D ]+\}}|jt j	j
krN| |¡}||krN|jt j	jurF‡ fdd„  S ‡ fdd„  S q#|j ¡ D ]=\}}|jt j	jt j	jfv r‘| |¡}||kr‘|jt j	jur{‡ fdd„  S dtdttgtf f‡ fdd	„}||ƒ  S qT‡ fd
d„S )aÍ  
    Create a wrapper function that knows how to call func with the request object.

    Returns a wrapper function that takes the request and calls func appropriately.

    The wrapper handles three calling patterns:
    1. Positional-only parameter typed as request_type (no default): func(req)
    2. Positional/keyword parameter typed as request_type (no default): func(**{param_name: req})
    3. No request parameter or parameter with default: func()
    c                    ó   ˆ ƒ S ©N© ©Ú_©r   r   úd/var/www/html/openai_agents/venv/lib/python3.10/site-packages/mcp/server/lowlevel/func_inspection.pyÚ<lambda>   ó    z%create_call_wrapper.<locals>.<lambda>c                    r   r   r   r   r   r   r   r   !   r   c                    s   ˆ | ƒS r   r   ©Úreqr   r   r   r   #   s    c                    r   r   r   r   r   r   r   r   ,   r   Únamer
   c                    s   ‡‡ fdd„S )Nc                    s   ˆ di ˆ| i¤ŽS )Nr   r   r   )r   r   r   r   r   1   s    zCcreate_call_wrapper.<locals>.make_keyword_wrapper.<locals>.<lambda>r   ©r   r   r   r   Úmake_keyword_wrapper0   s   z1create_call_wrapper.<locals>.make_keyword_wrapperc                    r   r   r   r   r   r   r   r   6   r   )ÚinspectÚ	signaturer   Ú
ValueErrorÚ	TypeErrorÚ	NameErrorÚ
parametersÚitemsÚkindÚ	ParameterÚPOSITIONAL_ONLYÚgetÚdefaultÚemptyÚPOSITIONAL_OR_KEYWORDÚKEYWORD_ONLYÚstrr   r   )r   r	   ÚsigÚ
type_hintsÚ
param_nameÚparamÚ
param_typer   r   r   r   Úcreate_call_wrapper	   s0   
ÿ
€
 €r.   )r   Úcollections.abcr   Útypingr   r   r   r   r   Útyper.   r   r   r   r   Ú<module>   s    0