
    $j&                        d Z ddlm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mZmZ ddlZddlmZ ddlZddlmZ erdd	lmZ dd
lmZ  ee          Z G d d          ZdS )z;Lifespan and Docket task infrastructure for FastMCP Server.    )annotationsN)AsyncIterator)AsyncExitStackasynccontextmanagersuppress)TYPE_CHECKINGAny)SharedContext)
get_logger)Docket)FastMCPc                  b    e Zd ZdZedd            Zedd            Zedd	            ZddZ	dS )LifespanMixinzDMixin providing lifespan and Docket task infrastructure for FastMCP.selfr   returnDocket | Nonec                    | j         S )zGet the Docket instance if Docket support is enabled.

        Returns None if Docket is not enabled or server hasn't been started yet.
        )_docket)r   s    f/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/fastmcp/server/mixins/lifespan.pydocketzLifespanMixin.docket   s     |    AsyncIterator[None]c           
      K   ddl m}m} |                    t	          j        |                     }	  |            sUt                      4 d{V  dW V  ddd          d{V  n# 1 d{V swxY w Y   	 |                    |           dS 	 t          | 	                                 d{V           }nH# t          $ r;}t                              d|            t          j        j        r g }Y d}~nd}~ww xY w|sUt                      4 d{V  dW V  ddd          d{V  n# 1 d{V swxY w Y   	 |                    |           dS ddlm}m} ddlm} ddl m}	m}
  ||j        j        |j        j                  4 d{V 	 }|| _        |D ]}|                    |           |	                    |          }	 |j        j        |j        j        |j        j        |j        j        d	}|j        j        r|j        j        |d
<    ||fi |4 d{V }|| _        |
                    |          }	 t?          j         |!                                          }	 dW V  |"                                 tG          t>          j$                  5  | d{V  ddd           n# 1 swxY w Y   nR# |"                                 tG          t>          j$                  5  | d{V  ddd           w # 1 swxY w Y   w xY w|
                    |           d| _        n!# |
                    |           d| _        w xY w	 ddd          d{V  n# 1 d{V swxY w Y   |	                    |           d| _        n!# |	                    |           d| _        w xY w	 ddd          d{V  n# 1 d{V swxY w Y   |                    |           dS # |                    |           w xY w)a  Manage Docket instance and Worker for background task execution.

        Docket infrastructure is only initialized if:
        1. pydocket is installed (fastmcp[tasks] extra)
        2. There are task-enabled components (task_config.mode != 'forbidden')

        This means users with pydocket installed but no task-enabled components
        won't spin up Docket/Worker infrastructure.
        r   )_current_serveris_docket_availableNzFailed to get tasks: )r   Worker)settings)_current_docket_current_worker)nameurl)concurrencyredelivery_timeoutreconnection_delayminimum_check_intervalr    )%fastmcp.server.dependenciesr   r   setweakrefrefr
   resetlist	get_tasks	Exceptionloggerwarningfastmcpr   &mounted_components_raise_on_load_errorr   r   r   r   r   r    r!   r   register_with_docketr"   r#   r$   r%   worker_name_workerasynciocreate_taskrun_forevercancelr   CancelledError)r   r   r   server_tokentask_componentser   r   r   r   r   r   	componentdocket_tokenworker_kwargsworkerworker_tokenworker_tasks                     r   _docket_lifespanzLifespanMixin._docket_lifespan$   s      	UTTTTTTT '**7;t+<+<==N	0 '&(( (??        EEEE                          P !!,/////G%"&T^^-=-='='='='='='=">"> % % %:q::;;;#J "$	% # (??        EEEE                          l !!,/////g .-------((((((        v_)O'   '( '( '( '( '( '( '( '( % "1 ; ;I226::::.226::( (0'B.6o.P.6o.P2:/2X	5 5M  2 L080Kf-  &vf>>>> 0 0 0 0 0 0 0&'-'6':':6'B'B
0*1*=f>P>P>R>R*S*SK6 % + 2 2 4 4 4%-g.D%E%E !6 !6*5$5$5$5$5$5$5$5!6 !6 !6 !6 !6 !6 !6 !6 !6 !6 !6 !6 !6 !6 !6 !, 2 2 4 4 4%-g.D%E%E !6 !6*5$5$5$5$5$5$5$5!6 !6 !6 !6 !6 !6 !6 !6 !6 !6 !6 !6 !6 !6 !6 !6 ,11,???+/DLL ,11,???+/DL/////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 $)),777#'DLL $)),777#'DL'''''O'( '( '( '( '( '( '( '( '( '( '( '( '( '( '( '( '( '( '( '( '( '( '( '( '( '( '(T !!,/////O!!,////s\  O. A)O. )
A33O. 6A37O. 'B; :O. ;
D 1C;6O. ;D  O. D1O. 1
D;;O. >D;?O. =O. 7OAN)M$&L0.K3-L0 	J5)L05J99L0<J9=L0.L/	L8LLLLLL0M$0MM$N$
M.	.N1M.	2N5ON00O4O. 
OO. OO. .Pc           
    h  K   | j         4 d {V  | j        r| xj        dz  c_        d}n	d| _        d}	 d d d           d {V  n# 1 d {V swxY w Y   |s	 d W V  | j         4 d {V  | xj        dz  c_        | j        dk    rd| _        d | _        	 d d d           d {V  n# 1 d {V swxY w Y   n`# | j         4 d {V  | xj        dz  c_        | j        dk    rd| _        d | _        	 d d d           d {V  w # 1 d {V swxY w Y   w xY wd S t	                      }	 |                    |                     |                      d {V }|                    |                                            d {V  || _        d| _        | j        D ]/}|                    |	                                           d {V  0| j
                                         	 d W V  | j
                                         n# | j
                                         w xY w	 	 t          j        d          5  |                                 d {V  d d d            n# 1 swxY w Y   | j         4 d {V  | xj        dz  c_        | j        dk    rd| _        d | _        	 d d d           d {V  n# 1 d {V swxY w Y   d S d S # | j         4 d {V  | xj        dz  c_        | j        dk    rd| _        d | _        	 d d d           d {V  w # 1 d {V swxY w Y   w xY w# 	 t          j        d          5  |                                 d {V  d d d            n# 1 swxY w Y   | j         4 d {V  | xj        dz  c_        | j        dk    rd| _        d | _        	 d d d           d {V  w # 1 d {V swxY w Y   w # | j         4 d {V  | xj        dz  c_        | j        dk    rd| _        d | _        	 d d d           d {V  w # 1 d {V swxY w Y   w xY wxY w)N   FTr   )shield)_lifespan_lock_lifespan_result_set_lifespan_ref_count_lifespan_resultr   enter_async_context	_lifespanrC   	providerslifespan_startedr'   clearanyioCancelScopeaclose)r   should_enter_lifespanstackuser_lifespan_resultproviders        r   _lifespan_managerzLifespanMixin._lifespan_manager   s%	     & 	- 	- 	- 	- 	- 	- 	- 	-( -((A-(((-%%+,((,%,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- % 		5. 5 5 5 5 5 5 5 5,,1,,/14449104-4	5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 54. 5 5 5 5 5 5 5 5,,1,,/14449104-4	5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
 F   	5).)B)B4>>RVCWCW)X)X#X#X#X#X#X#X ++D,A,A,C,CDDDDDDDDD$8D!(,D% !N E E//0A0A0C0CDDDDDDDDDDM&##%%%%##%%%%%5&d333 ) ),,..((((((() ) ) ) ) ) ) ) ) ) ) ) ) ) )  . 5 5 5 5 5 5 5 5,,1,,/14449104-4	5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 54. 5 5 5 5 5 5 5 5,,1,,/14449104-4	5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5	5&d333 ) ),,..((((((() ) ) ) ) ) ) ) ) ) ) ) ) ) )  . 5 5 5 5 5 5 5 5,,1,,/14449104-4	5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 54. 5 5 5 5 5 5 5 5,,1,,/14449104-4	5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5sb  $A
AAB< -*B**
B47B4<D
*D5D
DDDD-B9L, 'H ,L, H!!L, &K ;I"K "I&&K )I&*K :*J77
KKL)*LL)
L!!L)$L!%L),P1.OM*O*M..O1M.2O5P1*N?-P1?
O		P1O	P1P.*P
P.
P&&P.)P&*P..P1Nonec                "   
 ddl m}  |            sdS ddlm}m}m}m}m
 ddlm	m
mm d
 fd
}d
 fd}d
 fd}d
 fd}	| j        j        |<   | j        j        |<   | j        j        |<   |	 j        j        |<   dS )zRegister SEP-1686 task protocol handlers with SDK.

        Only registers handlers if docket is installed. Without docket,
        task protocol requests will return "method not found" errors.
        r   )r   N)CancelTaskRequestGetTaskPayloadRequestGetTaskRequestListTasksRequestServerResult)tasks_cancel_handlertasks_get_handlertasks_list_handlertasks_result_handlerreqr]   r   r_   c                z   K   | j                             dd          } |           d {V } |          S NT)by_aliasexclude_noneparams
model_dump)rd   rj   resultr_   r   ra   s      r   handle_get_taskzDLifespanMixin._setup_task_protocol_handlers.<locals>.handle_get_task   sU      Z**Dt*LLF,,T6::::::::F<'''r   r\   c                z   K   | j                             dd          } |           d {V } |          S rf   ri   )rd   rj   rl   r_   r   rc   s      r   handle_get_task_resultzKLifespanMixin._setup_task_protocol_handlers.<locals>.handle_get_task_result   U      Z**Dt*LLF//f========F<'''r   r^   c                   K   | j         r| j                             dd          ni } |           d {V } |          S rf   ri   )rd   rj   rl   r_   r   rb   s      r   handle_list_taskszFLifespanMixin._setup_task_protocol_handlers.<locals>.handle_list_tasks   sk       :
%%t$%GGG 
 .-dF;;;;;;;;F<'''r   r[   c                z   K   | j                             dd          } |           d {V } |          S rf   ri   )rd   rj   rl   r_   r   r`   s      r   handle_cancel_taskzGLifespanMixin._setup_task_protocol_handlers.<locals>.handle_cancel_task   rp   r   )rd   r]   r   r_   )rd   r\   r   r_   )rd   r^   r   r_   )rd   r[   r   r_   )r&   r   	mcp.typesr[   r\   r]   r^   r_   fastmcp.server.tasks.requestsr`   ra   rb   rc   _mcp_serverrequest_handlers)r   r   r[   r\   r]   r^   rm   ro   rr   rt   r_   r`   ra   rb   rc   s   `         @@@@@r   _setup_task_protocol_handlersz+LifespanMixin._setup_task_protocol_handlers   s    	DCCCCC""$$ 	F	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	
	( 	( 	( 	( 	( 	( 	( 	(
	( 	( 	( 	( 	( 	( 	( 	(
	( 	( 	( 	( 	( 	( 	( 	(	( 	( 	( 	( 	( 	( 	( 	( =L).9" 	)*?@ ?P)*:;?Q)*;<<<r   N)r   r   r   r   )r   r   r   r   )r   r   r   rY   )
__name__
__module____qualname____doc__propertyr   r   rC   rX   ry    r   r   r   r      s        NN   X ^0 ^0 ^0 ^0@ 25 25 25 25h;R ;R ;R ;R ;R ;Rr   r   )r}   
__future__r   r5   r(   collections.abcr   
contextlibr   r   r   typingr   r	   rQ   uncalled_forr
   r0   fastmcp.utilities.loggingr   r   r   fastmcp.server.serverr   rz   r.   r   r   r   r   <module>r      s.   A A " " " " " "   ) ) ) ) ) ) D D D D D D D D D D % % % % % % % %  & & & & & &  0 0 0 0 0 0 .------	H		\R \R \R \R \R \R \R \R \R \Rr   