a
    ag                     @   sh   d dl mZmZmZmZmZmZmZmZm	Z	m
Z
 d dlmZ e	dZe	dZG dd deeef ZdS )    )
AnyAsyncIteratorCallableIteratorListOptionalSequenceTupleTypeVarUnion)	BaseStoreKVc                   @   s8  e Zd ZdZeeef eegef ee	ge
f eege	f ddddZee eee	  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ee	f  ddddZee ddddZee ddddZddee eee ee f dddZddee eee ee f dddZdS )EncoderBackedStorea  Wraps a store with key and value encoders/decoders.

    Examples that uses JSON for encoding/decoding:

    .. code-block:: python

        import json

        def key_encoder(key: int) -> str:
            return json.dumps(key)

        def value_serializer(value: float) -> str:
            return json.dumps(value)

        def value_deserializer(serialized_value: str) -> float:
            return json.loads(serialized_value)

        # Create an instance of the abstract store
        abstract_store = MyCustomStore()

        # Create an instance of the encoder-backed store
        store = EncoderBackedStore(
            store=abstract_store,
            key_encoder=key_encoder,
            value_serializer=value_serializer,
            value_deserializer=value_deserializer
        )

        # Use the encoder-backed store methods
        store.mset([(1, 3.14), (2, 2.718)])
        values = store.mget([1, 2])  # Retrieves [3.14, 2.718]
        store.mdelete([1, 2])  # Deletes the keys 1 and 2
    N)storekey_encodervalue_serializervalue_deserializerreturnc                 C   s   || _ || _|| _|| _dS )zInitialize an EncodedStore.N)r   r   r   r   )selfr   r   r   r    r   n/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain/storage/encoder_backed.py__init__7   s    zEncoderBackedStore.__init__)keysr   c                    s0    fdd|D } j |} fdd|D S ).Get the values associated with the given keys.c                    s   g | ]}  |qS r   r   .0keyr   r   r   
<listcomp>F       z+EncoderBackedStore.mget.<locals>.<listcomp>c                    s"   g | ]}|d ur  |n|qS Nr   r   valuer   r   r   r    H   s   )r   mgetr   r   encoded_keysvaluesr   r   r   r&   D   s
    
zEncoderBackedStore.mgetc                    s6    fdd|D } j |I dH } fdd|D S )r   c                    s   g | ]}  |qS r   r   r   r   r   r   r    O   r!   z,EncoderBackedStore.amget.<locals>.<listcomp>Nc                    s"   g | ]}|d ur  |n|qS r"   r#   r$   r   r   r   r    Q   s   )r   amgetr'   r   r   r   r*   M   s
    
zEncoderBackedStore.amget)key_value_pairsr   c                    s"    fdd|D } j | dS )"Set the values for the given keys.c                    s$   g | ]\}}  | |fqS r   r   r   r   r   r%   r   r   r   r    X   s   z+EncoderBackedStore.mset.<locals>.<listcomp>N)r   msetr   r+   Zencoded_pairsr   r   r   r/   V   s    
zEncoderBackedStore.msetc                    s(    fdd|D } j |I dH  dS )r,   c                    s$   g | ]\}}  | |fqS r   r-   r.   r   r   r   r    `   s   z,EncoderBackedStore.amset.<locals>.<listcomp>N)r   amsetr0   r   r   r   r1   ^   s    
zEncoderBackedStore.amsetc                    s"    fdd|D } j | dS )2Delete the given keys and their associated values.c                    s   g | ]}  |qS r   r   r   r   r   r   r    h   r!   z.EncoderBackedStore.mdelete.<locals>.<listcomp>N)r   mdeleter   r   r(   r   r   r   r3   f   s    zEncoderBackedStore.mdeletec                    s(    fdd|D } j |I dH  dS )r2   c                    s   g | ]}  |qS r   r   r   r   r   r   r    m   r!   z/EncoderBackedStore.amdelete.<locals>.<listcomp>N)r   amdeleter4   r   r   r   r5   k   s    zEncoderBackedStore.amdeleteprefix)r7   r   c                c   s   | j j|dE dH  dS z6Get an iterator over keys that match the given prefix.r6   N)r   
yield_keys)r   r7   r   r   r   r9   p   s    zEncoderBackedStore.yield_keysc                C  s(   | j j|d2 z3 dH W }|V  q6 dS r8   )r   ayield_keys)r   r7   r   r   r   r   r:   x   s    zEncoderBackedStore.ayield_keys)__name__
__module____qualname____doc__r   strr   r   r   r   bytesr   r   r   r   r&   r*   r	   r/   r1   r3   r5   r   r   r9   r   r:   r   r   r   r   r      s.   $
			r   N)typingr   r   r   r   r   r   r   r	   r
   r   Zlangchain_core.storesr   r   r   r   r   r   r   r   <module>   s   0