
    {h-                     t    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y
)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
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y)ResourceManagerzManages FastMCP resources.warn_on_duplicate_resourcesc                 .    i | _         i | _        || _        y )N)
_resources
_templatesr   )selfr   s     n/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/mcp/server/fastmcp/resources/resource_manager.py__init__zResourceManager.__init__   s    /179+F(    resourcereturnc                    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   r   existings      r   add_resourcezResourceManager.add_resource   s     	||X//!) 	 	
 ??&&s8<<'89//!:8<<.IJO-5HLL)*r   Nfn.uri_templater   titledescription	mime_typec                 n    t        j                  ||||||      }|| j                  |j                  <   |S )zAdd a template from a function.)r%   r   r&   r'   r(   )r   from_functionr   r%   )r   r$   r%   r   r&   r'   r(   templates           r   add_templatezResourceManager.add_template1   sA     $11%#
 2:--.r   r   c                   K   t        |      }t        j                  dd|i       | j                  j	                  |      x}r|S | j
                  j                         D ]2  }|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   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_resourceF   s     c('w/?@ **73383O ..0 	TH!))'22v2T!)!9!9'6!JJJ	T -cU344	 K  T$'Nqc%RSSTs<   A4C8B%B#B%C#B%%	C.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   listr.   r   s    r   list_resourceszResourceManager.list_resourcesY   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 templatesr8   r   )r   r   r9   r   r:   r.   r;   s    r   list_templateszResourceManager.list_templates^   r=   r   )T)NNNN)r   
__module____qualname____doc__boolr   r   r#   r   r   r    r   r,   r   r6   r:   r<   r?    r   r   r
   r
      s    $GD G
X ( <   "& $S#X  Dj	
 Tz 4Z : 
*5fsl 5x$ 5&.X .
.%5 6 .r   r
   N)rB   collections.abcr   typingr   pydanticr   !mcp.server.fastmcp.resources.baser   &mcp.server.fastmcp.resources.templatesr   $mcp.server.fastmcp.utilities.loggingr   r   r   r
   rD   r   r   <module>rK      s0    % $   6 C ;	H	R. R.r   