a
    bgy!                     @   sh   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 de	e
ef ZG dd de	e
ef ZdS )	    )IteratorListOptionalSequenceTupleDocument)	BaseStorec                   @   s   e Zd ZdZddeeeee ddddZee e	ee
  ddd	Zeeee
f  dd
ddZee ddddZdee ee dd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             
   C   s   zddl m} W n. ty> } ztd|W Y d}~n
d}~0 0 |sLtd|sXtd|sdtd||fi |pri | _| 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   e r   q/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/storage/mongodb.py__init__%   s(    zMongoDBByteStore.__init__keysr   c                    s4   | j dd|ii}dd |D   fd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                 S   s   i | ]}|d  |d qS r#   valuer   .0docr   r   r   
<dictcomp>V       z)MongoDBByteStore.mget.<locals>.<dictcomp>c                    s   g | ]}  |qS r   getr(   keyZresult_dictr   r   
<listcomp>W   r+   z)MongoDBByteStore.mget.<locals>.<listcomp>r   findr   r!   resultr   r0   r   mgetJ   s    zMongoDBByteStore.mgetkey_value_pairsr   c                    s8   ddl m  dd |D }| j fd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                 S   s   g | ]\}}||d qS r%   r   r(   kvr   r   r   r1   b   r+   z)MongoDBByteStore.mset.<locals>.<listcomp>c                    s&   g | ]} d |d  id|iddqS r#   z$setT)Zupsertr   r(   ur9   r   r   r1   d   r+   Nr   r:   r   Z
bulk_writer   r8   Zupdatesr   r9   r   msetY   s
    zMongoDBByteStore.msetc                 C   s   | 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   Zdelete_manyr   r!   r   r   r   mdeleteg   s    zMongoDBByteStore.mdeleteprefixr   c                 c   s^   |du r*| j jdgdD ]}|d V  qn0| j jddd| iidgdD ]}|d V  qJdS zfYield keys in the store.

        Args:
            prefix (str): prefix of keys to retrieve.
        Nr#   )Z
projectionz$regex^r2   r   rJ   r)   r   r   r   
yield_keyso   s    
zMongoDBByteStore.yield_keys)N)__name__
__module____qualname____doc__strr   dictr   r   r   bytesr6   r   rD   rH   r   rN   r   r   r   r   r
      s   #%r
   c                   @   s   e Zd ZdZddeeeee ddddZee e	ee
  ddd	Zeeee
f  dd
ddZee ddddZdee ee dd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   c             
   C   s   zddl m} W n. ty> } ztd|W Y d}~n
d}~0 0 |sLtd|sXtd|sdtd||fi |pri | _| j| | | _dS r   r   r   r   r   r   r      s(    zMongoDBStore.__init__r    c                    s4   | j dd|ii}dd |D   fdd|D S )r"   r#   r$   c                 S   s$   i | ]}|d  t f i |d qS r%   r   r'   r   r   r   r*      r+   z%MongoDBStore.mget.<locals>.<dictcomp>c                    s   g | ]}  |qS r   r,   r.   r0   r   r   r1      r+   z%MongoDBStore.mget.<locals>.<listcomp>r2   r4   r   r0   r   r6      s    zMongoDBStore.mgetr7   c                    s8   ddl m  dd |D }| j fd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   r9   c                 S   s   g | ]\}}||j d qS r;   )__dict__r<   r   r   r   r1      r+   z%MongoDBStore.mset.<locals>.<listcomp>c                    s&   g | ]} d |d  id|iddqS r?   r   r@   r9   r   r   r1      r+   NrB   rC   r   r9   r   rD      s
    	zMongoDBStore.msetc                 C   s   | j dd|ii dS rE   rF   rG   r   r   r   rH      s    zMongoDBStore.mdeleterI   c                 c   s^   |du r*| j jdgdD ]}|d V  qn0| j jddd| iidgdD ]}|d V  qJdS rK   r2   rM   r   r   r   rN      s    
zMongoDBStore.yield_keys)N)rO   rP   rQ   rR   rS   r   rT   r   r   r   r   r6   r   rD   rH   r   rN   r   r   r   r   rV      s   %%rV   N)typingr   r   r   r   r   Zlangchain_core.documentsr   Zlangchain_core.storesr	   rS   rU   r
   rV   r   r   r   r   <module>   s   x