
    k7i                       S SK Jr  S SKrS SKJrJr  S SKJrJrJ	r	  S SK
J
r
Jr  S SKJr  S SKJrJrJrJrJrJr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SK J!r!  S SK"J#r#J$r$  \(       a  S SK%J&r&  / SQr'\RP                  " \)5      r*\" S\S9r+\" SS\S9r,\ " S S\\+\,4   5      5       r-\" SSS9 " S S\\+   5      5       r.      SS jr/ " S S5      r0g)    )annotationsN)	AwaitableSequence)	dataclassfieldreplace)datetimetimezone)partial)TYPE_CHECKINGAnyGenericLiteralProtocolruntime_checkable)ReadResourceContents)TypeVar)Prompt)Resource)ResourceTemplate)Tool
ToolResult)Context)CallNext
MiddlewareMiddlewareContextT)defaultRT)	covariantr   c                      \ rS rSrSS jrSrg)r   *   c                    g N )selfcontexts     ^/home/james-whalen/.local/lib/python3.13/site-packages/fastmcp/server/middleware/middleware.py__call__CallNext.__call__,   s    s    r%   N)r'   MiddlewareContext[T]returnzAwaitable[R])__name__
__module____qualname____firstlineno__r)   __static_attributes__r%   r+   r(   r   r   *   s    Jr+   r   )kw_onlyfrozenc                  ~    \ rS rSr% SrS\S'   SrS\S'   SrS	\S
'   SrS\S'   Sr	S\S'   \
" S S9rS\S'   SS jrSrg)r   /   z0
Unified context for all middleware operations.
r   messageNzContext | Nonefastmcp_contextclientzLiteral['client', 'server']sourcerequestz"Literal['request', 'notification']typez
str | Nonemethodc                 J    [         R                  " [        R                  5      $ r$   )r	   nowr
   utcr%   r+   r(   <lambda>MiddlewareContext.<lambda>=   s    X\\8Rr+   )default_factoryr	   	timestampc                    [        U 40 UD6$ r$   )r   )r&   kwargss     r(   copyMiddlewareContext.copy?   s    t&v&&r+   r%   )rF   r   r-   r,   )r.   r/   r0   r1   __doc____annotations__r8   r:   r<   r=   r   rD   rG   r2   r%   r+   r(   r   r   /   sO     J&*O^* +3F'2/8D
,8FJ0RSIxS'r+   r   r   c                   ^ ^ SUU 4S jjnU$ )zCreate a wrapper that applies a single middleware to a context. The
closure bakes in the middleware and call_next function, so it can be
passed to other functions that expect a call_next function.c                2   >#    T" U T5      I S h  vN $  N7fr$   r%   )r'   	call_next
middlewares    r(   wrapper(make_middleware_wrapper.<locals>.wrapperJ   s     3333s   )r'   r,   r-   r   r%   )rN   rM   rO   s   `` r(   make_middleware_wrapperrQ   C   s    4 4 Nr+   c                  6   \ rS rSrSr      SS jr      SS jr      SS jr      SS jr      SS jr	      SS jr
      SS	 jr      SS
 jr      SS jr      SS jr      SS jr      SS jr      SS jrSrg)r   P   z9Base class for FastMCP middleware with dispatching hooks.c                b   #    U R                  UUS9I Sh  vN nU" U5      I Sh  vN $  N N7f)z0Main entry point that orchestrates the pipeline.rM   N)_dispatch_handler)r&   r'   rM   handler_chains       r(   r)   Middleware.__call__S   sA      #44 5 
 
 #7+++	
 ,s   /+/-//c                  #    UnUR                   =S:X  a    [        U R                  US9nO=S:X  a    [        U R                  US9nO=S:X  a    [        U R                  US9nO=S:X  a    [        U R
                  US9nOm=S:X  a    [        U R                  US9nOQ=S:X  a    [        U R                  US9nO5=S:X  a    [        U R                  US9nOS	:X  a  [        U R                  US9nUR                  =S
:X  a    [        U R                  US9nOS:X  a  [        U R                  US9n[        U R                  US9nU$ 7f)z/Builds a chain of handlers for a given message.
initializerU   z
tools/callzresources/readzprompts/getz
tools/listzresources/listzresources/templates/listzprompts/listr;   notification)r=   r   on_initializeon_call_toolon_read_resourceon_get_prompton_list_toolson_list_resourceson_list_resource_templateson_list_promptsr<   
on_requeston_notification
on_message)r&   r'   rM   handlers       r(   rV   Middleware._dispatch_handler_   s      nn!$"4"4H!$"3"3wG!!$"7"77K!$"4"4H!$"4"4H!!$"8"8GL+!$"A"AWU!$"6"6'Jll!$//WE!$"6"6'J$//W=s   EEc                .   #    U" U5      I S h  vN $  N7fr$   r%   r&   r'   rM   s      r(   rf   Middleware.on_message        
 w''''   c                .   #    U" U5      I S h  vN $  N7fr$   r%   rj   s      r(   rd   Middleware.on_request   rl   rm   c                .   #    U" U5      I S h  vN $  N7fr$   r%   rj   s      r(   re   Middleware.on_notification   rl   rm   c                .   #    U" U5      I S h  vN $  N7fr$   r%   rj   s      r(   r\   Middleware.on_initialize   rl   rm   c                .   #    U" U5      I S h  vN $  N7fr$   r%   rj   s      r(   r]   Middleware.on_call_tool   rl   rm   c                .   #    U" U5      I S h  vN $  N7fr$   r%   rj   s      r(   r^   Middleware.on_read_resource         w''''rm   c                .   #    U" U5      I S h  vN $  N7fr$   r%   rj   s      r(   r_   Middleware.on_get_prompt   rl   rm   c                .   #    U" U5      I S h  vN $  N7fr$   r%   rj   s      r(   r`   Middleware.on_list_tools   rl   rm   c                .   #    U" U5      I S h  vN $  N7fr$   r%   rj   s      r(   ra   Middleware.on_list_resources   rl   rm   c                .   #    U" U5      I S h  vN $  N7fr$   r%   rj   s      r(   rb   %Middleware.on_list_resource_templates   rx   rm   c                .   #    U" U5      I S h  vN $  N7fr$   r%   rj   s      r(   rc   Middleware.on_list_prompts   rl   rm   r%   N)r'   r,   rM   zCallNext[T, Any]r-   r   )r'   MiddlewareContext[Any]rM   CallNext[Any, Any]r-   r   )r'   r   rM   r   r-   r   )r'   z'MiddlewareContext[mt.Request[Any, Any]]rM   z#CallNext[mt.Request[Any, Any], Any]r-   r   )r'   z,MiddlewareContext[mt.Notification[Any, Any]]rM   z(CallNext[mt.Notification[Any, Any], Any]r-   r   )r'   z-MiddlewareContext[mt.InitializeRequestParams]rM   z*CallNext[mt.InitializeRequestParams, None]r-   None)r'   z+MiddlewareContext[mt.CallToolRequestParams]rM   z.CallNext[mt.CallToolRequestParams, ToolResult]r-   r   )r'   z/MiddlewareContext[mt.ReadResourceRequestParams]rM   zFCallNext[mt.ReadResourceRequestParams, Sequence[ReadResourceContents]]r-   zSequence[ReadResourceContents])r'   z,MiddlewareContext[mt.GetPromptRequestParams]rM   z7CallNext[mt.GetPromptRequestParams, mt.GetPromptResult]r-   zmt.GetPromptResult)r'   z&MiddlewareContext[mt.ListToolsRequest]rM   z-CallNext[mt.ListToolsRequest, Sequence[Tool]]r-   zSequence[Tool])r'   z*MiddlewareContext[mt.ListResourcesRequest]rM   z5CallNext[mt.ListResourcesRequest, Sequence[Resource]]r-   zSequence[Resource])r'   z2MiddlewareContext[mt.ListResourceTemplatesRequest]rM   zECallNext[mt.ListResourceTemplatesRequest, Sequence[ResourceTemplate]]r-   zSequence[ResourceTemplate])r'   z(MiddlewareContext[mt.ListPromptsRequest]rM   z1CallNext[mt.ListPromptsRequest, Sequence[Prompt]]r-   zSequence[Prompt])r.   r/   r0   r1   rI   r)   rV   rf   rd   re   r\   r]   r^   r_   r`   ra   rb   rc   r2   r%   r+   r(   r   r   P   s   C
,%
, $
, 
	
, - :L 	 D('( &( 
	((8( 7( 
	((=( <( 
	((>( >( 
	((<( B( 
	((@(
( 
(((=( K( 
	((7( A( 
	((;( I( 
	((C(
( 
$((9( E( 
	(r+   )rN   r   rM   CallNext[T, R]r-   r   )1
__future__r   loggingcollections.abcr   r   dataclassesr   r   r   r	   r
   	functoolsr   typingr   r   r   r   r   r   	mcp.typestypesmt mcp.server.lowlevel.helper_typesr   typing_extensionsr   fastmcp.prompts.promptr   fastmcp.resources.resourcer   fastmcp.resources.templater   fastmcp.tools.toolr   r   fastmcp.server.contextr   __all__	getLoggerr.   loggerr   r   r   r   rQ   r   r%   r+   r(   <module>r      s    "  / 1 1 '    A % ) / 7 /. 
		8	$ CC4- Kx1~ K K 4%'
 ' &'&

'5

@( @(r+   