o
    c۷i                     @  s   d Z ddlm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 dd	lmZmZ erLdd
lmZ ddlmZ ddlmZmZ eeZG dd dZdS )zResource manager functionality.    )annotations)Callable)TYPE_CHECKINGAny)AnyUrl)Resource)ResourceTemplate)
get_logger)AnnotationsIcon)Context)ServerSessionT)LifespanContextTRequestTc                   @  sb   e Zd ZdZd,d-ddZd.d
dZ							d/d0ddZ	d1d2d$d%Zd3d'd(Zd4d*d+Z	dS )5ResourceManagerzManages FastMCP resources.Twarn_on_duplicate_resourcesboolc                 C  s   i | _ i | _|| _d S N)
_resources
_templatesr   )selfr    r   c/home/ubuntu/vllm_env/lib/python3.10/site-packages/mcp/server/fastmcp/resources/resource_manager.py__init__   s   
zResourceManager.__init__resourcer   returnc                 C  sf   t jd|jt|j|jdd | jt|j}|r)| j	r't 
d|j  |S || jt|j< |S )zAdd a resource to the manager.

        Args:
            resource: A Resource instance to add

        Returns:
            The added resource. If a resource with the same URI already exists,
            returns the existing resource.
        zAdding resource)urityperesource_nameextrazResource already exists: )loggerdebugr   r   __name__namer   getstrr   warning)r   r   existingr   r   r   add_resource   s   
zResourceManager.add_resourceNfnCallable[..., Any]uri_templater&   r$   
str | Nonetitledescription	mime_typeiconslist[Icon] | Noner   Annotations | Nonemetadict[str, Any] | Noner   c
                 C  s,   t j|||||||||	d	}
|
| j|
j< |
S )zAdd a template from a function.)r,   r$   r.   r/   r0   r1   r   r4   )r   from_functionr   r,   )r   r*   r,   r$   r.   r/   r0   r1   r   r4   templater   r   r   add_template9   s   zResourceManager.add_templater   AnyUrl | strcontext:Context[ServerSessionT, LifespanContextT, RequestT] | NoneResource | Nonec                   s   t |}tjdd|id | j| }r|S | j D ]+}|| }rHz|j|||dI dH W   S  t	yG } zt
d| d}~ww qt
d| )zGGet resource by URI, checking concrete resources first, then templates.zGetting resourcer   r   )r:   Nz'Error creating resource from template: zUnknown resource: )r&   r!   r"   r   r%   r   valuesmatchescreate_resource	Exception
ValueError)r   r   r:   uri_strr   r7   paramser   r   r   get_resourceT   s   zResourceManager.get_resourcelist[Resource]c                 C  &   t jddt| jid t| j S )zList all registered resources.zListing resourcescountr   )r!   r"   lenr   listr=   r   r   r   r   list_resourcesk      zResourceManager.list_resourceslist[ResourceTemplate]c                 C  rG   )zList all registered templates.zListing templatesrH   r   )r!   r"   rI   r   rJ   r=   rK   r   r   r   list_templatesp   rM   zResourceManager.list_templates)T)r   r   )r   r   r   r   )NNNNNNN)r*   r+   r,   r&   r$   r-   r.   r-   r/   r-   r0   r-   r1   r2   r   r3   r4   r5   r   r   r   )r   r9   r:   r;   r   r<   )r   rF   )r   rN   )
r#   
__module____qualname____doc__r   r)   r8   rE   rL   rO   r   r   r   r   r      s     

r   N)rR   
__future__r   collections.abcr   typingr   r   pydanticr   !mcp.server.fastmcp.resources.baser   &mcp.server.fastmcp.resources.templatesr   $mcp.server.fastmcp.utilities.loggingr	   	mcp.typesr
   r   mcp.server.fastmcp.serverr   mcp.server.sessionr   mcp.shared.contextr   r   r#   r!   r   r   r   r   r   <module>   s    