
    j
i                         d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	 de
dedefd	Zd
ede
dee         fdZddd
ede
ee
         z  dz  dee         fdZdS )a   Resources adapter for converting MCP resources to LangChain [Blob objects][langchain_core.documents.base.Blob].

This module provides functionality to convert MCP resources into LangChain Blob
objects, handling both text and binary resource content types.
    N)Blob)ClientSession)BlobResourceContentsResourceContentsTextResourceContentsresource_uricontentsreturnc                     t          |t                    r|j        }nCt          |t                    rt	          j        |j                  }nd|  }t          |          t          j	        ||j
        d| i          S )zConvert an MCP resource content to a LangChain Blob.

    Args:
        resource_uri: URI of the resource
        contents: The resource contents

    Returns:
        A LangChain Blob

    z!Unsupported content type for URI uri)data	mime_typemetadata)
isinstancer   textr   base64	b64decodeblob	TypeErrorr   	from_datamimeType)r   r	   r   msgs       C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langchain_mcp_adapters/resources.py&convert_mcp_resource_to_langchain_blobr      s     (011 }	H2	3	3 ..@,@@nn>X.%9N       sessionr   c                    K   |                                 d{V }|j        rt          |j                  dk    rg S fd|j        D             S )a)  Fetch a single MCP resource and convert it to LangChain [Blob objects][langchain_core.documents.base.Blob].

    Args:
        session: MCP client session.
        uri: URI of the resource to fetch.

    Returns:
        A list of LangChain [Blob][langchain_core.documents.base.Blob] objects.
    Nr   c                 0    g | ]}t          |          S  )r   ).0contentr   s     r   
<listcomp>z$get_mcp_resource.<locals>.<listcomp>6   s3        	/sG<<  r   )read_resourcer	   len)r   r   contents_results    ` r   get_mcp_resourcer&   (   s       $11#66666666O# s?+C'D'D'I'I	   &/   r   )urisr'   c                Z  K   g }|,|                                   d{V }d |j        D             }nt          |t                    r|g}n|}d}	 |D ]/}|}t	          | |           d{V }|                    |           0n'# t          $ r}d| }	t          |	          |d}~ww xY w|S )az  Load MCP resources and convert them to LangChain [Blob objects][langchain_core.documents.base.Blob].

    Args:
        session: MCP client session.
        uris: List of URIs to load. If `None`, all resources will be loaded.

            !!! note

                Dynamic resources will NOT be loaded when `None` is specified,
                as they require parameters and are ignored by the MCP SDK's
                `session.list_resources()` method.

    Returns:
        A list of LangChain [Blob][langchain_core.documents.base.Blob] objects.

    Raises:
        RuntimeError: If an error occurs while fetching a resource.
    Nc                     g | ]	}|j         
S r   )r   )r    rs     r   r"   z&load_mcp_resources.<locals>.<listcomp>W   s    <<<aAE<<<r   zError fetching resource )list_resources	resourcesr   strr&   extend	ExceptionRuntimeError)
r   r'   blobsresources_listuri_listcurrent_urir   resource_blobser   s
             r   load_mcp_resourcesr7   <   s     . E|&5577777777<<>#;<<<	D#		 6K' 	) 	)CK#3GS#A#AAAAAAANLL((((	)  ' ' '6663Q&' Ls   2B 
B(B##B()__doc__r   langchain_core.documents.baser   mcpr   	mcp.typesr   r   r   r-   r   listr&   r7   r   r   r   <module>r=      s     . . . . . .       R R R R R R R R R R!1	   4M  T
    . $(+ + ++ S	/D
 + 
$Z	+ + + + + +r   