
    Ch,                     :   S SK r S SKJr  S SKJr  S SKJrJr  S SKrS SK	r	S SK
Jr  S SKJrJr  S SKJr  S SKJr  S SKJr  S S	KJrJr  S S
KJr  \ R4                  " \5      rS\S\4S jr\SSS\S4S\S\\\4   S-  S\ S\ S\S\	RB                  S-  4S jj5       r"g)    N)asynccontextmanager)Any)urljoinurlparse)
TaskStatus)MemoryObjectReceiveStreamMemoryObjectSendStream)aconnect_sse)SSEError)McpHttpClientFactorycreate_mcp_http_client)SessionMessageurlreturnc                 @    [        U [        U 5      R                  5      $ )N)r   r   path)r   s    H/home/james-whalen/.local/lib/python3.13/site-packages/mcp/client/sse.pyremove_request_paramsr      s    3**++       i,  headerstimeoutsse_read_timeouthttpx_client_factoryauthc           
     4  ^ ^^^^^#    [         R                  " S5      u  mn[         R                  " S5      u  mm[         R                  " 5        ISh  vN n [        R	                  S[        T 5       35        U" X[        R                  " X#S9S9 ISh  vN m[        TST 5       ISh  vN mTR                  R                  5         [        R	                  S5        [         R                  4S[        [           4UUU 4S	 jjjnS
[        4UUU4S jjn	UR                  U5      I Sh  vN n
[        R	                  SU
 35        UR                  X5         UT47v   UR                   R#                  5         SSS5      ISh  vN   SSS5      ISh  vN   TR%                  5       I Sh  vN   TR%                  5       I Sh  vN   SSS5      ISh  vN   g GN GNJ GN7 N! UR                   R#                  5         f = f N! , ISh  vN  (       d  f       N= f N! , ISh  vN  (       d  f       N= f N Ny! TR%                  5       I Sh  vN    TR%                  5       I Sh  vN    f = f N! , ISh  vN  (       d  f       g= f7f)a  
Client transport for SSE.

`sse_read_timeout` determines how long (in seconds) the client will wait for a new
event before disconnecting. All other HTTP operations are controlled by `timeout`.

Args:
    url: The SSE endpoint URL.
    headers: Optional headers to include in requests.
    timeout: HTTP timeout for regular operations.
    sse_read_timeout: Timeout for SSE read operations.
    auth: Optional HTTPX authentication handler.
r   NzConnecting to SSE endpoint: )read)r   r   r   GETzSSE connection establishedtask_statusc                   >#     T
R                  5         S h  vN n[        R                  SUR                   35        UR                  =S:X  a    [	        TUR
                  5      n[        R                  SU 35        [        T5      n[        U5      nUR                  UR                  :w  d  UR                  UR                  :w  a%  SU 3n[        R                  U5        [        U5      eU R                  U5        M  S:X  ai   [        R                  R                  UR
                  5      n[        R                  SU 35        [%        U5      nTR#                  U5      I S h  vN   GM[   [        R'                  SUR                   35        GM   GN}! [         a;  n[        R!                  S5        TR#                  U5      I S h  vN     S nAGM  S nAff = f Nx
 Oj! [(         a  n	[        R!                  S	5        U	eS n	A	f[         a9  n[        R!                  S
5        TR#                  U5      I S h  vN     S nAOS nAff = fTR+                  5       I S h  vN    g ! TR+                  5       I S h  vN    f = f7f)NzReceived SSE event: endpointzReceived endpoint URL: z2Endpoint origin does not match connection origin: messagezReceived server message: zError parsing server messagezUnknown SSE event: zEncountered SSE exceptionzError in sse_reader)	aiter_sseloggerdebugeventr   datar   netlocschemeerror
ValueErrorstartedtypesJSONRPCMessagemodel_validate_json	Exception	exceptionsendr   warningr   aclose)r   sseendpoint_url
url_parsedendpoint_parsed	error_msgr"   excsession_messagesse_excevent_sourceread_stream_writerr   s             r   
sse_readersse_client.<locals>.sse_readerE   s    ,>-9-C-C-E #Zc &/CCII;-O P&)ii)37>sCHH7M(.7N|n5](^5=c]
:B<:P,6,=,=AWAW,W/9/@/@ODZDZ/Z 3eeqdr0s -6 -3LL,C2<Y2G,G(3(;(;L(I)2)56;6J6J6^6^037.G -3LL;TU\T]9^,_ ;I:Q.@.E.Eo.V(V(V)*(.9LSYYK7X(YG#Z6 09 )5,2,<,<=[,\2D2I2I#2N,N,N,4)5 )WC .FH  ( *",,-HI")M( ?",,-BC"4"9"9#">>>? #5";";"==="4";";"===s   JG% G#FG#C*G% AF	G% (G!)-G% G#
G#)GGGG% GG% #G% $I) %
I/HI)I<H?=II) II) J"I%#J)J=J >JJr6   c                 T  >#     T IS h  vN   T  S h  vN n[         R                  SU 35        TR                  U UR                  R	                  SSSS9S9I S h  vN nUR                  5         [         R                  SUR                   35        M   N N N<
 S S S 5      IS h  vN    O?! , IS h  vN  (       d  f       O(= f! [         a    [         R                  S5         Of = fTR                  5       I S h  vN    g ! TR                  5       I S h  vN    f = f7f)NzSending client message: Tjson)by_aliasmodeexclude_none)rB   z"Client message sent successfully: zError in post_writer)
r$   r%   postr"   
model_dumpraise_for_statusstatus_coder0   r1   r4   )r6   r;   responseclientwrite_streamwrite_stream_readers      r   post_writersse_client.<locals>.post_writerv   s    8':':=P !n/$*LL3KOK\1]$^5;[[(4-<-D-D-O-O59179= .P .* 6A 6& 0&H %-$=$=$?$*LL3UV^VjVjUk1l$m (;!n0& >Q (;':':':':':  ) E",,-CDE #/"5"5"777,"5"5"777s   D(C BC B1BBBAB1B 8B1C BB1B1C *B-+C 0D
 1C7B:8CC D
 C C-*D
 ,C--D
 0D(DD(
D%D!D%%D(z(Starting post writer with endpoint URL: )anyiocreate_memory_object_streamcreate_task_groupr$   r%   r   httpxTimeoutr
   rJ   rH   TASK_STATUS_IGNOREDr   strstart
start_sooncancel_scopecancelr4   )r   r   r   r   r   r   read_streamtgr?   rN   r6   rK   r=   r>   rL   rM   s   `          @@@@@r   
sse_clientr]      s    8 ',&G&G&J#(-(I(I!(L%L%&&((B\	(LL78Mc8R7STU+EMM'4a '  " ))::<LL!=> 8=7P7P/>%/_/> />b8 8 8( *,*)=#=LLL#KL>!Z[MM+<1)<77..0i  r %++---%%'''{ )((Z $> ..0i      r .' %++---%%'''{ )(((sW  AJGJI>>IG"IH'.G%
/H'2A<H.G(
/-HG*$H>H'	H	
H'IH%II>1I2I>	I
I>JI<J"I%H'(H*H	H	H'H"HH"H'%I'H>	-H0.H>	:II>I>I9I
I92I5
3I99I><J>JJJJ)#logging
contextlibr   typingr   urllib.parser   r   rP   rS   	anyio.abcr   anyio.streams.memoryr   r	   	httpx_sser
   httpx_sse._exceptionsr   	mcp.typesr-   mcp.shared._httpx_utilsr   r   mcp.shared.messager   	getLogger__name__r$   rV   r   dictfloatAuthr]    r   r   <module>ro      s     *  *     R " *  P -			8	$,s ,s ,  &*$1G"{(	{(#s(^d"{( {( 	{(
 /{( **t
{( {(r   