o
    iP                     @  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                   @  s`   e Zd ZdZd*d+ddZd,d
dZ						d-d.ddZ	d/d0d"d#Zd1d%d&Zd2d(d)Z	dS )3ResourceManagerzManages FastMCP resources.Twarn_on_duplicate_resourcesboolc                 C  s   i | _ i | _|| _d S N)
_resources
_templatesr   )selfr    r   s/var/www/html/karishye-ai-python/venv/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 | Noner   c	           
   
   C  s*   t j||||||||d}	|	| j|	j< |	S )zAdd a template from a function.)r,   r$   r.   r/   r0   r1   r   )r   from_functionr   r,   )
r   r*   r,   r$   r.   r/   r0   r1   r   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   )r8   Nz'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er   r   r   get_resourceR   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_resourcesi      zResourceManager.list_resourceslist[ResourceTemplate]c                 C  rE   )zList all registered templates.zListing templatesrF   r   )r!   r"   rG   r   rH   r;   rI   r   r   r   list_templatesn   rK   zResourceManager.list_templates)T)r   r   )r   r   r   r   )NNNNNN)r*   r+   r,   r&   r$   r-   r.   r-   r/   r-   r0   r-   r1   r2   r   r3   r   r   r   )r   r7   r8   r9   r   r:   )r   rD   )r   rL   )
r#   
__module____qualname____doc__r   r)   r6   rC   rJ   rM   r   r   r   r   r      s    

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   r   r   r   r   <module>   s    