
    kKj#                       d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	m
Z
mZmZ ddlZddlmZ ddlmZ ddlmZmZ dd	lm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 ddl m!Z!m"Z" ddl#m$Z$ ddl%m&Z&  G d de!      Z'y)z-Streamable HTTP transport for FastMCP Client.    )annotationsN)AsyncIteratorCallable)AnyLiteralcast)ClientSession)streamable_http_client)McpHttpClientFactorycreate_mcp_http_client)AnyUrl)Unpack)
BearerAuth)OAuth)get_http_headers)ClientTransportSessionKwargs)FastMCPDeprecationWarning)normalize_timeout_to_timedeltac                      e Zd ZdZ	 	 	 	 	 d
	 	 	 	 	 	 	 	 	 	 	 ddZddZddZej                  	 	 	 	 dd       Z	ddZ
d Zdd	Zy)StreamableHttpTransportzUTransport implementation that connects to an MCP server via Streamable HTTP Requests.Nc                   t        |t              rt        |      }t        |t              r|j                  d      st	        d      || _        |xs i | _        || _        || _        ||ddl	}|j                  dt        d       | j                  |       |6t        j                  j                  rddl	}|j                  dt         d       t#        |      | _        d	| _        d| _        y)
a  Initialize a Streamable HTTP transport.

        Args:
            url: The MCP server endpoint URL.
            headers: Optional headers to include in requests.
            auth: Authentication method - httpx.Auth, "oauth" for OAuth flow,
                or a bearer token string.
            sse_read_timeout: Deprecated. Use read_timeout_seconds in session_kwargs.
            httpx_client_factory: Optional factory for creating httpx.AsyncClient.
                If provided, must accept keyword arguments: headers, auth,
                follow_redirects, and optionally timeout. Using **kwargs is
                recommended to ensure forward compatibility.
            verify: SSL certificate verification. Accepts False to disable
                verification, a path to a CA bundle, or an ssl.SSLContext
                for full control. None (default) uses httpx defaults (verification
                enabled). Ignored when httpx_client_factory is provided.
        httpz0Invalid HTTP/S URL provided for Streamable HTTP.Nr   zBoth 'httpx_client_factory' and 'verify' were provided. The 'verify' parameter will be ignored because 'httpx_client_factory' takes precedence. Configure SSL verification directly in your httpx_client_factory instead.   )
stacklevela   The `sse_read_timeout` parameter is deprecated and no longer used. The new streamable_http_client API does not support this parameter. Use `read_timeout_seconds` in session_kwargs or configure timeout on the httpx client via `httpx_client_factory` instead.F)
isinstancer   str
startswith
ValueErrorurlheadershttpx_client_factoryverifywarningswarnUserWarning	_set_authfastmcpsettingsdeprecation_warningsr   r   sse_read_timeoutforward_incoming_headers_get_session_id_cb)selfr    r!   authr+   r"   r#   r$   s           o/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/fastmcp/client/transports/http.py__init__z StreamableHttpTransport.__init__   s    4 c6"c(C#s#3>>&+AOPP
 }"$8!:@+0BMMN    	t'44K .    !??O P.3%CG    c                   |dk(  r;t        | j                  | j                  xs | j                               }|| _
        y t	        |t               rh|j                  | j                         |j                  t        j                  u r'| j                  xs | j                         }|||_        |}|| _
        y t	        |t              rt        |      }|| _
        y |}|| _
        y )Noauth)r"   )r   r    r"   _make_verify_factoryr   _bindhttpxAsyncClientr   r   r/   )r.   r/   resolvedfactorys       r0   r'   z!StreamableHttpTransport._set_authe   s    7?%)%>%> &/,,.H$ (0	 e$JJtxx  ((E,=,==33Rt7P7P7R&07D-H
 (0		 c"!$'H (0	 H'/	r2   c                x    | j                   y | j                   	 	 	 d	 	 	 	 	 	 	 dfd}t        t        |      S )Nc                    |t        j                  dd      }d|d}| | |d<   |||d<   t        j                  di |S )	N      >@g     r@readT)follow_redirectstimeoutr#   r!   r/    )r7   Timeoutr8   )r!   rA   r/   kwargsr#   s       r0   r:   z=StreamableHttpTransport._make_verify_factory.<locals>.factory   s_    
 --59$(" &F
 "$+y!!%v$$.v..r2   )NNN)r!   dict[str, str] | NonerA   zhttpx.Timeout | Noner/   zhttpx.Auth | Nonereturnzhttpx.AsyncClient)r#   r   r   )r.   r:   r#   s     @r0   r5   z,StreamableHttpTransport._make_verify_factory|   s]    ;; .2,0&*	/*	/)	/ $	/ 		/$ ('22r2   c           	      K   | j                   rt        dh      | j                  z  }nt        | j                        }d }|j	                  d      Nt        t        j                  |j	                  d            }t        j                  d|j                               }| j                         }| j                  ' | j                  d|| j                  dd|rd|ini }n0| |||| j                  	      }nt        ||| j                  	      }|4 d {    t        | j                   |
      4 d {   }|\  }}	}
|
| _        t%        ||	fi |4 d {   }| d d d       d {    d d d       d {    d d d       d {    y 7 }7 _7 >7 +# 1 d {  7  sw Y   ;xY w7 2# 1 d {  7  sw Y   BxY w7 9# 1 d {  7  sw Y   y xY ww)Nauthorization)includeread_timeout_secondsr=   r>   T)r!   r/   r@   rA   )r!   rA   r/   )http_clientrB   )r,   r   r!   dictgetr   datetime	timedeltar7   rC   total_secondsr5   r"   r/   r   r
   r    r-   r	   )r.   session_kwargsr!   rA   rJ   verify_factoryrK   	transportread_streamwrite_streamget_session_idsessions               r0   connect_sessionz'StreamableHttpTransport.connect_session   s     ((&/@ADLLPG4<<(G )-45A#'""N$6$67M$N$  mmD/C/Q/Q/STG 224$$03$33 YY!% ,3Iw'	K '(YYK 1YYK K"488EE8A5K~&4D#$\-;  	 FE KKE    	 FEEE KKKs   DG"FG"G9F:G=F6F
F6 F&F61F2F66GF4GG"GG"GF6F6F1%F(&F1-F64G6G	<F?=G	GG"GGGG"c                \    | j                   r	 | j                         S y # t        $ r Y y w xY wN)r-   	Exceptionr.   s    r0   rV   z&StreamableHttpTransport.get_session_id   s8    ""..00   s    	++c                   K   d | _         y wrZ   )r-   r\   s    r0   closezStreamableHttpTransport.close   s     "&s   	c                "    d| j                    dS )Nz<StreamableHttpTransport(url='z')>)r    r\   s    r0   __repr__z StreamableHttpTransport.__repr__   s    /z==r2   )NNNNN)r    zstr | AnyUrlr!   rE   r/   *httpx.Auth | Literal['oauth'] | str | Noner+   z'datetime.timedelta | float | int | Noner"   McpHttpClientFactory | Noner#   z"ssl.SSLContext | bool | str | None)r/   ra   )rF   rb   )rQ   zUnpack[SessionKwargs]rF   zAsyncIterator[ClientSession])rF   z
str | None)rF   r   )__name__
__module____qualname____doc__r1   r'   r5   
contextlibasynccontextmanagerrX   rV   r^   r`   rB   r2   r0   r   r      s    _
 *.;?DH<@59EHEH 'EH 9	EH
 BEH :EH 3EHN0.32 ##7 57	%7 $7r'>r2   r   )(rf   
__future__r   rg   rN   sslcollections.abcr   r   typingr   r   r   r7   mcpr	   mcp.client.streamable_httpr
   mcp.shared._httpx_utilsr   r   pydanticr   typing_extensionsr   r(   fastmcp.client.auth.bearerr   fastmcp.client.auth.oauthr   fastmcp.client.dependenciesr   fastmcp.client.transports.baser   r   fastmcp.exceptionsr   fastmcp.utilities.timeoutr   r   rB   r2   r0   <module>rx      sR    3 "   
 3 % %   = P  $  1 + 8 I 8 DA>o A>r2   