
    Ngy!                         d dl mZmZmZmZmZ d dlmZ d dlm	Z	  G d de	e
ef                   Z G d de	e
ef                   ZdS )	    )IteratorListOptionalSequenceTupleDocument)	BaseStorec                       e Zd ZdZdddedededee         ddf
d	Zd
ee         de	ee
                  fdZdeeee
f                  ddfdZd
ee         ddfdZddee         dee         fdZdS )MongoDBByteStorea  BaseStore implementation using MongoDB as the underlying store.

    Examples:
        Create a MongoDBByteStore instance and perform operations on it:

        .. code-block:: python

            # Instantiate the MongoDBByteStore with a MongoDB connection
            from langchain.storage import MongoDBByteStore

            mongo_conn_str = "mongodb://localhost:27017/"
            mongodb_store = MongoDBBytesStore(mongo_conn_str, db_name="test-db",
                                         collection_name="test-collection")

            # Set values for keys
            mongodb_store.mset([("key1", "hello"), ("key2", "workd")])

            # Get values for keys
            values = mongodb_store.mget(["key1", "key2"])
            # [bytes1, bytes1]

            # Iterate over keys
            for key in mongodb_store.yield_keys():
                print(key)

            # Delete keys
            mongodb_store.mdelete(["key1", "key2"])
    Nclient_kwargsconnection_stringdb_namecollection_namer   returnc                   	 ddl m} n"# t          $ r}t          d          |d}~ww xY w|st          d          |st          d          |st          d           ||fi |pi | _        | j        |         |         | _        dS aE  Initialize the MongoDBStore with a MongoDB connection string.

        Args:
            connection_string (str): MongoDB connection string
            db_name (str): name to use
            collection_name (str): collection name to use
            client_kwargs (dict): Keyword arguments to pass to the Mongo client
        r   )MongoClientzRThe MongoDBStore requires the pymongo library to be installed. pip install pymongoNz#connection_string must be provided.zdb_name must be provided.z!collection_name must be provided.pymongor   ImportError
ValueErrorclient
collectionselfr   r   r   r   r   es          _/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/storage/mongodb.py__init__zMongoDBByteStore.__init__%        	+++++++ 	 	 	&  		 ! 	DBCCC 	:8999 	B@AAA#.;$
 $
"/"52$
 $
 +g.?   	 
(#(keysc                 t    | j                             dd|ii          }d |D             fd|D             S )z  Get the list of documents associated with the given keys.

        Args:
            keys (list[str]): A list of keys representing Document IDs..

        Returns:
            list[Document]: A list of Documents corresponding to the provided
                keys, where each Document is either retrieved successfully or
                represented as None if not found.
        _id$inc                 ,    i | ]}|d          |d         S r&   value .0docs     r   
<dictcomp>z)MongoDBByteStore.mget.<locals>.<dictcomp>V   s"    BBBCs5z3w<BBB    c                 :    g | ]}                     |          S r+   getr-   keyresult_dicts     r   
<listcomp>z)MongoDBByteStore.mget.<locals>.<listcomp>W   %    555$$555r0   r   findr   r#   resultr6   s      @r   mgetzMongoDBByteStore.mgetJ   sP     %%uudm&<==BB6BBB55555555r0   key_value_pairsc                 x    ddl m d |D             }| j                            fd|D                        dS )zSet the given key-value pairs.

        Args:
            key_value_pairs (list[tuple[str, Document]]): A list of id-document
                pairs.
        r   	UpdateOnec                     g | ]
\  }}||d S r)   r+   r-   kvs      r   r7   z)MongoDBByteStore.mset.<locals>.<listcomp>b   s$    FFFda1q))FFFr0   c                 @    g | ]} d |d          id|id          S r&   z$setT)upsertr+   r-   urA   s     r   r7   z)MongoDBByteStore.mset.<locals>.<listcomp>d   7    UUUYYqx(61+dCCCUUUr0   Nr   rA   r   
bulk_writer   r>   updatesrA   s      @r   msetzMongoDBByteStore.msetY   se     	&%%%%%FFoFFF""UUUUWUUU	
 	
 	
 	
 	
r0   c                 B    | j                             dd|ii           dS zvDelete the given ids.

        Args:
            keys (list[str]): A list of keys representing Document IDs..
        r&   r'   Nr   delete_manyr   r#   s     r   mdeletezMongoDBByteStore.mdeleteg   )     	##UUDM$:;;;;;r0   prefixc              #      K   |+| j                             dg          D ]}|d         V  dS | j                             ddd| iidg          D ]}|d         V  dS zfYield keys in the store.

        Args:
            prefix (str): prefix of keys to retrieve.
        Nr&   )
projectionz$regex^r9   r   rY   r.   s      r   
yield_keyszMongoDBByteStore.yield_keyso          >++w+?? ! !%j    ! ! ++<v<<01ug ,   ! ! %j    ! !r0   N)__name__
__module____qualname____doc__strr   dictr    r   r   bytesr=   r   rQ   rW   r   r_   r+   r0   r   r   r      s6        F )-#@ #@ #@#@ #@ 	#@  ~#@ 
#@ #@ #@ #@J6# 64+@ 6 6 6 6
HU3:->$? 
D 
 
 
 
<HSM <d < < < <! !# !(3- ! ! ! ! ! !r0   r   c                       e Zd ZdZdddedededee         ddf
d	Zd
ee         de	ee
                  fdZdeeee
f                  ddfdZd
ee         ddfdZddee         dee         fdZdS )MongoDBStorea  BaseStore implementation using MongoDB as the underlying store.

    Examples:
        Create a MongoDBStore instance and perform operations on it:

        .. code-block:: python

            # Instantiate the MongoDBStore with a MongoDB connection
            from langchain.storage import MongoDBStore

            mongo_conn_str = "mongodb://localhost:27017/"
            mongodb_store = MongoDBStore(mongo_conn_str, db_name="test-db",
                                         collection_name="test-collection")

            # Set values for keys
            doc1 = Document(...)
            doc2 = Document(...)
            mongodb_store.mset([("key1", doc1), ("key2", doc2)])

            # Get values for keys
            values = mongodb_store.mget(["key1", "key2"])
            # [doc1, doc2]

            # Iterate over keys
            for key in mongodb_store.yield_keys():
                print(key)

            # Delete keys
            mongodb_store.mdelete(["key1", "key2"])
    Nr   r   r   r   r   r   c                   	 ddl m} n"# t          $ r}t          d          |d}~ww xY w|st          d          |st          d          |st          d           ||fi |pi | _        | j        |         |         | _        dS r   r   r   s          r   r    zMongoDBStore.__init__   r!   r"   r#   c                 t    | j                             dd|ii          }d |D             fd|D             S )r%   r&   r'   c           	      @    i | ]}|d          t          di |d         S )r&   r*   r+   r   r,   s     r   r/   z%MongoDBStore.mget.<locals>.<dictcomp>   s0    NNNs5z8#;#;c'l#;#;NNNr0   c                 :    g | ]}                     |          S r+   r2   r4   s     r   r7   z%MongoDBStore.mget.<locals>.<listcomp>   r8   r0   r9   r;   s      @r   r=   zMongoDBStore.mget   sP     %%uudm&<==NNvNNN55555555r0   r>   c                 x    ddl m d |D             }| j                            fd|D                        dS )zSet the given key-value pairs.

        Args:
            key_value_pairs (list[tuple[str, Document]]): A list of id-document
                pairs.
        Returns:
            None
        r   r@   c                 (    g | ]\  }}||j         d S rC   )__dict__rD   s      r   r7   z%MongoDBStore.mset.<locals>.<listcomp>   s&    OOOtq!1qz22OOOr0   c                 @    g | ]} d |d          id|id          S rH   r+   rJ   s     r   r7   z%MongoDBStore.mset.<locals>.<listcomp>   rL   r0   NrM   rO   s      @r   rQ   zMongoDBStore.mset   se     	&%%%%%OOOOO""UUUUWUUU	
 	
 	
 	
 	
r0   c                 B    | j                             dd|ii           dS rS   rT   rV   s     r   rW   zMongoDBStore.mdelete   rX   r0   rY   c              #      K   |+| j                             dg          D ]}|d         V  dS | j                             ddd| iidg          D ]}|d         V  dS r[   r9   r^   s      r   r_   zMongoDBStore.yield_keys   r`   r0   ra   )rb   rc   rd   re   rf   r   rg   r    r   r   r	   r=   r   rQ   rW   r   r_   r+   r0   r   rj   rj      s7        J )-#@ #@ #@#@ #@ 	#@  ~#@ 
#@ #@ #@ #@J6# 640B+C 6 6 6 6
HU3=-A$B 
t 
 
 
 
 <HSM <d < < < <! !# !(3- ! ! ! ! ! !r0   rj   N)typingr   r   r   r   r   langchain_core.documentsr	   langchain_core.storesr
   rf   rh   r   rj   r+   r0   r   <module>rx      s    < < < < < < < < < < < < < < - - - - - - + + + + + +u! u! u! u! u!ye, u! u! u!py! y! y! y! y!9S(]+ y! y! y! y! y!r0   