
    .h                         d 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
 ddlmZ  ee          Z G d d	          Zd
S )zResource manager functionality.    )Callable)Any)AnyUrl)Resource)ResourceTemplate)
get_loggerc                       e Zd ZdZddefdZdedefdZ	 	 	 dd	ed
e	f         de
de
dz  de
dz  de
dz  defdZdee
z  dedz  fdZdee         fdZdee         fdZdS )ResourceManagerzManages FastMCP resources.Twarn_on_duplicate_resourcesc                 0    i | _         i | _        || _        d S )N)
_resources
_templatesr   )selfr   s     j/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/mcp/server/fastmcp/resources/resource_manager.py__init__zResourceManager.__init__   s    /179+F(((    resourcereturnc                 h   t                               d|j        t          |          j        |j        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   existings      r   add_resourcezResourceManager.add_resource   s     	|X/!)  	 	
 	
 	
 ?&&s8<'8'899 	/ KI8<IIJJJO-5HL))*r   Nfn.uri_templater   description	mime_typec                 V    t          j        |||||          }|| j        |j        <   |S )zAdd a template from a function.)r%   r   r&   r'   )r   from_functionr   r%   )r   r$   r%   r   r&   r'   templates          r   add_templatezResourceManager.add_template1   s@     $1%#
 
 
 2:-.r   r   c                   K   t          |          }t                              dd|i           | j                            |          x}r|S | j                                        D ]\}|                    |          x}rC	 |                    ||           d{V c S # t          $ r}t          d|           d}~ww xY w]t          d|           )zGGet resource by URI, checking concrete resources first, then templates.zGetting resourcer   r   Nz'Error creating resource from template: zUnknown resource: )r    r   r   r   r   r   valuesmatchescreate_resource	Exception
ValueError)r   r   uri_strr   r*   paramses          r   get_resourcezResourceManager.get_resourceD   s     c(('w/?@@@ **73338 	O ..00 	T 	TH!))'222v TT!)!9!9'6!J!JJJJJJJJJJ  T T T$%Rq%R%RSSSTT 3c33444s   B
C )B;;C c                     t                               ddt          | j                  i           t	          | j                                                  S )zList all registered resources.zListing resourcescountr   )r   r   lenr   listr-   r   s    r   list_resourceszResourceManager.list_resourcesW   D    (#do:N:N0OPPPDO**,,---r   c                     t                               ddt          | j                  i           t	          | j                                                  S )zList all registered templates.zListing templatesr7   r   )r   r   r8   r   r9   r-   r:   s    r   list_templateszResourceManager.list_templates\   r<   r   )T)NNN)r   
__module____qualname____doc__boolr   r   r#   r   r   r    r   r+   r   r5   r9   r;   r>    r   r   r
   r
      s?       $$G GD G G G G
X (    <  "& $ S#X  Dj	
 4Z : 
   &5fsl 5x$ 5 5 5 5&.X . . . .
.%5 6 . . . . . .r   r
   N)rA   collections.abcr   typingr   pydanticr   !mcp.server.fastmcp.resources.baser   &mcp.server.fastmcp.resources.templatesr   $mcp.server.fastmcp.utilities.loggingr   r   r   r
   rC   r   r   <module>rJ      s    % % $ $ $ $ $ $             6 6 6 6 6 6 C C C C C C ; ; ; ; ; ;	H		P. P. P. P. P. P. P. P. P. P.r   