
    Ch                        S r SSKJr  SSKJr  SSKJrJr  SSKJ	r	  SSK
Jr  SSKJr  SSKJr  SS	KJr  \(       a  SS
KJr  SSKJr  SSKJrJr  \" \5      r " S S5      rg)zResource manager functionality.    )annotations)Callable)TYPE_CHECKINGAny)AnyUrl)Resource)ResourceTemplate)
get_logger)Icon)Context)ServerSessionT)LifespanContextTRequestTc                      \ rS rSrSrSSS jjrSS jr     S               SS jjr S     SS jjrSS jr	SS	 jr
S
rg)ResourceManager   zManages FastMCP resources.c                ,    0 U l         0 U l        Xl        g N
_resources
_templateswarn_on_duplicate_resources)selfr   s     g/home/james-whalen/.local/lib/python3.13/site-packages/mcp/server/fastmcp/resources/resource_manager.py__init__ResourceManager.__init__   s    /179+F(    c                   [         R                  SUR                  [        U5      R                  UR
                  S.S9  U R                  R                  [        UR                  5      5      nU(       a5  U R                  (       a"  [         R                  SUR                   35        U$ XR                  [        UR                  5      '   U$ )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_resourceResourceManager.add_resource   s     	||X//!) 	 	
 ??&&s8<<'89//!:8<<.IJO-5HLL)*r   Nc           
     j    [         R                  " UUUUUUUS9nXR                  UR                  '   U$ )zAdd a template from a function.)uri_templater'   titledescription	mime_typeicons)r	   from_functionr   r0   )	r   fnr0   r'   r1   r2   r3   r4   templates	            r   add_templateResourceManager.add_template9   sB     $11%#
 2:--.r   c                  #    [        U5      n[        R                  SSU0S9  U R                  R	                  U5      =n(       a  U$ U R
                  R                  5        H6  nUR                  U5      =n(       d  M   UR                  X6US9I Sh  vN s  $    [        SU 35      e N! [         a  n[        SU 35      eSnAff = f7f)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   r;   uri_strr+   r7   paramses           r   get_resourceResourceManager.get_resourceP   s      c('w/?@ **73383O ..0H!))'22v2T!)!9!9'SZ!9![[[ 1 -cU344	 \  T$'Nqc%RSSTs<   A9C B,B*B,C*B,,
C	6CC		Cc                    [         R                  SS[        U R                  5      0S9  [	        U R                  R                  5       5      $ )zList all registered resources.zListing resourcescountr"   )r$   r%   lenr   listr<   r   s    r   list_resourcesResourceManager.list_resourcesg   9    (#doo:N0OPDOO**,--r   c                    [         R                  SS[        U R                  5      0S9  [	        U R                  R                  5       5      $ )zList all registered templates.zListing templatesrG   r"   )r$   r%   rH   r   rI   r<   rJ   s    r   list_templatesResourceManager.list_templatesl   rM   r   r   )T)r   bool)r+   r   returnr   )NNNNN)r6   zCallable[..., Any]r0   r)   r'   
str | Noner1   rS   r2   rS   r3   rS   r4   zlist[Icon] | NonerR   r	   r   )r   zAnyUrl | strr;   z:Context[ServerSessionT, LifespanContextT, RequestT] | NonerR   zResource | None)rR   zlist[Resource])rR   zlist[ResourceTemplate])r&   
__module____qualname____firstlineno____doc__r   r-   r8   rD   rK   rO   __static_attributes__ r   r   r   r      s    $G
<   "& $#'  	
     ! 
4 OS55 L5 
	5..
.r   r   N)rW   
__future__r   collections.abcr   typingr   r   pydanticr   !mcp.server.fastmcp.resources.baser   &mcp.server.fastmcp.resources.templatesr	   $mcp.server.fastmcp.utilities.loggingr
   	mcp.typesr   mcp.server.fastmcp.serverr   mcp.server.sessionr   mcp.shared.contextr   r   r&   r$   r   rY   r   r   <module>re      sB    % " $ %  6 C ; 11=	H	X. X.r   