
    .h              
          d dl Z d dlmZ d dlmZ d dlmZmZ d dlZd dl	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mZ d d	lmZ  e j        e          Zd
edefdZe	 	 	 dd
edeeef         dz  dedefd            ZdS )    N)asynccontextmanager)Any)urljoinurlparse)
TaskStatus)MemoryObjectReceiveStreamMemoryObjectSendStream)aconnect_sse)create_mcp_http_client)SessionMessageurlreturnc                 F    t          | t          |           j                  S )N)r   r   path)r   s    K/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/mcp/client/sse.pyremove_request_paramsr      s    3*+++       ,  headerstimeoutsse_read_timeoutc                (   	
K   t          j        d          \  }t          j        d          \  t          j                    4 d{V }	 t                              dt                                 t          |          4 d{V 	t          	d t          j	        ||                    4 d{V 	 

j
                                         t                              d           t           j        fd	t          t                   f
 fd
}dt          f	fd}|                    |           d{V }t                              d|            |                    ||           	 |fW V  |j                                         n# |j                                         w xY w	 ddd          d{V  n# 1 d{V swxY w Y   ddd          d{V  n# 1 d{V swxY w Y                                    d{V                                   d{V  n9#                                  d{V                                   d{V  w xY w	 ddd          d{V  dS # 1 d{V swxY w Y   dS )z
    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`.
    r   NzConnecting to SSE endpoint: )r   GET)read)r   zSSE connection establishedtask_statusc                   K   	 	                                 2 3 d {V }t                              d|j                    |j        xdk    r t	          |j                  }t                              d|            t                    }t          |          }|j        |j        k    s|j	        |j	        k    r.d| }t          
                    |           t          |          |                     |           dk    r	 t          j                            |j                  }t                              d|            nP# t           $ rC}t          
                    d|            
                    |           d {V  Y d }~zd }~ww xY wt%          |          }
                    |           d {V  	 t                              d|j                    6 nO# t           $ rB}t          
                    d	|            
                    |           d {V  Y d }~nd }~ww xY w
                                 d {V  d S # 
                                 d {V  w xY w)
NzReceived SSE event: endpointzReceived endpoint URL: z2Endpoint origin does not match connection origin: messagezReceived server message: zError parsing server message: zUnknown SSE event: zError in sse_reader: )	aiter_sseloggerdebugeventr   datainfor   netlocschemeerror
ValueErrorstartedtypesJSONRPCMessagemodel_validate_json	Exceptionsendr   warningaclose)r   sseendpoint_url
url_parsedendpoint_parsed	error_msgr   excsession_messageevent_sourceread_stream_writerr   s            r   
sse_readerzsse_client.<locals>.sse_reader:   s4     3>-9-C-C-E-E -* -* -* -* -* -* -*c &-OCI-O-O P P P&)i)37>sCH7M7M(.,Tl,T,T)* )* )* 6>c]]
:B<:P:P,6,=AW,W,W/9/@/>/E0F 0F1UFR1U 1U -6 -3LL,C,C,C2<Y2G2G,G(3(;(;L(I(I(I(I)2)56;6J6^6^037. 7.G -3LL0UG0U0U-. -. -. -. 09 )5 )5 )5,2LL0VQT0V0V-. -. -. 3E2I2I#2N2N,N,N,N,N,N,N,N,4HHHH)5 ;I:Q:Q.@.E.Eo.V.V(V(V(V(V(V(V(V(V)*(.,M#),M,M)* )* )* )*W .F-E\  ) ? ? ?"LL)F)F)FGGG"4"9"9#">">>>>>>>>>>>>>? #5";";"="=========="4";";"="=========sf   G. G,C)G. 	AE
G. 
F8FG. FAG. -I .
H:88H50I 5H::I I5r3   c           
      p  K   	 4 d {V  2 3 d {V }t                               d|                                | |j                            ddd                     d {V }|                                 t                               d|j                    6 	 d d d           d {V  n# 1 d {V swxY w Y   n4# t          $ r'}t                               d|            Y d }~nd }~ww xY w	                                 d {V  d S # 	                                 d {V  w xY w)NzSending client message: Tjson)by_aliasmodeexclude_none)r=   z"Client message sent successfully: zError in post_writer: )
r!   r"   postr   
model_dumpraise_for_statusstatus_coder.   r(   r1   )r3   r8   responser7   clientwrite_streamwrite_stream_readers       r   post_writerzsse_client.<locals>.post_writerr   sa     8': & & & & & & & &=P !& !& !& !& !& !& !&/$*LL(T?(T(T%& %& %& 6<[[(4-<-D-O-O59179= .P .* .* 6A 6& 6& 0& 0& 0& 0& 0& 0&H %-$=$=$?$?$?$*LL)B+3+?)B )B%& %& %& %& >Q=P& & & & & & & & & & & & & & & & & & & & & & & & & & &$  ) I I I"LL)G#)G)GHHHHHHHHI #/"5"5"7"7777777777,"5"5"7"777777777s]   C	 B7B#BB7%C	 7
CC	 CC	 D 	
C:C50D 5C::D D5z(Starting post writer with endpoint URL: )anyiocreate_memory_object_streamcreate_task_groupr!   r%   r   r   r
   httpxTimeoutrE   rC   r"   TASK_STATUS_IGNOREDr   strstart
start_sooncancel_scopecancelr1   )r   r   r   r   read_streamtgr;   rI   r3   rF   r9   r:   rG   rH   s   `        @@@@@r   
sse_clientrW      s      & ',&G&J&J#(-(I!(L(L%L%&(( j( j( j( j( j( j( j(Bi	(KKS7LS7Q7QSSTTT-g>>> d1 d1 d1 d1 d1 d1 d1&'!M'8HIII	   c1 c1 c1 c1 c1 c1 c1 c1
 " )::<<<LL!=>>> 8=7P6> 6>%/_6> 6> 6> 6> 6> 6> 6> 6>p8 8 8 8 8 8 8 8 82 *,*)=)=#=#=#=#=#=#=LKKQ<QQ   MM+|<<<1)<77777..0000..00000Gc1 c1 c1 c1 c1 c1 c1 c1 c1 c1 c1 c1 c1 c1 c1 c1 c1 c1 c1 c1 c1 c1 c1 c1 c1 c1 c1d1 d1 d1 d1 d1 d1 d1 d1 d1 d1 d1 d1 d1 d1 d1 d1 d1 d1 d1 d1 d1 d1 d1 d1 d1 d1 d1L %++---------%%'''''''''' %++---------%%'''''''''''Uj( j( j( j( j( j( j( j( j( j( j( j( j( j( j( j( j( j( j( j( j( j( j( j( j( j( j( j( j( j(s   JA H4.G.B7G9F GF5	5G9G.
GG.GG.H4.
G8	8H4;G8	<H4?5J46I**J
JJ)Nr   r   )logging
contextlibr   typingr   urllib.parser   r   rJ   rM   	anyio.abcr   anyio.streams.memoryr   r	   	httpx_sser
   	mcp.typesr+   mcp.shared._httpx_utilsr   mcp.shared.messager   	getLogger__name__r!   rP   r   dictfloatrW    r   r   <module>rg      sy    * * * * * *       * * * * * * * *               R R R R R R R R " " " " " "       : : : : : : - - - - - -		8	$	$,s ,s , , , ,  &*$	( (	(#s(^d"( ( 	( ( ( ( ( (r   