
    Ki                        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rdd
lmZ ddlmZ ddlmZmZ  ee      Z G d d      Zy)zResource manager functionality.    )annotations)Callable)TYPE_CHECKINGAny)AnyUrl)Resource)ResourceTemplate)
get_logger)AnnotationsIcon)Context)ServerSessionT)LifespanContextTRequestTc                      e Zd ZdZd	d
dZddZ	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 ddZddZddZ	y)ResourceManagerzManages FastMCP resources.c                .    i | _         i | _        || _        y N)
_resources
_templateswarn_on_duplicate_resources)selfr   s     y/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/mcp/server/fastmcp/resources/resource_manager.py__init__zResourceManager.__init__   s    /179+F(    c                   t         j                  d|j                  t        |      j                  |j
                  d       | j                  j                  t        |j                              }|r0| j                  r"t         j                  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   resourceexistings      r   add_resourcezResourceManager.add_resource   s     	||X//!) 	 	
 ??&&s8<<'89//!:8<<.IJO-5HLL)*r   Nc
                t    t        j                  |||||||||		      }
|
| j                  |
j                  <   |
S )zAdd a template from a function.)uri_templater%   titledescription	mime_typeiconsr   meta)r	   from_functionr   r-   )r   fnr-   r%   r.   r/   r0   r1   r   r2   templates              r   add_templatezResourceManager.add_template9   sJ     $11%##

 2:--.r   c                  K   t        |      }t        j                  dd|i       | j                  j	                  |      x}r|S | j
                  j                         D ]4  }|j                  |      x}s	 |j                  |||       d{   c S  t        d|       7 # t        $ r}t        d|       d}~ww xY ww)zGGet resource by URI, checking concrete resources first, then templates.zGetting resourcer   r    )contextNz'Error creating resource from template: zUnknown resource: )r'   r"   r#   r   r&   r   valuesmatchescreate_resource	Exception
ValueError)r   r   r8   uri_strr)   r5   paramses           r   get_resourcezResourceManager.get_resourceT   s      c('w/?@ **73383O ..0 	TH!))'22v2T!)!9!9'6SZ!9![[[	T -cU344	 \  T$'Nqc%RSSTs<   A4C8B'B%B'C%B''	C0B>>CCc                    t         j                  ddt        | j                        i       t	        | j                  j                               S )zList all registered resources.zListing resourcescountr    )r"   r#   lenr   listr9   r   s    r   list_resourceszResourceManager.list_resourcesk   9    (#doo:N0OPDOO**,--r   c                    t         j                  ddt        | j                        i       t	        | j                  j                               S )zList all registered templates.zListing templatesrC   r    )r"   r#   rD   r   rE   r9   rF   s    r   list_templateszResourceManager.list_templatesp   rH   r   )T)r   bool)r)   r   returnr   )NNNNNNN)r4   zCallable[..., Any]r-   r'   r%   
str | Noner.   rM   r/   rM   r0   rM   r1   zlist[Icon] | Noner   zAnnotations | Noner2   zdict[str, Any] | NonerL   r	   r   )r   zAnyUrl | strr8   z:Context[ServerSessionT, LifespanContextT, RequestT] | NonerL   zResource | None)rL   zlist[Resource])rL   zlist[ResourceTemplate])
r$   
__module____qualname____doc__r   r+   r6   rA   rG   rJ    r   r   r   r      s    $G
<   "& $#'*.&*  	
     ! ( $ 
< OS55 L5 
	5..
.r   r   N)rP   
__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   rQ   r   r   <module>r]      sB    % " $ %  6 C ; '11=	H	\. \.r   