
    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 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 dd	lmZ dd
lm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!  G d de      Z"y)z6Server-Sent Events (SSE) transport for FastMCP Client.    )annotationsN)AsyncIterator)AnyLiteralcast)ClientSession)
sse_client)McpHttpClientFactory)AnyUrl)Unpack)
BearerAuth)OAuth)get_http_headers)ClientTransportSessionKwargs)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
y)SSETransportzOTransport implementation that connects to an MCP server via Server-Sent Events.Nc                b   t        |t              rt        |      }t        |t              r|j                  d      st	        d      || _        |xs i | _        || _        || _        ||dd l	}|j                  dt        d       | j                  |       d| _        t        |      | _        y )Nhttpz$Invalid HTTP/S URL provided for SSE.r   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.   )
stacklevelF)
isinstancer   str
startswith
ValueErrorurlheadershttpx_client_factoryverifywarningswarnUserWarning	_set_authforward_incoming_headersr   sse_read_timeout)selfr   r   authr&   r   r    r!   s           n/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/fastmcp/client/transports/sse.py__init__zSSETransport.__init__   s     c6"c(C#s#3>>&+ACDD
 }"$8!:@+0BMMN    	t.3% >?O P    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       r)   r$   zSSETransport._set_authD   s    7?%)%>%> &/,,.H$ (0	 e$JJtxx  ((E,=,==33Rt7P7P7R&07D-H
 (0		 c"!$'H (0	 H'/	r+   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 )	Ng      >@g     r@)readT)follow_redirectstimeoutr    r   r(    )r0   Timeoutr1   )r   r8   r(   kwargsr    s       r)   r3   z2SSETransport._make_verify_factory.<locals>.factory`   s_    
 --59$(" &F
 "$+y!!%v$$.v..r+   )NNN)r   dict[str, str] | Noner8   zhttpx.Timeout | Noner(   zhttpx.Auth | Nonereturnzhttpx.AsyncClient)r    r   r
   )r'   r3   r    s     @r)   r.   z!SSETransport._make_verify_factory[   s]    ;; .2,0&*	/*	/)	/ $	/ 		/$ ('22r+   c                  K   i }| j                   rt        dh      | j                  z  |d<   nt        | j                        |d<   | j                  | j                  j                         |d<   |j                  d      <t        t        j                  |j                  d            }|j                         |d<   | j                  | j                  |d<   n| j                         }|||d<   t        | j                  fd| j                  i|4 d {   }|\  }}t        ||fi |4 d {   }| d d d       d {    d d d       d {    y 7 E7 ,7 # 1 d {  7  sw Y   )xY w7  # 1 d {  7  sw Y   y xY ww)	Nauthorization)includer   r&   read_timeout_secondsr8   r   r(   )r%   r   r   dictr&   total_secondsgetr   datetime	timedeltar   r.   r	   r   r(   r   )	r'   session_kwargsclient_kwargsrA   verify_factory	transportread_streamwrite_streamsessions	            r)   connect_sessionzSSETransport.connect_sessiont   s     )+ (( /):;dllJ )$ (,DLL'9M)$   ,040E0E0S0S0UM,-45A#'""N$6$67M$N$  (<'I'I'KM)$$$0484M4MM01!668N)8F45dhhHTYYH-HHI(1%K$\-;   IHH     IHHHs   DFEFE91E2E95E";E9E E9FE7FE9 E9"E4	(E+)E4	0E97F9F?F FFc                "    d| j                    dS )Nz<SSETransport(url='z')>)r   )r'   s    r)   __repr__zSSETransport.__repr__   s    $TXXJc22r+   )NNNNN)r   zstr | AnyUrlr   r<   r(   *httpx.Auth | Literal['oauth'] | str | Noner&   z'datetime.timedelta | float | int | Noner   McpHttpClientFactory | Noner    z"ssl.SSLContext | bool | str | None)r(   rQ   )r=   rR   )rG   zUnpack[SessionKwargs]r=   zAsyncIterator[ClientSession])r=   r   )__name__
__module____qualname____doc__r*   r$   r.   
contextlibasynccontextmanagerrN   rP   r9   r+   r)   r   r      s    Y
 *.;?DH<@59&Q&Q '&Q 9	&Q
 B&Q :&Q 3&QP0.32 ##& 5&	%& $&P3r+   r   )#rV   
__future__r   rW   rE   sslcollections.abcr   typingr   r   r   r0   mcpr   mcp.client.sser	   mcp.shared._httpx_utilsr
   pydanticr   typing_extensionsr   fastmcp.client.auth.bearerr   fastmcp.client.auth.oauthr   fastmcp.client.dependenciesr   fastmcp.client.transports.baser   r   fastmcp.utilities.timeoutr   r   r9   r+   r)   <module>rg      sL    < "   
 ) % %   % 8  $ 1 + 8 I DE3? E3r+   